Samudra / Lautan
Seperti efek organik banyak, laut berkualitas rendah mudah dilakukan, tetapi tampan hasilnya benar-benar sulit untuk dicapai. Pada akhirnya, semuanya tergantung pada jumlah siklus CPU dapat Anda curahkan untuk rendering itu. Will Anda permainan menjadi pengalaman yang benar-benar di bawah air seperti Ecco Dolphin, atau akan laut Anda memainkan sekunder, peran murni dekoratif? Benar-untuk-hidup lautan akan komputasi mahal, sehingga praktik yang baik untuk menganalisis harapan Anda sebelum bergerak maju.
Dalam bentuk yang paling sederhana, sebuah samudera hanyalah bertekstur, pesawat transparan sebagian. Tekstur akan mencoba untuk meniru tampilan dan warna air nyata, sehingga menghidupkan itu akan menyampaikan rasa lebih tinggi dari realisme. Tapi baik geometri ini air dan melihat nya terlalu sederhana. Samudra bergerak dan memiliki interaksi yang kompleks dengan cahaya, yang mempengaruhi penampilannya. Mari kita periksa geometri dan penampilan secara rinci.
Realistis Samudera/Lautan Geometri
Untuk menciptakan samudra realistis, kita akan perlu untuk mengimplementasikan gelombang, semprot laut, dan sebagainya. Beberapa metode meningkatkan kompleksitas telah dirancang selama bertahun-tahun. Salah satu pendekatan adalah menggunakan sinus sederhana gelombang sebagai fungsi gelombang, sehingga menciptakan tampilan bergelombang seragam. Berhati-hatilah, meskipun: fungsi trigonometri sangat mahal, jadi lebih baik untuk memiliki mereka ditabulasi sebelumnya, sehingga menghindari perhitungan mahal bagi setiap frame.
Karena lautan jarang teratur, gelombang sinus tunggal hanya akan tidak dipotong. Dengan demikian, dua lainnya pendekatan harus muncul. Menggunakan satu pendekatan, kita dapat mensimulasikan geometri laut dengan cara menambahkan gelombang sinus dalam oktaf pola, dengan masing-masing harmonik yang memiliki frekuensi ganda dan amplitudo setengah. Jika kita jitter ini dengan beberapa bentuk kebisingan (noise Perlin, misalnya), hasilnya akan lebih baik dengan cepat. Pendekatan kedua melibatkan menggunakan model matematika dari laut, sering diimplementasikan sebagai sistem partikel: Setiap permukaan adalah partikel elemen dihubungkan oleh pegas untuk elemen tetangga. Kemudian, dengan menggunakan model fisik berevolusi, kita dapat mensimulasikan dinamika laut efisien. Anda dapat menemukan gambaran yang sangat baik dari kedua metode, dan lengkap contoh kerangka laut matematika, Lasse Staf Jensen dan Robert Golias 'Gamasutra artikel, dikutip dalam Lampiran E, "Bacaan lebih lanjut."
Penampilan Samudra/Lautan
Air murni adalah transparan, dan dengan demikian dunia nyata tampilan yang biasanya dipengaruhi oleh beberapa faktor: refleksi,warna tints, fenomena cahaya, dan sebagainya. Bahkan, tampilan air pada dasarnya ditentukan oleh perusahaaninteraksi dengan media cahaya dan lainnya, tidak sebanyak dengan air itu sendiri. Jadi, untuk menyampaikan rasa nyata air yang kita harus belajar bagaimana berinteraksi dengan lingkungannya.
Dari sudut pandang optik, air, bahan yang sangat reflektif transparan sebagian. Warna internal adalah sangat halus dan hanya muncul dalam tubuh besar air. Hal ini dapat bervariasi tergantung pada kimia microcomponents seperti ganggang dan bakteri, tetapi pada umumnya dalam kisaran hijau biru. Air memiliki indeksbias yang mendistorsi pengertian kita tentang ukuran, benda membuat terlihat lebih besar dari kehidupan nyata. Selain itu, baikrefleksi dan transparansi sangat tajam didefinisikan, seperti dalam kebanyakan cairan. Ini berarti benda dimasukkan ke dalam atautercermin dalam air akan tetap terlihat fokus, karena bertentangan dengan kaca patri, yang transparan tapi membuat cahayasinar menekuk secara acak, menghasilkan tampilan yang kabur. Hanya ketika perairan temperatur yang berbeda dicampur jangan refleksi buram dan refraksi muncul.
Dengan demikian, langkah pertama menuju air realistis menggunakan pemetaan lingkungan untuk mereproduksi sifat reflektif dari permukaannya. Pemetaan lingkungan adalah teknik yang sangat dipahami dengan baik, dan rincian teknis yang terkena dalam Bab 18, "Tekstur Pemetaan." Kita bisa menggunakan kedua bola dan pemetaan kubus, penawaran terakhir hasil yang lebih baik dengan harga biaya tekstur yang lebih tinggi. Pilihannya, seperti biasa, tergantung pada efek yang ingin Anda dicapai. Untuk permainan terbuka-laut, sangat mungkin peta bulat dari langit akan baik-baik saja. Tetapi jika Anda ingin refleksi yang benar (di sebuah danau yang dikelilingi oleh pohon-pohon, misalnya), peta kubus akan menjadi pilihan yang lebih baik. hanya ingat bahwa jika anda berencana untuk komputasi refleksi realistis, Anda akan perlu untuk recompute peta kubus perframe (atau setiap beberapa frame), sehingga kompleksitas komputasi akan tumbuh. Pastikan tercermin geometri sederhana, sehingga lulus render-ke-tekstur dapat dilakukan dengan biaya yang murah. Alternatif lain adalah untuk menggunakan strategi LOD, sehingga model tercermin adalah skala-down versi dari geometri. Hal ini dapat sangat efektif, terutama jika indeks refleksi tidak terlalu tinggi, sehingga penonton tidak akan melihat perbedaan apapun sama sekali.
Indeks transparansi terbuka perairan laut sangat bervariasi tergantung pada bahan kimia dari air dan intensitas matahari. Secara umum, visibilities sekitar 15-20 meter dianggap normal, yang memberikan transparansi indeks antara 73 dan 80 persen per meter (80% cahaya memasuki volume air satu meter lebar efektif membuat ke sisi lain, sisanya diserap).
Tapi penyerapan cahaya hanyalah salah satu konsekuensi dari transparansi air. Yang lainnya adalah refraksi: pembengkokan sinar karena perbedaan kepadatan media yang berbeda. Kecepatan cahaya di udara terbuka signifikan lebih cepat daripada di media padat seperti air, dan dengan demikian sinar cahaya membungkuk saat mereka memasuki cairan. Hal ini berhasil dapat disimulasikan dengan menggunakan teknik shader (dijelaskan di bab berikutnya). Perhatikan, bagaimanapun, bahwa permainan yang paling benar-benar mengabaikan refraksi karena sulit terlihat dalam skenario permainan. itu contoh hanya akan permainan di mana pemain bisa menyeberang sungai, atau situasi lain di mana mereka sebagian terendam dalam air. Sebuah permainan sepenuhnya di bawah air, misalnya, tidak perlu untuk mensimulasikan refraksi karena semua tindakan yang terjadi dalam medium yang sama (air), dan dengan demikian tidak ada sinar yang bengkok.
Salah satu sedikit pengecualian untuk aturan ini adalah fenomena yang disebut caustic: konsentrasi cahaya karenarefraksi, yang menyebabkan pola cahaya menari di dasar laut. Hal ini juga sering terlihat di apapun dari danau untuk permainan di bawah air.
Caustics
Caustic diproduksi setiap kali cahaya perjalanan melalui jalan yang berbeda akhirnya berkumpul di sama
spot. Caustic muncul karena beberapa objek semitransparan bertindak sebagai sebuah lensa, fokus sinar cahaya dalam kecil daerah. Contoh klasik kaustik adalah tempat cahaya yang disebabkan oleh lensa pada selembar kertas atau pola tampaknya kacau dibentuk oleh gelombang di dasar kolam renang.
spot. Caustic muncul karena beberapa objek semitransparan bertindak sebagai sebuah lensa, fokus sinar cahaya dalam kecil daerah. Contoh klasik kaustik adalah tempat cahaya yang disebabkan oleh lensa pada selembar kertas atau pola tampaknya kacau dibentuk oleh gelombang di dasar kolam renang.
Sayangnya, caustic realistis komputasi mahal. Mereka biasanya dihitung ke depan ray tracing dengan foton peta, yang mengambil menit atau bahkan jam untuk menghitung untuk satu frame. Dengan demikian, beberapa penyederhanaan harus dilaksanakan dalam rangka untuk mendekati mereka secara real time. Kita akan melihat beberapa algoritma yang efisien meniru tampilan caustic nyata interaktif. Tapi tak satu pun dari mereka benar-benar akan menerapkan caustic analitis karena proses itu akan terlalu mahal. Mari kita mulai dengan mempelajari mengapa.
Dalam simulasi kaustik realistis, sejumlah sinar cahaya yang ditembak dari sumber cahaya ke segala arah.
Sinar ini atau foton mewakili jumlah cahaya yang dipancarkan oleh lampu masing-masing. Mereka sinar langsung memukul obyek buram hanya dihilangkan (sedangkan kontribusi pencahayaan mereka diterapkan ke objek yang buram permukaan). Sebagian besar sinar dengan demikian akan hilang. Tetapi orang-sinar memukul benda semitransparan seperti seperti kaca atau air akan disebarkan dan dimasukkan ke dalam media baru; arah mereka akan berubah karena perbedaan dalam kecepatan cahaya antara medium "luar" (udara, umumnya) dan "dalam" menengah (kaca, air, dan sebagainya). Perubahan arah atau membungkuk diatur oleh Hukum Snell, yang menyatakan bahwa: Hukum Snell digambarkan pada Gambar 20.8. Ini adalah sinar yang kadang-kadang akan berkumpul untuk membuat kaustik. Dengan demikian, kita harus mengikuti mereka dan menetapkan mereka untuk poin permukaan, sehingga kita bisa menjumlahkan kontribusi dari sinar yang berbeda dan memutuskan mana piksel dipengaruhi oleh kaustik. Kabar buruknya adalah bahwa ini adalah brute force algoritma. Kita perlu jutaan foton untuk mencapai tingkat yang baik realisme, dan bahwa membuang teknik untuk real-time digunakan.
Sinar ini atau foton mewakili jumlah cahaya yang dipancarkan oleh lampu masing-masing. Mereka sinar langsung memukul obyek buram hanya dihilangkan (sedangkan kontribusi pencahayaan mereka diterapkan ke objek yang buram permukaan). Sebagian besar sinar dengan demikian akan hilang. Tetapi orang-sinar memukul benda semitransparan seperti seperti kaca atau air akan disebarkan dan dimasukkan ke dalam media baru; arah mereka akan berubah karena perbedaan dalam kecepatan cahaya antara medium "luar" (udara, umumnya) dan "dalam" menengah (kaca, air, dan sebagainya). Perubahan arah atau membungkuk diatur oleh Hukum Snell, yang menyatakan bahwa: Hukum Snell digambarkan pada Gambar 20.8. Ini adalah sinar yang kadang-kadang akan berkumpul untuk membuat kaustik. Dengan demikian, kita harus mengikuti mereka dan menetapkan mereka untuk poin permukaan, sehingga kita bisa menjumlahkan kontribusi dari sinar yang berbeda dan memutuskan mana piksel dipengaruhi oleh kaustik. Kabar buruknya adalah bahwa ini adalah brute force algoritma. Kita perlu jutaan foton untuk mencapai tingkat yang baik realisme, dan bahwa membuang teknik untuk real-time digunakan.
Gambar 20.8. Hukum Snell mengatur lentur dari sinar saat mereka menyeberangi Media batas.
Sebuah pendekatan yang berbeda dan lebih sukses melibatkan mundur ray tracing menggunakan Monte Carlo estimasi. Di sini,kita mulai di bagian bawah laut, dan sinar jejak mundur dalam urutan kronologis terbalik, mencoba menghitung jumlah semua pencahayaan masuk untuk sebuah titik tertentu. Idealnya, ini akan dicapai dengan memecahkan terpisahkan semispherical cahaya semuanya datang dari atas titik yang sedang menyala. Tapi untuk alasan praktis, hasilnya integral ini diatasi melalui pengambilan sampel Monte Carlo. Dengan demikian, seberkas sinar kandidat dikirim ke segala arah atas belahan bumi berpusat pada titik sampling. Dalam kebanyakan kasus, sinar 16 per pixel cukup untuk mencapai fotorealistik hasil. Mereka yang memukul benda-benda lainnya (seperti ikan paus, kapal, atau batu) dibuang. kemudian, sinar yang melanda permukaan laut pasti datang dari luar, membuat mereka calon yang baik. Dengan demikian, mereka
harus dibiaskan, menggunakan kebalikan dari Hukum Snell. Sinar-sinar yang tersisa harus disebarkan di udara untuk menguji apakah sinar yang benar-benar berasal dari sumber cahaya atau hanya sebuah hipotesis palsu. Sekali lagi, hanya mereka sinar yang benar-benar berakhir memukul sumber cahaya yang memberikan kontribusi pada kaustik, dan sisanya dari sinar hanya dibuang sebagai hipotesis palsu.
harus dibiaskan, menggunakan kebalikan dari Hukum Snell. Sinar-sinar yang tersisa harus disebarkan di udara untuk menguji apakah sinar yang benar-benar berasal dari sumber cahaya atau hanya sebuah hipotesis palsu. Sekali lagi, hanya mereka sinar yang benar-benar berakhir memukul sumber cahaya yang memberikan kontribusi pada kaustik, dan sisanya dari sinar hanya dibuang sebagai hipotesis palsu.
Monte Carlo metode yang agak lebih cepat dari biasa maju ray tracing: Mereka mempersempit jumlah
sinar hanya beberapa juta. Namun jumlah sampel masih membuat mereka terlalu lambat untuk real-time digunakan. Kami bisa, Namun, menyederhanakan Monte Carlo mundur ray tracing ide untuk mencapai hasil yang diinginkan. Kami membuat beberapa asumsi agresif pada kandidat yang baik untuk caustic, dan dengan demikian menghitung hanya subset dari tiba sinar. Secara khusus, kita menghitung satu sinar per pixel. Dengan demikian, metode ini memiliki biaya komputasi yang sangat rendah, dan menghasilkan sesuatu yang sangat mirip lihat kaustik dan perilaku, meskipun itu benar-benar tidak benar dari sudut pandang fisik.
sinar hanya beberapa juta. Namun jumlah sampel masih membuat mereka terlalu lambat untuk real-time digunakan. Kami bisa, Namun, menyederhanakan Monte Carlo mundur ray tracing ide untuk mencapai hasil yang diinginkan. Kami membuat beberapa asumsi agresif pada kandidat yang baik untuk caustic, dan dengan demikian menghitung hanya subset dari tiba sinar. Secara khusus, kita menghitung satu sinar per pixel. Dengan demikian, metode ini memiliki biaya komputasi yang sangat rendah, dan menghasilkan sesuatu yang sangat mirip lihat kaustik dan perilaku, meskipun itu benar-benar tidak benar dari sudut pandang fisik.
Untuk memulainya, kita menghitung Caustics pada siang hari di khatulistiwa. Ini berarti matahari tepat di atas kami. Untuk demi algoritma kita, kita perlu untuk menghitung sudut langit ditutupi oleh disk matahari. Matahari adalah antara 147 dan 152 juta kilometer dari Bumi tergantung pada waktu tahun, dan yang diameter 1,42 juta kilometer. Setengah halaman aljabar dan trigonometri menghasilkan sudut untuk disk matahari dari 0,53 °.
Asumsi kedua adalah bahwa dasar laut terletak pada kedalaman konstan. Jangan lupa bahwa transparansi air adalah antara 77 dan 80 persen per meter linear. Ini berarti 20 menjadi 27 persen dari Insiden cahaya per meter diserap oleh medium (pemanasan itu), memberikan berbagai visibilitas total antara 15 dan 20 meter. Secara logis, ini berarti caustic akan terbentuk dengan mudah bila sinar cahaya perjalanan terpendek jarak dari saat mereka masuk ke air sampai saat mereka memukul dasar laut. Dengan demikian, caustic akan maksimal untuk sinar vertikal dan tidak akan sama terlihat untuk sinar yang masuk ke samping air. Ini adalah asumsi agresif tetapi kunci keberhasilan dari algoritma. Perhatikan, sebagai bukti sederhana, yang Caustics sangat populer di daerah tropis, pantai berpasir. Ini biasanya dekat dengan khatulistiwa dan memang sangat dangkal. Jadi sepertinya kita sedang menuju ke arah yang benar.
Algoritma kami bekerja sebagai berikut: Kita mulai di bagian bawah laut, tepat setelah kami telah dicat tanah pesawat. Kemudian, kedua aditif lulus dicampur digunakan untuk membuat api di atas itu. Untuk melakukannya, kita membuat mesh dengan rincian yang sama seperti mesh gelombang dan satu yang akan diwarnai per titik dengan nilai kaustik: nol berarti tidak ada pencahayaan dan satu berarti seberkas cahaya yang sangat terfokus hits bawah laut. Untuk membangun pencahayaan ini, mundur ray tracing digunakan. Untuk setiap vertex mesh, kita memproyeksikannya secara vertikal sampai kita mencapai titik gelombang terletak tepat di atasnya. Kemudian, kita menghitung normal gelombang pada saat itu titik menggunakan perbedaan terbatas. Dengan vektor dan Hukum Snell normal, dan menggunakan (ingat IOR untuk air adalah 1,33333), kita dapat membuat sinar sekunder yang perjalanan dari gelombang ke udara. Sekarang, yang harus kita lakukan adalah memeriksa sinar matahari benar-benar memukul setelah meninggalkan air. Untuk melakukannya, kita menghitung sudut antara sinar dan sinar vertikal menggunakan produk titik. Kita tahu matahari adalah 0,53 ° di seluruh, tetapi kemuliaannya bisa dianggap sebagai sumber cahaya sekunder, hari paling yang meliputi busur 10 kali lebih besar. Kemudian, kita menggunakan sudut ke indeks peta tekstur, yang mengkode luminositas dari kaustik tergantung pada sudut.
Gambar 20.9. Sebuah peta tekstur digunakan untuk mengikat sudut ray untuk luminosities.
Sebagai rekap, teknik saya telah terkena pada dasarnya mengubah masalah perhitungan kaustik ke
lingkungan pemetaan, menggunakan fungsi generator gelombang untuk menghitung koordinat tekstur. Untungnya, Hasil (lihat Gambar 20.10) adalah sangat baik.
lingkungan pemetaan, menggunakan fungsi generator gelombang untuk menghitung koordinat tekstur. Untungnya, Hasil (lihat Gambar 20.10) adalah sangat baik.
Gambar 20,10. Kiri: visi bingkai Wire, menunjukkan sampel pada bagian bawah laut. Kanan: pandangan padat, menunjukkan pola interferensi yang khas ditemukan di caustic.
Teknik ini juga dapat diimplementasikan menggunakan pemrograman klasik grafis. Tapi itu dirancang dari hari satu harus dikodekan menggunakan pixel shader untuk meningkatkan efisiensi. Untuk melakukannya, kita akan menghitung fungsi gelombang dan ray tracing mundur langkah dalam shader, yang juga menghitung turunan dari fungsi gelombang. Rincian lebih lanjut dan demo implementasi ini dapat ditemukan di koran Gamasutra oleh Juan Guardado dari NVIDIA dan saya, dan tersedia di situs web Gamasutra. "
Sumber : Bheta Agus
Tidak ada komentar:
Posting Komentar