Bagaimana saya bisa membuat kabut volumetrik berdasarkan ketinggian?

10

Baru-baru ini, saya telah mencari teknik untuk membuat kabut volumetrik pada level Y tertentu di dunia game. Tapi yang saya temukan hanyalah beberapa kabut yang dibuat dengan menggunakan sistem partikel atau kabut mesin bawaan yang tidak benar-benar cocok dengan yang saya cari.

Dalam kasus saya, saya membutuhkan kabut yang efisien dan padat. Seharusnya di seluruh dunia gameworld, tetapi jelas, untuk alasan kinerja, itu dapat diterjemahkan hanya sebagai bagian dari kamera atau shader dan terlihat seperti bergerak meskipun itu hanya ilusi. Saya bisa mengatur sistem partikel jika itu pilihan terbaik, menempelkannya ke kamera dan membuatnya bergerak.

Jadi pertanyaan utama masih tetap - bagaimana saya bisa menerapkan kabut volumetrik yang padat dan berkinerja efisien?

Sebagai mesin tertentu yang saya gunakan, ini Unity.

Sebagai contoh yang saya maksud, di sini adalah tautan ke permainan dengan efek yang saya cari: Astromike

Contoh tangkapan layar dari game menggunakan kabut berbasis tinggi yang padat.

Candid Moon _Max_
sumber
Sedikit noob GLSL di sini, tapi bagaimana dengan mewarnai piksel dalam shader fragmen, berdasarkan koordinat Y mereka yang akan Anda ambil dari vertex shader?
Quentin
2
Sudahkah Anda meninjau ceramah Unity tentang "Efek Khusus dengan Kedalaman" ? Meskipun sudah beberapa tahun sekarang, prinsip-prinsipnya masih berlaku. Mereka mencakup baik kabut berbasis ketinggian dan "kabut halus" yang menggenang di ruang kosong dan menipis di sekitar rintangan, dan karena semua contohnya adalah Unity, maka harus mudah diterapkan.
DMGregory
@ Quentin ya, ide bagus, apakah itu akan menjadi shader per objek, kan? Maka itu akan membutuhkan mengubah banyak shader. Saya seorang noob dalam pemrograman shader juga, jadi saya mungkin telah menulis omong kosong. Tapi sejauh yang saya tahu, shader vertex berlaku untuk objek. Dan pewarnaan mungkin tidak memberi efek gerakan. Saya mengerti bahwa jika saya ingin bergerak setiap hal kecil yang bergerak di dalamnya harus menjadi objek, jadi sistem partikel mungkin merupakan cara terbaik untuk pergi.
Candid Moon _Max_
@wondra ya, ini mungkin bukan pendekatan terbaik jika itu benar, transparansi sangat berat pada kinerja.
Candid Moon _Max_
1
Daftar juga tidak cocok untuk format Tanya Jawab kami, karena kapan daftar lengkap? Berapa banyak "situasi berbeda" yang cukup? Dengan metrik apa kita menilai "terbaik"? Umumnya format ini paling baik digunakan dengan pertanyaan yang terfokus jelas dengan jawaban yang dapat Anda validasi. Jadi, jika Anda merasa memiliki jawaban yang sesuai dengan kebutuhan Anda, sebenarnya lebih baik mengedit pertanyaan Anda untuk mempersempitnya ke apa yang sebenarnya Anda butuhkan, daripada membiarkannya terlalu luas dan tidak dijawab dengan sempurna. Pengguna lain selalu dapat mengajukan pertanyaan lain yang spesifik untuk aspek lain, mendapatkan jawaban yang lebih terfokus yang relevan dengan kasus mereka
DMGregory

Jawaban:

24

Saya pencipta Astromike. :)

Sebenarnya, saya menggunakan trik yang cukup sederhana agar terlihat seperti kabut. Saya mengembangkan Astromike menggunakan Unity, jadi jika Anda menggunakan Unity, Anda dapat melakukan hal yang sama. Tapi saya berasumsi Anda juga dapat membuat ulang shader yang sama untuk mesin lain.

Apa yang saya lakukan adalah, saya membuat pesawat untuk kabut, dan menambahkan bahan dengan Partikel / Alpha Dicampur dengan Faktor Partikel Lunak (0,32 dalam kasus saya) shader aktif. Itu dia.

Pesawat kabut: http://imgur.com/a/MAEFW

Pengaturan: http://imgur.com/NJVAaIQ

Ini berfungsi untuk saya karena sudut kamera dan mungkin tidak bekerja untuk orang lain.

Sisanya hanya tumpukan pasca-efek (Bloom, Vignette, dll.) Semoga ini bisa membantu. Bersulang.

Mikea15
sumber
1
Wow! Keren, terima kasih sudah berbagi! Permainan ini luar biasa :)
Candid Moon _Max_
Terlihat luar biasa dan sangat sederhana, mencoba melakukannya di proyek saya. Tampaknya hanya berfungsi menggunakan kamera perspektif (game kami adalah ortografis).
Jeff
ini terlalu bagus untuk menjadi kenyataan haha ​​bagus
Lestat
Hai @ Mikea15, game yang terlihat sangat bagus! Sayangnya, saya gagal membuat ulang efek yang Anda sebutkan - saya menambahkan Bloom ke tumpukan pemrosesan posting, namun menyebar pada objek bahkan jika bidang kabut ada di belakangnya (tidak mengherankan), sementara di demo Anda tampaknya tepi vertikal dari kolom bersih dari efek mekar. Juga, di Faktor Partikel Lunak saya tidak mengubah apa pun, apa pun nilainya. Akan lebih bagus jika Anda bisa memberikan adegan demo kecil yang akan menunjukkan ini. Terima kasih!
Dawid
@Apakah saya tahu ini terlambat tetapi Anda perlu mengatur jalur rendering kamera Anda ke ditangguhkan dan pastikan partikel lunak diperiksa pada kualitas dalam pengaturan proyek
Rito Ramos