Dalam banyak gim di mana pemain bisa masuk ke dalam air, sepertinya ketika Anda melihat di mana bagian atas layar ada di udara, dan bagian bawah layar ada di dalam air, hampir seperti air tidak ada dan pemain ... terbang perlahan dengan suara air?
Apakah ada cara logis untuk menyelesaikan ini? Algoritma? Sepertinya tidak ada solusi yang muncul karena banyak game masih memiliki ini. Saya tidak ingin membuat kesalahan yang sama.
3d
rendering
terrain-rendering
water
LiquidFeline
sumber
sumber
Jawaban:
Bagaimana kalau tidak mengizinkan situasi ini?
Saya tidak tahu bagaimana Anda membuat game Anda, tetapi jika Anda mendeteksi bahwa sebagian pemandangan di bawah air, Anda dapat memaksa kamera berada di atas air, dan hanya ketika seluruh tampilan berada di bawah air, Anda dapat beralih ke tampilan bawah air.
Tergantung pada bagaimana Anda melakukannya, ini bisa berarti bahwa ada penundaan tambahan dari saat Anda mulai menyelam dan ketika Anda benar-benar melihat pemandangan dari bawah permukaan. Ini sebenarnya mungkin hal yang baik dari perspektif UX, jadi silakan bereksperimen.
Pada catatan yang terpisah namun terkait, saya bertanya-tanya mengapa sebagian besar pemandangan bawah laut menjadi sangat jernih ... Jika Anda pernah menempatkan kepala Anda di bawah air, Anda akan melihat bahwa mata Anda tidak dirancang untuk penglihatan bawah air, dan karenanya semuanya tampak buram. Anda harus mengenakan kacamata untuk benar-benar melihat dengan jelas di bawah air.
Dan selain itu, benda-benda terlihat (dan mendengar) sangat berbeda di bawah air daripada di atas air. Air menyerap cahaya jauh lebih cepat daripada udara, sehingga semakin jauh cahaya bergerak, semakin sedikit cahaya yang sampai di mata Anda. Ini berarti bahwa semakin dalam Anda pergi, hal-hal yang lebih biru terlihat (lampu merah memiliki lebih sedikit energi, dan karena itu diserap lebih mudah daripada cahaya biru). Faktanya, hanya 12 meter di bawah air, darah terlihat hitam, bukan merah.
Saya belum pernah melihat game non-khusus yang bahkan mencoba untuk mendapatkan lingkungan bawah laut dengan benar ...
sumber
Masalah yang Anda maksudkan berkaitan dengan volume tampilan kamera yang memotong bidang air; "efek bawah air" tipikal dilakukan melalui efek pasca-layar penuh, dan tidak akan terlihat benar jika tampilan terpotong seperti ini (hanya akan menjadi masalah yang berlawanan).
Sekalipun Anda benar-benar kesulitan mendeteksi kliping kliping (berpotensi sulit) dan gunting atau klip efek bawah air layar penuh yang jika tidak hanya diterapkan pada adegan bawah air (yang merupakan solusi potensial yang dapat Anda jelajahi), Anda masih akan memiliki masalah pesawat air yang sebenarnya itu sendiri. Transisi masih akan ada artefak visual yang menggelegar. Anda bisa mendeteksi pesawat itu dan mengaburkannya dengan berat; ini mungkin yang terdekat dengan analogi dunia nyata dari apa yang dilihat melalui lensa kamera yang terendam sebagian.
Sebagai alternatif, cegah agar hal ini tidak terjadi sepenuhnya: jangan biarkan kamera pergi di bawah bidang air jika pemain "di atas" air atau di atas bidang air ketika pemain "di bawah" air. Ini hanya akan benar-benar berfungsi jika Anda memiliki mode operasi pemutar diskrit untuk di atas / di bawah air, dan berfungsi dengan baik jika ada tombol fisik atau tindakan lain yang jelas dan jelas yang dapat dilakukan pemain untuk beralih antara "berenang di permukaan" dan "berenang di bawah permukaan."
Alih-alih penekanan tombol eksplisit untuk menyelam, Anda bisa mengartikan gerak maju sementara kamera cukup diturunkan untuk berarti "menyelam." Anda kemudian dapat menggunakan efek grafis (percikan atau apa pun) untuk menyembunyikan transisi kamera melalui bidang air, yang biasanya tidak dapat dilintasi.
Kami menggunakan teknik seperti ini di Guild Wars 2.
sumber
Game biasanya menyalakan beberapa jenis efek, terutama kabut biru, ketika kamera di bawah air. Untuk menangani situasi di mana bidang dekat klip melalui permukaan air, Anda dapat mengaktifkan fog shader ketika kamera mendekati permukaan air, tetapi kemudian menambahkan beberapa kode ke shader pixel yang menghitung titik pada bidang dekat sesuai dengan pixel itu, dan mengaktifkan kabut hanya jika titik itu di bawah permukaan air.
Jika kabut dilakukan sebagai postprocess, dengan memberikan pass layar penuh, ini sangat mudah - Anda hanya perlu menghitung posisi ruang-dunia dari setiap simpul layar penuh quad atau segitiga pada pesawat dekat (dengan inversi lihat / proyeksi matriks), dan sisipkan nilai ini ke pixel shader; maka Anda dapat memeriksa komponen vertikal dan melihat apakah itu di atas atau di bawah bidang air.
Untuk poin bonus, Anda dapat menggunakan teknik yang sama untuk menambahkan tekstur setebal beberapa piksel untuk mewakili meniskus di permukaan air, sehingga tidak terlalu mirip garis tajam.
sumber
Saya punya dua metode; Satu menggunakan shader, yang lain bisa menggunakan GUI. Keduanya akan memulai yang sama:
"Sederhana" -
If, Object(Camera) is in 3d Space(Water bounding box/whatever you choose) trigger a shader/GUI.
Shader akan memberi lebih banyak realisme, Anda bisa menerapkan distorsi Like This
Fog Like Com. Boy menyatakan, bisa diterapkan melalui GUI. Buat foto, dengan transparansi sebagian dan gunakan sebagai GUI pada seluruh tampilan kamera. Untuk foto yang Anda berikan, saya akan mencoba warna cokelat.
Ini telah digunakan dalam game horor bernama Drea D Out. Jika pemain mendekati hantu, layar akan berubah berkabut. Meskipun tidak digunakan di bawah air itu memberi efek yang sama :)
Anda selalu dapat memilih kedua metode, atau membuat shader yang akan mengubah warna.
sumber