Masalah air
- Sebagian besar game tidak memungkinkan modifikasi medan, dan itu masuk akal. Tidak semua game memerlukannya.
- Dalam game yang memiliki air, perlu dipikirkan bagaimana menangani aliran air.
- Model sederhana yang ada tidak memuaskan, sehingga perlu penelitian untuk menemukan model yang lebih baik.
Pengaturan
- Simulasi harus bekerja pada grid, dan sebaiknya menggunakan grid yang sama dengan medan.
- Skala rata-rata simulasi sebaiknya sekitar 1 meter.
- Air dapat diasumsikan sebagai height field di atas medan, dan tidak mengalir secara vertikal.
- Air harus bisa mengalir, dan tidak boleh menghilang secara ajaib akibat kesalahan simulasi.
- Simulasi harus memiliki stabilitas yang dapat dikendalikan, dan harus berjalan cepat.
Bukan solusi
- Smoothed Particle Hydrodynamics memberikan hasil yang sangat mengesankan, tetapi menyelesaikan masalah yang berbeda.
- Stable Fluids karya Jos Stam menangani seluruh volume fluida, dan tidak cepat.
Persamaan air dangkal
- Persamaan air dangkal merata-ratakan arah vertikal sehingga menyisakan persamaan 2D.
- Bagian "dangkal" mengasumsikan bahwa ukuran vertikal khas kolom air jauh lebih kecil daripada skala horizontalnya.
Grid
- Dalam dinamika fluida, grid itu penting, dan umumnya digunakan staggered grids.
- Staggered grids menyimpan tinggi/kepadatan air dan sebagainya di sel persegi, sementara kecepatan disimpan di tepi di antara sel.
Metode pipa virtual
- Aliran air disimulasikan dengan mengasumsikan bahwa sel air terhubung oleh pipa virtual.
- Metode ini terdiri dari tiga tahap: percepatan aliran, penskalaan aliran keluar, dan pembaruan kolom air.
Percepatan aliran
- Aliran dipercepat berdasarkan perbedaan tinggi air antara sel air yang bersebelahan.
- Gesekan ditambahkan agar simulasi konvergen ke keadaan yang stabil.
Pembaruan kolom air
- Untuk setiap sel air, air ditambahkan atau dikurangi sesuai aliran yang bersebelahan.
Penskalaan aliran keluar
- Aliran keluar disesuaikan agar jumlah air di dalam sel tidak menjadi negatif.
Ketinggian medan
- Ketinggian medan ditambahkan agar air bergerak di atas medan.
Kondisi batas
- Perlu mempertimbangkan apa yang terjadi di batas simulasi.
- Nilai aliran batas ditetapkan untuk mendefinisikan kondisi seperti dinding, aliran masuk, dan aliran keluar.
Viskositas
- Viskositas ditambahkan agar lapisan air tipis lebih sulit bergerak.
Seluruh kode simulasi
- Kode simulasi terdiri dari 4 loop
for atas beberapa array 2D.
Kekurangan model
- Tidak ada inersia maupun difusi kecepatan, sehingga ketika aliran air yang cepat masuk ke danau, air menyebar ke segala arah.
Bonus: grid heksagonal/segitiga
- Air dapat disimulasikan menggunakan grid segitiga, yang dapat dipandang sebagai dual dari grid heksagonal.
1 komentar
Komentar Hacker News
Menyebut masalah dalam simulasi fluida ketika air terakumulasi dan memengaruhi sel-sel di sekitarnya. Ini adalah salah satu alasan mengapa paralelisasi sulit dalam game yang dibuat secara prosedural
Menyebut bahwa saat mengembangkan simulasi fluida, ada risiko besar membuang waktu hanya dengan menikmati hasil yang indah
Menyebut bahwa cara pengumpulan sumber daya di Animal Crossing efisien tanpa manipulasi medan
Menyebut dan merekomendasikan game Timberborn karena fisika airnya merupakan elemen penting dalam permainan
Membagikan pengalaman bereksperimen dengan algoritme yang diimplementasikan dalam 3D menggunakan o3-mini-high
Memperkenalkan simulasi banjir untuk pendidikan, yang menggunakan WebGL untuk menghitung nilai sel berdasarkan sel-sel yang berdekatan
Mengusulkan cara mengatasi masalah kurangnya inersia dan difusi kecepatan dalam simulasi air
Membagikan rasa penasaran tentang simulasi erosi yang dimulai sebagai proyek pribadi
Menyebut ide untuk mensimulasikan air di game Creeper World lalu menjatuhkan bom di dalamnya