Saya bereksperimen dengan kondisi cuaca dalam permainan saya, dan saya terkesan dengan cara Starbound menangani hujan. Pada dasarnya, ketika hujan menyentuh tanah, hujan akan tersebar secara horizontal (dan diserap oleh tanah), atau menciptakan tumpukan air (ketika hujan mendarat di dalam lubang di tanah).
Video ini menunjukkan ini dengan jelas: http://imgur.com/gallery/CKCGKbG
Saya tahu bagaimana membuat hujan turun dan memeriksa di mana itu menyentuh tanah, tetapi di situlah saya terjebak. Pertanyaan saya adalah: bagaimana ini bisa dibuat? Dan bagaimana seseorang bisa memodelkan aliran air dengan begitu sempurna, tanpa mematikan kinerja?
Terima kasih sebelumnya!
2d
water
fluid-dynamics
Pandaqi
sumber
sumber
Jawaban:
Sistem air Starbound sebenarnya adalah automata seluler berbasis ubin 2D. Setiap ubin di layar yang tidak mengandung lapisan ubin depan, mampu menahan air. Jumlah air dihitung melalui automata seluler.
Informasi lebih lanjut tentang teknik ini di sini:
http://www.gamasutra.com/view/feature/134736/an_intro_to_cellular_automation.php
http://www.jgallant.com/2d-liquid-simulator-with-cellular-automaton-in-unity/
Adapun tetesan hujan, itu adalah partikel. Mereka melayani terutama untuk palsu bahwa sebenarnya ada air yang jatuh dari langit. Air terakumulasi hanya karena permainan tahu saat ini hujan. Tetes individu tidak ada hubungannya dengan pembentukan kolam air yang sebenarnya.
Cara mereka menumpuk, adalah dengan menentukan di mana ada lubang di lapisan atas tanah. Jika ada daerah yang dapat menumpuk air, sel-sel di daerah itu meningkatkan level air mereka.
Starbound juga menangani tekanan air, dan teknik rendering mereka sangat menakjubkan. Mereka memiliki implementasi 2D terbaik dari fisika simulasi air menggunakan automata seluler yang pernah saya lihat.
Berikut ini adalah pandangan primitif dari mesin fisika cair, memanfaatkan teknik automata seluler yang disebutkan di atas. Bagian rendering menjadi sedikit lebih kompleks, karena air Anda diwakili oleh nilai numerik.
http://www.jgallant.com/images/pressuretest.gif
Dalam contoh ini, peningkatan yang sangat sederhana adalah menyembunyikan sel air yang memiliki kurang dari 1 unit penuh air di ubinnya jika tidak ada ubin padat di bawahnya. Tapi kemudian, Anda menyembunyikan aliran air. Alih-alih menyembunyikannya, Anda harus menentukan bagaimana air mengalir, dan kemudian menggambar sprite air yang sesuai di tempatnya.
sumber
Ada banyak cara untuk mendekati ini. Seperti biasa 'itu tergantung'
Dan jadi saya kira satu cara akan seperti ini .. Diberikan 'celup di tanah' Overlay 'kotak air' yang mengikatnya. Tanah dan waterbox ditarik berlapis-lapis sehingga tanah ditampilkan terlebih dahulu, setelah waterbox.
setiap kali setetes air menyentuh celup di tanah, tambahkan satu ke dalam air. Saat kotak air mencapai angka ajaib, tambahkan satu baris air. Jadi katakanlah 10 tetes tanah di celup, ini menambahkan satu baris ke kotak air.
Jadi katakan waterbox adalah 32X32 piksel. Tambahkan satu baris warna air dari 0,31-31,31. 10 tetes lagi, buat garis dari 0,30 - 31,30. Jadi, ketika tetesan menumpuk, Anda membangun waterbox dari bawah sampai penuh.
Harapan itu masuk akal.
sumber