Saya ingin meningkatkan mesin gim kecil saya dengan simulasi air yang terlihat bagus. Untuk mulai bekerja pada itu saya perlu menemukan cara yang tepat untuk mewakili air dalam permainan. Sayangnya saya tidak tahu representasi yang jauh berbeda, jadi saya akan bertanya kepada Anda. Ada pertanyaan serupa yang saya tanyakan beberapa waktu lalu. Tetapi karena saya belum merumuskan masalah dengan jelas, jawabannya benar tetapi tidak apa yang saya cari.
Dalam beberapa permainan, air hanya ditentukan oleh level ketinggian. Misalnya segala sesuatu di bawah ketinggian nol adalah di bawah air. Saya melihat representasi ini di game (kebanyakan lebih tua). Masalahnya adalah saya suka gua di dunia luar yang tidak banjir dan ketinggian air yang berbeda untuk setiap danau dan laut.
Representasi lain yang lebih tepat dari terjadinya air adalah partikel. Setiap tetesan air disimpan sebagai titik di ruang dunia. Untuk membuat mereka, saya bisa menggunakan teknik seperti metaballs sehingga mereka membangun satu jala tunggal. Representasi ini akan bagus untuk realisme karena saya dapat dengan mudah menghitung dinamika di antara mereka. Sayangnya tidak ada mesin yang bisa menghitung samudera metaballs secara real time.
Apakah ada cara lain untuk merepresentasikan air dalam mesin? Saya ingin memiliki danau yang dinamis, jadi mendefinisikan area air dengan geometri statis bukanlah pilihan. Sebagai contoh jika pemain memodifikasi medan untuk memperluas danau, air harus mengisi teluk itu dan tingkat air keseluruhan danau itu harus sedikit menurun.
sumber
Jawaban:
Saya tidak bisa mengatakan apa yang umum digunakan, tetapi pemikiran pertama saya adalah menggunakan sistem partikel dengan ukuran partikel berbeda-beda yang mewakili air dari berbagai volume. Bagian atas air akan menggunakan partikel yang lebih kecil untuk membentuk gelombang permukaan dan gelombang, air terdekat pemain akan menggunakan partikel terkecil untuk mensimulasikan percikan dan undulasi kecil, sedangkan semakin jauh atau lebih dalam air akan, semakin besar partikel . Ini akan memungkinkan sejumlah partikel dinamis yang mensimulasikan air dalam ukuran apa pun, dinamika air saat ia berubah, dan beberapa tingkat kinerja yang wajar dan terkendali.
Saya dapat melihat masalah dengan implementasi ini, tetapi sepertinya solusi yang relatif sederhana dan "cukup baik" sehingga penonton / pemain akan ragu untuk melihat penyimpangan dalam simulasi.
sumber
Jika Anda menggunakan medan berbasis voxel, Anda bisa, selain menyimpan kepadatan tanah per voxel, Anda juga bisa menyimpan nilai air yang dijepit antara
0
dan1 - groundDensity
. Menggambar air akan sesederhana menjalankan kubus pawai melewati nilai air. Mensimulasikan air akan sedikit lebih sulit, tetapi premis dasarnya adalah Anda ingin menyelesaikan sistem sedemikian rupa sehingga:groundDensity + waterDensity
, seperti tetangganyaAlgoritma ideal akan berjalan dalam penghitung komputasi, satu jalur eksekusi per voxel. Jika Anda ingin menjadi mewah, Anda juga bisa menyimpan kecepatan air di dalam voxel itu untuk efek simulasi tambahan: misalnya, mencoba mendistribusikan sejumlah air yang sebanding dengan kecepatan ke sel-sel yang "menunjuk" oleh vektor kecepatan. Data kecepatan ini juga dapat digunakan untuk menggerakkan ombak, menggambar jeram, dll.
sumber