2 poin oleh GN⁺ 2025-02-08 | 1 komentar | Bagikan ke WhatsApp

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

 
GN⁺ 2025-02-08
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

    • Pembuatan prosedural cocok untuk diparalelkan, tetapi pada domain tak terbatas paralelisasi menjadi sulit
    • Menunjukkan bahwa topik ini belum banyak dieksplorasi
    • Memuji karya Nick McD, sambil menyebut bahwa karyanya juga memiliki batasan domain karena desain simulasinya
    • Mengusulkan pembuatan batas cekungan air secara prosedural agar bisa diparalelkan dan seluruh cekungan air dapat disimulasikan sekaligus
  • Menyebut bahwa saat mengembangkan simulasi fluida, ada risiko besar membuang waktu hanya dengan menikmati hasil yang indah

    • Membagikan pengalaman implementasi dinamika fluida berbasis GPU miliknya pada 2011
    • Menjelaskan bahwa fluida (darah) disimulasikan dalam 2D di atas permukaan (jaringan), lalu diproyeksikan ke mesh dengan mempertimbangkan gravitasi dan kemiringan permukaan
  • Menyebut bahwa cara pengumpulan sumber daya di Animal Crossing efisien tanpa manipulasi medan

    • Pohon ditebang untuk mendapatkan log, tetapi setelah jumlah tertentu perlu cooldown
    • Menyarankan bahwa untuk game yang tidak memerlukan manipulasi medan, metode ini bisa lebih baik
  • Menyebut dan merekomendasikan game Timberborn karena fisika airnya merupakan elemen penting dalam permainan

    • Mencari cara membendung air dan menggunakannya untuk mesin serta ladang adalah bagian yang esensial dari gameplay
  • Membagikan pengalaman bereksperimen dengan algoritme yang diimplementasikan dalam 3D menggunakan o3-mini-high

    • Menyebut bahwa ia mengimplementasikan Perlin noise dari nol dan menggunakannya untuk pembuatan medan
  • Memperkenalkan simulasi banjir untuk pendidikan, yang menggunakan WebGL untuk menghitung nilai sel berdasarkan sel-sel yang berdekatan

    • Menjelaskan bahwa perubahan pada nilai model dapat menghasilkan efek yang besar
  • Mengusulkan cara mengatasi masalah kurangnya inersia dan difusi kecepatan dalam simulasi air

    • Menjelaskan bahwa hal itu bisa diatasi dengan merata-ratakan nilai panah aliran dengan panah-panah tetangga
  • Membagikan rasa penasaran tentang simulasi erosi yang dimulai sebagai proyek pribadi

    • Menyebut bahwa proyek tersebut terhenti karena tidak memahami erosi
  • Menyebut ide untuk mensimulasikan air di game Creeper World lalu menjatuhkan bom di dalamnya