Selasa, 25 Juni 2013

Organic Rendering

"Awan bukanlah bola, gunung tidak kerucut"

-Benoit Mansdelbrot
TOPIK UTAMA
  • Alam dan Kompleksitas
  • Pohon
  • Rumput
  • Clouds
  • Oceans
  • Penutupan
 
Sistem partikel mungkin telah membantu memperluas persepsi Anda tentang apa yang dapat diberikan secara real time. tapi
tunggu, masih ada lagi. Ada beberapa objek yang tidak dapat dinyatakan dalam hal geometri konvensional,
mereka juga tidak cocok untuk representasi oleh sistem partikel. Ambil pohon, misalnya: ek yang menjulang tinggi
dengan ribuan daun, cabang, dan kulit. Berapa banyak segitiga yang berbeda yang Anda butuhkan untuk membuat itu semua
keindahannya? Seperti siapa pun akrab dengan fraktal tahu, jawabannya tergantung pada resolusi: Bagaimana akurat lakukan
Anda perlu? Benda yang ditemukan di alam menunjukkan milik kedalaman fraktal: tingkat yang hampir tak terbatas
detail, yang membuat mereka benar-benar kompleks untuk menangani dalam permainan real-time. Pada titik tertentu, Anda akan perlu
mencapai kompromi antara daya tarik visual dan frame rate yang stabil.
Dengan demikian, render organik didefinisikan sebagai teknik yang digunakan untuk membuat representasi yang realistis dari alam menggunakan
komputer grafis. Perhatikan bahwa saya berbicara tentang rendering, bukan modeling. Jika Anda perlu untuk cat mobil, sebagian besar
dari keputusan yang dibuat pada model tahap-misalnya, jumlah segitiga yang dibutuhkan, tekstur,
dan sebagainya. Dengan alam dan rincian halus tak terhingga, kita perlu untuk mengangkut bagian dari pekerjaan ke
render panggung, menerapkan algoritma khusus untuk membuat perkiraan yang baik dari alam.
Bab ini dikhususkan untuk subjek render organik. Ini adalah subjek yang indah, dan hasilnya
sering cukup spektakuler. Sayangnya, itu bukan kasus satu ukuran cocok untuk semua. Kebanyakan algoritma bekerja pada caseby-
per kasus, dan meskipun beberapa strategi umum yang ada, kita perlu berpikir dalam hal yang sangat spesifik
masalah. Aku akan menutupi manifestasi yang berbeda dari alam satu per satu (pohon, rumput, awan, dan sebagainya) dan
mengeksplorasi algoritma yang cocok untuk masing-masing.

Alam dan Kompleksitas
 
Awan bukan bola, pegunungan tidak kerucut, dan kulit pohon tidak lancar. Dalam satu kata, alam
kompleks. Dengan kompleks saya berarti bahwa tingkat detail tidak menurun seperti yang kita melihat lebih dekat.
Ambil jam tangan, misalnya. Jika Anda melihatnya dari beberapa meter jauhnya, Anda hanya akan melihat nya
bentuk umum. Tapi saat Anda bergerak lebih dekat, detail akan muncul. Perhatikan, bagaimanapun, bahwa rincian tampaknya berhenti di
skala tertentu. Tidak ada fitur tunggal lebih kecil dari beberapa milimeter. Jika Anda adalah untuk melihatnya melalui
mikroskop, Anda akan melihat bahwa permukaan tidak benar-benar mulus tapi penuh pegunungan karena manufaktur.
Namun, setidaknya dalam hal jelas, ada diskontinuitas secara rinci.
Sekarang, bandingkan jam tangan dengan daun pohon. Semakin dekat Anda melihat, semakin banyak detail yang Anda lihat, bahkan pada
tingkat mikroskopis. Ada peningkatan yang terus menerus dalam detail seperti yang kita meningkatkan skala. Ini menarik
milik unsur-unsur alam yang dimiliki oleh semua hewan, tumbuhan, air, awan, dan bahkan medan. ini
kontinuitas memanifestasikan dirinya dalam dua tampaknya berbeda tetapi mirip skenario: geometri dan penampilan.
Menggunakan contoh daun lagi, Anda melihat saat Anda bergerak lebih dekat saraf, keriput, dan sebagainya, tetapi juga
pola kecil texturing, perubahan warna halus, dan banyak lagi.
Jadi, kesimpulan pertama analisis ini menunjukkan bahwa semua metode yang ditujukan untuk alam render akan memiliki
tingkat-of-detail (LOD) komponen, memungkinkan kita untuk mendekati tingkat yang bervariasi detail ditemukan di dunia nyata.

Pohon

Pohon render baru-baru ini menemukan jalan ke game komputer. Simulator golf merupakan yang pertamamencoba untuk menyampaikan tampilan pohon realistis (biasanya dengan mensimulasikan mereka dengan billboard). Tapi banyak permainanhari ini berlangsung di luar skenario, sehingga pohon-pohon yang semakin populer.Pohon dapat diberikan dalam berbagai cara, dan keputusan tentang cara untuk melakukan ini tergantung pada prioritaspohon-pohon di rendering pipeline. Ada banyak pendekatan yang berbeda, namun masing-masing menawarkan yang berbedaHubungan biaya-manfaat, sehingga Anda perlu menganalisis berapa banyak siklus jam atau segitiga Anda akancurahkan untuk skenario Anda. Dalam beberapa game action, pohon bisa menjadi latar belakang terhadap yang gameplayterjadi, dan dengan demikian, metode murah sederhana akan dipekerjakan. Dalam skenario lain, seperti role-playing game(RPG), pohon adalah bagian dari atmosfer, dan dengan demikian lebih banyak energi akan dikhususkan untuk menggambarkan merekarealistis.Aku akan mencakup metode rendering yang berbeda secara rinci, menekankan karakteristik kunci (memorijejak, penggunaan CPU, segitiga, dan sebagainya) sehingga Anda dapat membuat keputusan untuk permainan Anda.

Baliho

Sebuah billboard adalah quad layar-blok yang digunakan untuk menggantikan kompleks, objek yang jauh dengan sebuah beresolusigambar. Sebagai pemirsa bergerak sekitar, billboard juga berputar, sehingga selalu menghadap ke arah Anda. Balihoyang besar untuk pohon yang jauh karena mereka memungkinkan Anda untuk mewakili hutan visual padat dengan hanya beberapasegitiga.Seperti yang Anda telah lihat, menyelaraskan sebuah billboard dengan layar relatif mudah. Yang Anda haruslakukan adalah menghitung vektor dunia-ruang, yang bila diproyeksikan, menghasilkan vektor layar-blok, dan kemudian menggunakanmereka untuk membuat primitif. Perhitungan ini dengan mudah dapat dibuat dari pemodelan dan proyeksimatriks dalam API pilihan Anda atau langsung dengan menggabungkan posisi pemain dan sudut rotasi dengan beberapatrigonometri pintar.Jika Anda memutuskan untuk membuat pohon billboard, Anda harus menyadari beberapa teknik yang mungkin bisa membantuuntuk meningkatkan realisme hasilnya. Cobalah untuk menggunakan banyak tekstur yang berbeda sebanyak yang Anda bisa, sehingga lanskapterlihat variatif dan tidak pengulangan dari pohon yang sama. Jika memungkinkan, pak semua tekstur pohon besar, tunggaltekstur, sehingga Anda dapat merangkum seluruh hutan dalam panggilan render tunggal, menghindari tekstur selalu mahalbertukar operasi.Sepotong kedua saran: Jika Anda mampu membelinya, menerapkan halus skewing layar-blok ditransformasi ke pohonuntuk menyampaikan animasi. Pastikan pohon yang bertahap dari satu sama lain, sehingga hasil keseluruhan memberikan rasakekacauan, yang akan membantu realisme. Skewing dapat diimplementasikan dengan mudah di billboard. Ini hanya masalahmeninggalkan simpul dasar tidak berubah sementara menerjemahkan simpul atas sepanjang garis didefinisikan oleh screenalignedvektor horisontal, seperti yang ditunjukkan pada Gambar 20.1.
                                                            Gambar 20.1

 Teknik perbaikan lainnya adalah bermain dengan warna dan ukuran sedikit. Anda dapat baik tekstur recolor sehinggamereka terlihat berbeda atau memodifikasi warna per-vertex dan memodulasi warna tekstur sedikit di pass rendering.Apapun pilihan Anda, idenya adalah bahwa tidak ada dua pohon akan terlihat persis sama, mereka harus bervariasi dalam ronamelalui spektrum yang relatif luas. Juga, bermain dengan ukuran. Mengubah toko satu skala untuk setiap pohon, sehingga Andadapat menampilkan pohon ukuran yang berbeda. Variasi besar tidak benar-benar diperlukan. Membiarkan persen deviasi 10-15dari "standar" ukuran adalah semua yang Anda butuhkan untuk lebih memecah pola lanskap, dan dengan demikian menciptakanSkenario meyakinkan.Baliho besar jika Anda perlu untuk menciptakan sebuah hutan pada platform sumber daya yang sangat terbatas. Dengan demikian, semuateknik dijelaskan sebelumnya diarahkan untuk meningkatkan realisme hasil, karena hal iniTeknik ini cukup terbatas. Sekarang mari kita telusuri beberapa keterbatasan dan item yang harus diperhatikan saat menggunakanpohon billboarded.Pertama dan terpenting, sangat berhati-hati dengan melihat jarak. Seperti Anda mungkin tahu, billboard tidak benar-benardimaksudkan untuk dilihat dari dekat. Mereka adalah datar, terlihat pixelated, dan jika billboard dekat dengan tepi lateral yanglayar, dapat melihat terdistorsi.Alternatif terbaik untuk memperbaiki datar, terlihat pixelated adalah untuk memadukan representasi billboard jauh denganup versi dekat dibuat dengan menggunakan metode yang lebih terlibat. Pohon berbasis rendering gambar dapat digunakan jugasebagai obyek geometri nyata. Aku akan pergi ke lebih rinci tentang pendekatan ini karena saya mengeksplorasi masing-masing teknik.Masalah distorsi agak sulit untuk menangani. Billboard dirancang selalu menghadap kamera.Dengan demikian, jika mereka dekat dengan penonton, sebuah gerakan kamera kecil akan menyiratkan pergeseran sudut besar, sehinggabillboard akan berputar untuk mengakomodasi posisi pemain baru dan kadang-kadang dapat terlihat salah.Dua solusi yang ada untuk memecahkan masalah ini. Opsi pertama adalah untuk menyelaraskan billboard tidak begitu mereka menghadapikamera, tapi begitu mereka menghadapi melihat pesawat kamera (lihat Gambar 20.2). Dengan melakukan ini, billboard jauh akanmasih terlihat benar (masalah sudut dapat diabaikan di sini). Contoh dekat tidak akan lagi memutar untuk menghadapipenampil, dan tampilan yang lebih realistis akan tercapai.
Gambar 20.2. Billboard selaras dengan kamera (kiri) dibandingkan billboard selarasdengan pesawat kamera melihat untuk mengoreksi distorsi.
Alternatif kedua adalah untuk memungkinkan rotasi terbatas atas pesawat melihat kamera. Ini adalah tengah-ofthe-solusi jalan yang memberikan hasil cukup baik. Di sini, billboard akan dihitung seolah-olah mereka menghadapikamera. Kemudian, sudut antara representasi dan bidang pandang akan dihitung, dan hanyayang terbatas rotasi akan diizinkan. Dengan cara ini pohon dapat berorientasi ke kamera ketika merekajauh, dan lebih dekat pohon tidak menderita artefak rotasi ditemukan di billboard klasik.
Metode Image-BasedTradisional programmer grafis cenderung memiliki kecenderungan untuk segitiga. Semua masalah harus mendidih kesegitiga render dan (kadang-kadang cukup rumit) representasi geometris. Tapi bagaimana kalau kita lupatentang itu sebentar? Bagaimana jika, bukannya membusuk segalanya menjadi segitiga, kami memilih yang berbedaprimitif? Rendering Image-Based (IBR) adalah denominator umum dari banyak teknik yang berbeda yang melakukantidak mencoba untuk membuat representasi geometris akurat benda, melainkan menyampaikan daya tarik visual mereka denganmenggunakan gambar. Dalam kasus ekstrim, sebuah billboard adalah metode IBR. Tapi banyak metode IBR lain ada,menghasilkan hasil yang lebih baik.Pohon render sangat cocok untuk IBR. Pohon memiliki set data geometris yang besar, dengan pohon yang layak membutuhkanlebih dari 10.000 segitiga. IBR, di sisi lain, menempatkan penekanan pada tekstur, menjaga segitigamenghitung relatif rendah. Seperti yang akan Anda lihat sebentar lagi, Anda dapat membuat pohon relatif tampan dengan sekitar20 segitiga menggunakan beberapa teknik IBR pintar.Teknik IBR juga dapat ditingkatkan atau bawah untuk menawarkan berbagai tingkat detail. Kita akan melihat bagaimana mereka berbauralami dengan billboard dan dapat dengan mudah diintegrasikan dengan representasi geometri juga.

Metode IBR ParalelMetode IBR Paralel dirancang untuk secara akurat menggambarkan pohon yang merupakan bagian dari latar belakang. Ituketerbatasan adalah bahwa kita harus baik secara statis atau bergerak pada bidang sejajar dengan pohon-pohon. Dengan demikian, itu adalah cocokmetode untuk petualangan, permainan yang paling berkelahi, dan sebagainya.Ide utama adalah untuk mewakili kompleksitas pohon nyata dengan hirarkis, berlapis billboard array. Kamiakan menggunakan salah satu billboard untuk batang pohon, dan dari sana, serangkaian billboard dihubungkan oleh sendi, banyakseperti karakter dalam animasi skeletal. Dengan demikian, kita dapat menghidupkan pohon seolah-olah ditiup angindengan menyebarkan gerakan melalui hirarki sekaligus menjaga jumlah segitiga yang sangat rendah. Sebuah model yang baik daripohon dengan menggunakan metode ini dapat memakan waktu sekitar 25 quads untuk membuat, sehingga metode yang dapat digunakan untuk hutan lebat sebagaibaik.Kesulitan utama dari metode ini adalah mendapatkan data billboard sehingga dihasilkan pohon terlihat baik. Itumetode yang saya akan merekomendasikan membutuhkan paket render (3ds max, Maya, dan sebagainya) dan setiap pohonpemodelan plug-in yang tersedia untuk mereka. Anda mulai dengan model pohon dengan sedetail yang Anda inginkan.Ingatlah bahwa ini adalah metode IBR, sehingga lebih detail tidak berarti kompleksitas lebih atau lebih rendah
   
frame rate. Jadi, pastikan pohon itu serealistis mungkin.
Kemudian, Anda perlu menggunakan pesawat kliping atau operasi Boolean untuk mengekstrak irisan geometri pohon di arah Z
dan mengambil snapshot dari geometri yang. Batangnya umumnya dapat disimpan dalam satu lapisan, sehingga pohon
dedaunan adalah di mana Anda harus menghabiskan sebagian besar waktu Anda. Pastikan cabang besar secara hirarki dibagi menjadi
beberapa lapisan karena ini akan memungkinkan lebih halus animasi nanti. Saya sarankan menyimpan lapisan ini menggunakan beberapa
bermakna konvensi penamaan karena merekonstruksi pohon sesudahnya dapat menjadi rumit jika Anda tidak.
Sebagai contoh, saya encode nama sebagai serangkaian surat, yang mewakili disposisi hirarkis dari
diberi lapisan seperti yang ditunjukkan pada Gambar 20.3.
                                                 Gambar 20.3. Penamaan untuk cabang hirarkis.
 

Langkah berikutnya melibatkan menyimpan "anchor point" untuk setiap patungan antara dua lapisan. Jangkar titikdi mana kita akan menghubungkan potongan. Cabang A akan memutar sehubungan dengan tempat ini, jadi mendeteksi dengan benar adalahpenting untuk realisme adegan lengkap. Anda harus menyimpan koordinat ini bersama di 2D, mengacu padasistem koordinat elemen saat ini, seperti yang ditunjukkan pada Gambar 20.4.Gambar 20.4. Pohon berbasis gambar Orthogonal dengan paha ditampilkan.Jadi set data kami sekarang siap.Untuk membuat itu, kita harus mengikuti pendekatan animasi skeletal. Setiap baru billboard mewarisi gerakan dari yangorangtua dan menyebarkan ke bawah untuk anak-anak. Sebagai aturan praktis, node lebih dekat ke akar umumnyahttp://www.tar.hu/gamealgorithms/ch20lev1sec2.html (4 dari 8) 2/9/2009 18:13:19http://www.tar.hu/gamealgorithms/ch20lev1sec2.htmllebih besar dan lebih berat. Dengan demikian, kisaran pergerakan berbagai cabang harus meningkatkan sedikit seperti yang kitamenjauh dari akar pohon dan maju ke daun.Menggabungkan semua langkah dalam proses ini menghasilkan pohon yang sangat realistis. Catatan, bagaimanapun, bahwamenciptakan kumpulan data adalah proses yang membosankan, terutama jika Anda perlu melakukannya untuk beberapa jenis pohon untuk membuathutan. Oleh karena itu, disarankan agar Anda kode beberapa plug-in untuk modeler pilihan Anda, yang membuat hidupmudah. Sebuah GUI intuitif sangat dapat menyederhanakan menciptakan set data metode ini.Perpanjangan mekanisme ini menggunakan IBR paralel untuk daun, yang biasanya disimpan dalam kelompok, dangeometri nyata (mungkin dengan jerat progresif seperti dijelaskan pada Bab 21, "Teknik Prosedural") untukbagasi. Dengan cara ini kita memiliki pohon kita dapat bergerak lebih dekat, dan jika daun dirancang untuk menggabungkan tidak hanyayaw tapi lapangan juga, kita dapat melihat dari bawah.Metode IBR OrthogonalMetode paralel dijelaskan pada bagian sebelumnya memungkinkan penciptaan pohon realistis untuk statis atauGerakan terbatas pemain. Mereka menyampaikan rasa paralaks dan volume, dan dapat animasi. Itudownside adalah bahwa kita tidak dapat melihat pohon dekat, atau mengitarinya realistis. Alasan untuk iniketerbatasan terletak pada resolusi tekstur dan dalam kenyataan bahwa tekstur adalah layar-blok, sehingga berputar di sekitarmereka adalah mustahil.Sebuah teknik baru harus digunakan untuk kasus-kasus yang membutuhkan lebih banyak fleksibilitas. Seperti pada kasus sebelumnya, iniTeknik ini agak mirip dengan medis tomografi aksial komputerisasi (CAT) scan, sehingga irisan pohonharus diambil.Tapi kali ini kita akan dapat berputar bebas dan, dengan beberapa keterbatasan, bahkan tinggal di bawah naungan pohon-pohon.Perbedaan utama adalah bahwa saat ini kita tidak akan mengambil irisan paralel tetapi akan sampel pohon baik di XY danYZ pesawat, sehingga kita mendapatkan serangkaian peta tekstur merata spasi. Kemudian, kita akan melukis mereka, merekonstruksiproporsi pohon seperti dalam volume rendering konvensional. Untuk mencegah penampil dari memperhatikanpola yang teratur, alpha-blending akan digunakan untuk memastikan kelancaran transisi antara billboard selaras dalamkedua sumbu. Dengan cara ini kita dapat melihat pohon dari jarak dan mengitarinya. Semakin banyak billboard Andadigunakan, hasil yang lebih baik akan Anda raih. Namun, demo dengan sekitar 5-8 irisan di setiap arah (yang mengakibatkansebuah segitiga 20-32 pohon) terlihat cukup baik. Satu-satunya masalah dengan teknik ini adalah bahwa bagasi biasanya harusditangani secara terpisah, karena sebagian besar waktu itu akan terlihat salah.Masalah lain adalah bahwa penampil tepat di bawah pohon seharusnya tidak diperbolehkan untuk mencari, atau ilusikompleksitas akan hilang sepenuhnya. Gerakan lapangan sehingga harus dibatasi untuk teknik ini untuk mencapai baikhasil. Sebuah solusi untuk situasi ini adalah menggunakan tidak dua sumbu tapi tiga sumbu: XY, YZ, dan XZ. The XZbillboard jarang akan digunakan kecuali untuk memecahkan kasus dimana penonton ditempatkan di bawah pohon. Kemudian,puncak pohon akan diiris dalam lapisan horisontal, dan rasa volume dan paralaks akan dipertahankan. Tapisolusi ini jarang diterapkan karena memerlukan peta tekstur bahkan lebih (metode IBR semuatekstur lapar). Ini jauh lebih mudah untuk membatasi gerakan kamera sedikit.Adapun pelaksanaan, metode ortogonal dimulai seperti metode paralel: dengan pemodelan beresolusi sangatpohon menggunakan plug-in atau paket. Pohon bisa lagi serumit yang Anda inginkan karena kitatidak akan menggunakan geometri sama sekali. Proses mengiris tidak terjadi dalam paket pemodelan tetapi dalampreprosesor atau pada saat beban dalam aplikasi utama. Algoritma ini adalah sebagai berikut:menghitung kotak berlari pohonpilih nomor yang benar irisanhttp://www.tar.hu/gamealgorithms/ch20lev1sec2.html (5 dari 8) 2/9/2009 18:13:19http://www.tar.hu/gamealgorithms/ch20lev1sec2.htmluntuk setiap irisan di XYmenempatkan kamera dalam posisi tetap sepanjang sumbu Zmenginisialisasi depan dan belakang pesawat kliping sehingga Anda membatasi Zbuffer ke daerah Andaingin mengirismembuat frame, simpan ke disk (mungkin dibersihkan)end untukuntuk setiap irisan di YZ pesawatmenempatkan kamera dalam posisi tetap sepanjang sumbu Xmenginisialisasi depan dan belakang pesawat kliping sehingga Anda membatasi Zbuffer ke daerah Andaingin mengirismembuat frame, simpan ke disk (mungkin dibersihkan)end untukPerhatikan bahwa posisi kamera tidak benar-benar relevan, asalkan tetap masih di atas loop rendering.Satu-satunya perbedaan itu akan membuat adalah pada ukuran billboard, yang akan disesuaikan dengan ukuran tekstur yang cocoksesudahnya pula.Sekarang Anda harus memiliki serangkaian gambar RGBA siap untuk rendering. Seperti yang Anda lihat, preprocess ini jauhsederhana daripada yang diperlukan dalam metode paralel. Untuk rendering, Anda harus mulai dengan rendering semuagambar untuk serangkaian sumbu-sejajar paha depan, sehingga mereka merekonstruksi geometri pohon. Kemudian, Anda harusalpha-berbaur paha depan tergantung pada sudut ke penampil. Secara khusus, paha depan menghadap penonton harusburam, dan sebagai quad bergerak menjauh dari penampil, transparansi harus meningkat. Tuning kode inisangat penting untuk ilusi volume, sehingga sedikit trial and error diperlukan. Setelah Anda mencapai hal ini, Andaharus melihat XY dan YZ billboard "bergiliran," sehingga XY quads fade out, fade in YZ paha depan untuk menciptakanterlihat terus menerus dari volume pohon. Kadang-kadang bagasi akan bekerja dengan baik dengan teknik ini, dankadang-kadang Anda akan perlu menggunakan mesh reguler untuk bagasi karena akan terlihat berlapis. Anda dapat melihathasil keseluruhan digambarkan pada Gambar 20.5.Gambar 20.5. Tampilan akhir dari pohon dengan titik jangkar dan peta tekstur ditampilkan. [1]http://www.tar.hu/gamealgorithms/ch20lev1sec2.html (6 dari 8) 2/9/2009 18:13:19http://www.tar.hu/gamealgorithms/ch20lev1sec2.html[1] Gambar dari Aleks jakulin. "Vegetasi Rendering Interaktif dengan slicing dan Blending,"Eurographics 2000. Digunakan dengan izin.Pohon IBR Orthogonal terlihat sangat meyakinkan. Tapi mereka memiliki sisi negatifnya. Metode animasi hirarkiskami merancang untuk pohon paralel tidak layak di sini. Peta tekstur yang merata spasi dan memindahkan mereka akanmembuat pohon terlihat seperti itu melanggar. Sebuah perbaikan kecil dapat dicapai dengan geser simpul atasdari paha depan yang sangat halus, sehingga terlihat seperti puncak pohon secara keseluruhan bergerak. Kadang-kadang Anda bahkan akan dapatuntuk menambahkan beberapa paha ekstra manual ke puncak pohon, sehingga Anda dapat memindahkan mereka sedikit dan meniru animasi.Namun, teknik ini bekerja terbaik dengan pohon statis.Kelemahan lain untuk teknik ini pada khususnya (dan IBR pada umumnya) adalah bahwa penggunaan tekstur hanya meroket.A, pohon kualitas rinci baik akan membutuhkan banyak irisan berkualitas baik, dan ini berarti banyak memori akandigunakan. Ambil, misalnya, sebuah pohon yang terbuat dari 8 +8 irisan, masing-masing disimpan sebagai 32-bit RGBA 256x256 bitmap.Setiap bitmap akan memerlukan 256KB memori terkompresi untuk grand total 4MB untuk seluruh pohon. Andamungkin berpendapat bahwa angka-angka ini tidak terlalu buruk karena kita tidak menggunakan geometri apapun sebagai imbalan.Meskipun hal ini benar, 4MB per pohon membuat menggunakan teknik ini sangat keras dalam setiap permainan utama,dimana set data harus disimpan ke minimum. Berikut adalah beberapa saran untuk mengurangi kebutuhan tekstur:http://www.tar.hu/gamealgorithms/ch20lev1sec2.html (7 dari 8) 2/9/2009 18:13:19http://www.tar.hu/gamealgorithms/ch20lev1sec2.htmll Jangan menyimpan nilai alpha. Toko transparansi menggunakan warna hitam dan menghasilkan transparansi olehhati-hati memilih fungsi blending.l Gunakan tekstur palletized. Treetops relatif seragam dalam warna dan dengan demikian dapat berhasildikodekan dalam 256 warna.l Gunakan sedikit dan lebih kecil irisan tergantung jarak pandang Anda. Jika Anda hanya akan melihat pohon-pohon darijauh, mungkin 4x4, irisan 64x64 akan lebih dari cukup. A 4x4, pohon 64x64 hanya membutuhkan256KB (menggunakan peta RGBA).l Jika Anda menggabungkan teknik ini dengan resolusi tinggi, hingga model yang dekat, ukuran tekstur juga bisaberkurang karena mereka tidak akan pernah terlihat dekat.l Buat pohon yang berbeda dengan peta tekstur yang sama. Cermin peta secara vertikal maupun horizontal, gunakansedikit perbedaan titik warna, dan skala atas atau bawah untuk memastikan bahwa setiap peta tekstur menciptakan sebagaipohon sebanyak mungkin.http://www.tar.hu/gamealgorithms/ch20lev1sec2.html (8 dari 8) 2/9/2009 18:13:19http://www.tar.hu/gamealgorithms/ch20lev1sec3.htmlRumputKita telah melihat bagaimana render pohon adalah masalah memberikan banyak detail ke objek tunggal dengan menggunakan sangat sedikitgeometri. Rumput rendering adalah cerita yang sama sekali berbeda. Masing-masing rumput relatif sederhana dan dapatberkisar dari satu baris untuk beberapa segitiga. Namun, kita harus membuat ribuan dari mereka untuk menyampaikan tampilandari padang rumput asli. Disini kompleksitas tidak terletak pada objek tertentu tetapi dalam angka yang kita akan mencoba untukmencapai. Tidak mengherankan, metode render rumput sangat berbeda dari algoritma pohon.Kami akan mengeksplorasi serangkaian algoritma yang cocok untuk rumput. Beberapa dari mereka akan memiliki keterbatasan tertentu (tidakmampu menghidupkan rumput adalah salah satu yang populer). Hanya dengan mengetahui semua algoritma secara rinci akan Andadapat memilih salah satu yang cocok untuk anda.Rumput LayeredSalah satu pendekatan untuk rumput rendering untuk menghitung rumput melalui Volume rendering. Ini adalah sangat murahalgoritma yang menghasilkan hasil yang cukup baik. Idenya sederhana: Ambil pisau individu rumput. Pisauakan vertikal atau hampir vertikal, sehingga menyederhanakan dengan garis vertikal lurus cukup akurat. Tapiberapa banyak pisau rumput yang ada di sebuah padang rumput terbuka? Jumlahnya bisa mencapai ratusan ribu, dankita jelas tidak akan melukis yang banyak baris. Biaya akan menjadi penghalang. Kita perlu alternatifcara untuk mengatasi masalah ini, sehingga kita dapat menjaga tingkat kompleksitas jelas sambil menjaga aktualtingkat kompleksitas yang cukup rendah.Di sinilah konsep Volume render tendangan masuk Daripada lukisan pisau individu, kita akan sampelvolume ditempati oleh padang rumput seluruh, dan membuat pisau sebagai piksel pada tekstur. Untuk melakukannya, kitaakan menggunakan elemen Volume (voxel), yang akan menyandikan letak pisau rumput sebagai fungsi volume. Sekarang,karena kita menyederhanakan rumput dengan garis vertikal lurus, kita kehilangan informasi Y, dan kita dapat memampatkanvoxel 3D kami hanya bitmap 2D, yang akan kita lapisan dalam Y untuk menyampaikan volume.Jadi, algoritma kami semudah lukisan bitmap yang sama di beberapa iris Y. Sekarang, bitmap adalahbagian kompleks. Untuk volume rendering, bitmap akan perlu untuk mengkodekan bagian XZ dari bilah rumput.Ini berarti bitmap RGBA, di mana daerah ditutupi rumput-rumput yang dicat dengan alpha = 1, dan daerah yangtidak seharusnya memiliki pisau rumput yang dicat dengan alpha = 0. Hal ini sangat penting untuk semua ruang rumputelemen merata, jadi kita tidak bisa merasakan pola ubin di rumput.Render ini cukup sederhana. Render bidang tanah pertama. Kemudian, membuat quad yang sama, pergeseran itu bersamaY untuk setiap iterasi. Antara 5 dan 20 paha depan akan dibutuhkan untuk menyampaikan rasa kontinuitas vertikal. Sebagairule of thumb, jumlah lapisan harus dapat dihubungkan ke lapangan kamera. Sebuah kamera yang sangat bernadamelihat pisau dari atas, dan dengan demikian tidak banyak iterasi yang diperlukan. Sebuah kamera yang hampir sejajar dengantanah, di sisi lain, akan membutuhkan jumlah yang jauh lebih tinggi dari iterasi untuk menghasilkan ilusipisau terus menerus. Lihatlah Gambar 20.6 untuk gambar jelas.Gambar 20.6. Lapisan peta tekstur yang digunakan untuk membuat rumput dan menyampaikanparalaks.http://www.tar.hu/gamealgorithms/ch20lev1sec3.html (1 dari 4) 2/9/2009 06:13:30http://www.tar.hu/gamealgorithms/ch20lev1sec3.htmlDengan demikian, metode ini membutuhkan waktu satu peta tekstur dan sebanyak paha depan yang diperlukan untuk menggambarkan pisau. Kita bahkan bisamenambahkan animasi dengan mengubah tekstur rumput koordinat sedikit. Bahkan, metode ini telah baru-baru inikode untuk berbagai game dan platform. Rumput tidak dapat melihat dekat, tapi ilusi cukupmeyakinkan, dan biaya adalah pasti plus.Selain itu, metode ini dapat diimplementasikan dalam quad tunggal dengan menggunakan pixel shader. Di sini kita akanmenghitung sudut dari pemain untuk setiap Texel dan sampel volume untuk menghasilkan peta tekstur. Inicara kita hanya akan menggunakan satu quad, yang akan bekerja rincian proyeksi internal. Perhatikan, bagaimanapun,bahwa pendekatan ini shader tidak selalu ide yang baik. Jika kita melukis beberapa paha depan menggunakan pendekatan pertama kami,kita dapat memiliki elemen setengah tenggelam di rumput realistis, seperti binatang di tengah-tengah tinggirumput atau berdiri sepak bola di tengah lapangan. Metode shader, dengan menggunakan hanya satu quad untuk menyingkatinformasi dari paha depan yang berbeda, menghilangkan kemungkinan ini.Algoritma Distribusi StatistikKami sekarang akan mengeksplorasi algoritma distribusi statistik, yang mencoba untuk menyampaikan kepadatan rumput penuhpadang rumput secara real time. Karena render semua rumput hanya mungkin, metode berfokus pada radiussekitar pemain dan alpha-memudar rumput dengan meningkatnya jarak sehingga tidak ada pop terjadi. Jika warna rumputmenyatu dengan baik dengan medan, mata tertipu, dan pemirsa mengasumsikan bahwa seluruh padang rumput yang efektifditutupi oleh rumput. Menggunakan trik sederhana ini memastikan bahwa kita melukis sejumlah konstan segitiga untukrumput, yang merupakan kunci untuk algoritma.Geometri dicat menggunakan primitif segiempat, dan setiap quad mewakili beberapa bilah rumput yangdikelompokkan bersama. Ini membantu mengurangi dampak segitiga, karena rumput pasti akan membutuhkan banyakgeometri. Dengan teknik ini, penting untuk menggunakan metode render yang baik (seperti Vertex Array Rentang[VAR] di OpenGL atau DrawPrimitive di DirectX). Sayangnya, rumput tidak terdiri dari strip primitif,dan pengindeksan tidak akan membantu secara signifikan, sehingga VAR paha tampak seperti pilihan yang baik.Pada titik ini, bagian statistik algoritma mulai bekerja untuk memastikan bahwa tidak diinginkan pola yang terlihatdipecah sebanyak mungkin. Penonton tidak harus melihat bagaimana pisau dikelompokkan bersama-sama, ataumelihat bahwa lanskap tidak penuh rumput. Untuk mencapai hal ini, pilihan terbaik adalah dengan menggunakan Poisson spasialdistribusi, yang mendistribusikan serangkaian sampel pada bidang tanah sehingga jarak antara setiap XZdua sampel yang dipilih secara acak tidak pernah lebih kecil dari ambang batas tertentu. Distribusi Poisson yang populer diliteratur komputer grafis. Mereka digunakan untuk wilayah sampel dalam ray tracing stokastik untuk efek yang sama.Menerapkan distribusi Poisson tidak sederhana. Jika kita membutuhkan hasil yang akurat 100 persen, metodeyang perlu digunakan disebut "lempar panah," yaitu, berturut-turut menambahkan elemen ke ruangdistribusi acak, dan jika unsur baru melanggar definisi distribusi Poisson (dan tentunya memilikilain primitif dekat daripada ambang batas yang diinginkan), menghilangkannya. Dengan mengulangi rutinitas ini sampai yang diinginkandensity tercapai, kita akan mendapatkan distribusi Poisson sempurna. Tapi untuk permukaan yang besar proses ini dapat mengambilhttp://www.tar.hu/gamealgorithms/ch20lev1sec3.html (2 dari 4) 2/9/2009 06:13:30http://www.tar.hu/gamealgorithms/ch20lev1sec3.htmllama untuk menyelesaikan, sehingga metode yang dekat Poisson digunakan: Bagilah permukaan dalam kotak persegi, tempat satu elemendi setiap node, dan menerapkan gerakan acak kecil untuk itu di kedua X dan Z arah. Gerakan kecildisebut jitter dan memastikan bahwa tidak ada pola yang terlihat terjadi. Jika jitter terbatas (misalnya, untuk setengah gridukuran), kita masih sesuai dengan distribusi Poisson di sebagian kecil dari biaya. Untuk pembuatan rumput, metode ini(Lihat Gambar 20.7) akan digunakan.Gambar 20.7. Distribusi statistik pisau rumput. Kiri atas: Grid. Kanan atas: Gridjittered untuk membuat distribusi Poisson. Kiri bawah: Quads ditambahkan. Kanan bawah:Hasil akhir di mana semua pola teratur telah dieliminasi.Setelah distribusi Poisson telah dievaluasi, jitter rotasi harus diperkenalkan. Menjaga semuasegmen blade selaras tentu tidak membantu menyampaikan rasa kekacauan dan kealamian. Dengan demikian, masing-masingsegiempat akan diputar di sekitar Y (vertikal) sumbu. Berikut rotasi acak polos akan melakukan pekerjaansempurna, yang memungkinkan padang rumput kacau muncul.Langkah akhir yang lebih membantu mengurangi artefak visual menambahkan faktor skala ke paha depan individu, sehinggabeberapa paha depan lebih tinggi dari yang lain. Penyimpangan 30 persen atau lebih bekerja dengan baik.Sebuah catatan pada rendering: Seperti Anda mungkin telah ditemukan, ini adalah metode yang mengisi tingkat intensif karena banyakpaha diwajibkan untuk menyampaikan kepadatan padang rumput nyata. Dengan demikian, algoritma render harus dipilihhttp://www.tar.hu/gamealgorithms/ch20lev1sec3.html (3 dari 4) 2/9/2009 06:13:30http://www.tar.hu/gamealgorithms/ch20lev1sec3.htmlhati-hati. Dalam OpenGL, menggunakan Daftar Tampilan bukanlah ide yang baik karena kita perlu menghidupkan pisaudan yang membutuhkan mengirimkan kembali daftar. Sebuah langkah yang lebih baik adalah dengan menggunakan server-side array titik, yang dapatdiperbarui jika diperlukan. Sebuah strategi yang sangat baik adalah untuk menghitung distribusi Poisson pada waktu buka danmembuat sebuah array dengan semua simpul quad, koordinat tekstur, dan sebagainya. Array akan mewakili persegipatch rumput, misalnya, 10x10 meter. Kemudian, Anda hanya menghidupkan dua simpul atas setiap quad melaluigeser dan mengirim patch ke hardware grafis menggunakan server-side array. Hal ini memungkinkan Anda untuk mengirimarray yang sama beberapa kali dengan PushMatrix-Translate-PopMatrix, sehingga mampu mengisi seluruh dataranrumput dengan mengulangi pola 10x10. Manfaatnya jelas: Anda hanya akan menghidupkan meter 10x10 rumput danmenggunakan sampel itu untuk menutupi banyak mil.http://www.tar.hu/gamealgorithms/ch20lev1sec3.html (4 dari 4) 2/9/2009 06:13:30http://www.tar.hu/gamealgorithms/ch20lev1sec4.htmlAwan-awanBanyak permainan menggunakan awan dan sistem cuaca yang dinamis untuk membawa suasana immersive gameplay. DiMetal Gear Solid 2, misalnya, bagian dari aksi terjadi di bawah curah hujan yang sangat deras, menciptakanperasaan menindas. Permainan lainnya, seperti simulator penerbangan, perlu awan untuk menawarkan pemain realisme adalahmengharapkan dari permainan. Apapun kasusnya, awan cukup penting dalam banyak genre. Mereka bisasimulasi berhasil menggunakan beberapa metode, dari yang sangat sederhana untuk awan dekoratif dengan cukupkompleks untuk game yang membutuhkan awan sebagai bagian dari gameplay mereka.Pada satu ekstrim, kita hanya dapat menggunakan skybox, sebuah objek besar bertekstur, yang, setelah diterapkan untuk tekstur langit, dapatmenjadi langit kita. Kita akan membahas metode ini dalam sekejap. Pada ujung spektrum, kita bisamenerapkan sistem awan volumetrik dengan properti seperti densitas dan suhu, sehingga pesawat dapatmelintasi badai dan pemain bisa merasakan turbulensi. Seperti biasa, pilihan akan tergantung padajumlah jam siklus Anda bersedia untuk mengabdikan untuk simulasi awan. Fitur tambahan jarang datang tanpabiaya.Skyboxes dan DomesCara termudah untuk mendapatkan langit mendung adalah dengan menggunakan skybox atau skydome. Ini adalah kotak cukup besar ataubelahan dengan normals mencari ke dalam, dan tekstur yang ubin di segitiga mewakili langit.Untuk skybox, lima paha digunakan. Mereka umumnya disebut atas, depan, belakang, kiri, dan kanan, dan masing-masingmemiliki tekstur yang unik, yang memadukan mulus dengan paha depan tetangga. Karena paha depan yang dicat dengantidak ada pencahayaan sama sekali, jahitannya antara mereka tidak mungkin untuk melihat, dan langit tampak seperti keseluruhan.Satu-satunya kesulitan dalam menciptakan skyboxes adalah mendapatkan gambar sumber sehingga mereka mengintegrasikan dengan sempurna. Yang terbaikcara untuk mendapatkan mereka adalah untuk menciptakan mereka dengan paket render yang memiliki langit pembangkit prosedural. Salah satupaket yang paling populer adalah Terragen, yang menciptakan lanskap penuh dengan daerah, air, dan langit.Menggunakan Terragen, metode pada dasarnya terdiri dari mendefinisikan langit tampan, dan kemudian menempatkan kamera dipusat skenario. Empat merender kemudian dilakukan pada sudut yaw dari 0, 90, 180, dan 270. Dan kemudianrender lain dihitung dengan kamera melihat ke atas. Sebuah render keenam dengan kamera melihat ke bawahdapat berguna untuk beberapa aplikasi, tetapi kebanyakan game menggunakan lima gambar.Setelah gambar dibuat dengan Terragen, itu semua masalah pengujian sampai mereka benar diletakkan pada limapaha depan. Kemudian, rasa berada di kotak harus menghilang, dan hanya langit terus menerus harus terlihat.Awan BillboardedTeknik lain yang dapat berguna menggunakan awan billboarded, sehingga setiap awan dapat bergerak dan bereaksiindependen. Awan hanya perlu disesuaikan dengan penonton dan bergerak sangat lambat. Awan Billboarded dapatdikombinasikan dengan skybox dengan mudah, tapi downside adalah bahwa kita tidak bisa menyeberang atau masukkan awan. Itu akanmembunuh ilusi volume karena kita akan menyadari awan hanyalah pesawat. Kita perlu lebih baiksistem untuk membuat representasi awan yang realistis.Awan volumetrikhttp://www.tar.hu/gamealgorithms/ch20lev1sec4.html (1 dari 2) 2/9/2009 18:13:37http://www.tar.hu/gamealgorithms/ch20lev1sec4.htmlBagi aplikasi yang membutuhkan tampilan ekstra-realistis, model awan volumetrik dapat diimplementasikan, sehinggapemain dapat memasukkan badai, dibenamkan ke kabut volumetrik, dan sebagainya. Berhati-hatilah, meskipun:Sistem awan volumetrik memerlukan sejumlah besar sumber daya, baik di CPU dan GPU, dan dengan demikian dapatmenurunkan kinerja keseluruhan judul Anda.Ada berbagai pendekatan awan volumetrik. Jadi, saya akan mengekspos sistem cloud generik yang dapatdisesuaikan atau diperpanjang untuk menyesuaikan banyak kegunaan.Komponen pertama yang kita butuhkan adalah sebuah struktur data untuk menahan awan. Hal ini dapat berkisar dari yang sangat sederhanadengan sangat kompleks. Di sisi yang sederhana, kita bisa melakukan daftar jalur 3D dan jari-jari, dan melaksanakanawan sebagai isosurface bahwa kami akan mengevaluasi per frame. Kekeruhan titik dalam ruang akandihitung dengan menggunakan varian dari fungsi lapangan. Pendekatan ini dapat bekerja dengan baik untuk sistem dengan sedikitelemen mana jumlah generator awan relatif kecil.Jika kita memerlukan representasi yang lebih akurat, kita bisa membagi dunia permainan kami menjadi struktur voxel, dengansetiap node voxel mewakili kepadatan awan pada saat itu. Meskipun sistem voxel kadang-kadangditolak karena jejak memori relatif besar, sistem awan dapat diberikan efisien menggunakan vokseldengan biaya yang wajar. Itu semua tergantung pada memilih ukuran sel yang tepat. Sebagai contoh, sebuah skenario km 5x5,sampel dari permukaan air sampai 500 m di ketinggian (cocok untuk setiap kota dan permainan yang paling luar) padaResolusi homogen 50 meter per sampel (setiap sampel menjadi satu byte) hanya membutuhkan 100KB. Jelas,sistem voxel harus dikontrol dengan hati-hati karena mereka cenderung tumbuh, tapi itu tidak lantas membuatmereka tidak layak.Bagi mereka situasi di mana sistem voxel terlalu mahal, fraktal sistem cloud kompresi dua tingkatdapat diimplementasikan. Berikut gagasan adalah untuk memiliki sistem voxel resolusi rendah dan "detail" voxel, yang kamitempat dalam setiap sel yang lebih besar voxel ini, sangat mirip dengan rekursi ditemukan dalam sistem fraktal. Karena kitaakan interpolasi voxel rinci nilai sesuai dengan empat sudut sel yang lebih besar, kemiripan-diri akantetap diperhatikan, dan sistem awan besar akan cocok di setiap kendala memori.Adapun bagian rendering algoritma, awan volumetrik paling baik ditangani sebagai bergerak sangat lambatsistem partikel. Elemen Cloud hanya billboard dengan nilai opacity yang sangat rendah, dan dengan layering mereka, kitamencapai rasa kepadatan kami bertujuan untuk. Kita bahkan dapat menggunakan tabel warna untuk memastikan bahwa awan terlihatrealistis atau bahkan ekstrak warna dari pendekatan semivolumetric, yaitu, cat setiap elemen dalam warnasebanding dengan penjumlahan kepadatan awan di atasnya. Dengan cara ini kita dapat mewakili gradasi warnaditemukan dalam berbagai jenis awan, dari yang sangat murni cirrus lapisan untuk badai abu-abu gelap.Mark Harris dari University of North Carolina di Chapel Hill menyarankan menggunakan penipu untuk mengurangikompleksitas mendalam dan fill rate yang dibutuhkan untuk membuat awan. Setelah semua, jangan lupa kita berbicara tentangsistem partikel, dan ini memakan banyak sumber daya sistem. Membuat awan realistis bisa memakan waktu antara1.000 dan 5.000 partikel, dan itu jelas bukan apa yang Anda inginkan untuk membuat pada basis per-frame: Biayahanya terlalu tinggi. Dengan demikian, kita dapat menyingkat awan ke IBRS, yang adalah apa penipu adalah semua tentang. Kamimembuat awan untuk tekstur dan menggunakannya sampai kita telah bergerak secara signifikan, dan dengan demikian kita perlu recomputepenipu. Dengan menggunakan penipu, kita secara dramatis mengurangi biaya komputasi awan sistem kami.Semua yang perlu kita lakukan adalah membangun kesalahan metrik yang mengatur saat ketika kita akan recompute awan.http://www.tar.hu/gamealgorithms/ch20lev1sec4.html (2 dari 2) 2/9/2009 18:13:37http://www.tar.hu/gamealgorithms/ch20lev1sec5.htmlOceansSeperti banyak efek organik, laut berkualitas rendah mudah dilakukan, namun hasil tampan benar-benar sulit untukmencapai. Pada akhirnya, itu semua tergantung pada jumlah siklus CPU dapat Anda curahkan untuk rendering itu. Akan Andapermainan menjadi pengalaman yang sama sekali di bawah air seperti Ecco Dolphin, atau akan laut Anda memainkan sekunder,peran murni dekoratif? Lautan benar-untuk-hidup akan komputasi mahal, sehingga praktik yang baik untukmenganalisis harapan Anda sebelum bergerak maju.Dalam bentuk yang paling sederhana, sebuah samudera hanyalah bertekstur, pesawat transparan sebagian. Tekstur akan mencoba untukmeniru tampilan dan warna air nyata, sehingga menghidupkan itu akan menyampaikan rasa tinggi realisme. Tapi keduageometri air ini dan melihat nya terlalu sederhana. Samudra bergerak dan memiliki interaksi yang kompleks dengancahaya, yang mempengaruhi penampilannya. Mari kita periksa geometri dan penampilan secara rinci.Realistis Samudera GeometriUntuk menciptakan samudra realistis, kita akan perlu untuk mengimplementasikan gelombang, semprot laut, dan sebagainya. Beberapa metodemeningkatkan kompleksitas telah dirancang selama bertahun-tahun. Salah satu pendekatan akan menggunakan sinus sederhanagelombang sebagai fungsi gelombang, sehingga menciptakan tampilan bergelombang seragam. Berhati-hatilah, meskipun: fungsi trigonometrisangat mahal, jadi lebih baik untuk memiliki mereka ditabulasi sebelumnya, sehingga menghindari perhitungan mahal bagisetiap frame.Karena lautan jarang teratur, gelombang sinus tunggal hanya akan tidak dipotong. Dengan demikian, dua pendekatan lainnyamemiliki muncul. Menggunakan satu pendekatan, kita dapat mensimulasikan geometri laut dengan cara menambahkan gelombang sinus dalamPola oktaf, dengan masing-masing harmonik yang memiliki frekuensi ganda dan setengah amplitudo. Jika kita jitter ini denganbeberapa bentuk kebisingan (noise Perlin, misalnya), hasilnya akan lebih baik cepat. Pendekatan keduamelibatkan menggunakan model matematika dari laut, sering diimplementasikan sebagai sistem partikel: Setiap permukaanUnsur adalah partikel dihubungkan dengan 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, dancontoh lengkap dari kerangka laut matematika, di Lasse Staf Jensen dan Robert Golias 'Gamasutraartikel, dikutip dalam Lampiran E, "Bacaan lebih lanjut."Samudera PenampilanAir murni adalah transparan, sehingga terlihat dunia nyata biasanya dipengaruhi oleh beberapa faktor: refleksi,tints warna, fenomena cahaya, dan sebagainya. Bahkan, tampilan air pada dasarnya ditentukan oleh perusahaaninteraksi dengan media yang ringan dan lainnya, tidak sebanyak dengan air itu sendiri. Dengan demikian, untuk menyampaikan rasa nyataair yang kita harus belajar bagaimana berinteraksi dengan lingkungannya.Dari sudut pandang optik, air adalah sangat reflektif, bahan transparan sebagian. Warna internal adalahsangat halus dan hanya muncul dalam tubuh besar air. Hal ini dapat bervariasi tergantung pada kimiamicrocomponents 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, keduarefleksi dan transparansi sangat tajam didefinisikan, seperti dalam kebanyakan cairan. Ini berarti benda dimasukkan ke dalam atautercermin dalam air akan tetap terlihat fokus, sebagai lawan kaca patri, yang transparan tapi membuat cahayasinar menekuk secara acak, menghasilkan tampilan yang kabur. Hanya ketika perairan temperatur yang berbeda dicampur janganrefleksi buram dan refraksi muncul.Dengan demikian, langkah pertama menuju air realistis menggunakan pemetaan lingkungan untuk mereproduksi sifat reflektifhttp://www.tar.hu/gamealgorithms/ch20lev1sec5.html (1 dari 5) 2/9/2009 18:13:46http://www.tar.hu/gamealgorithms/ch20lev1sec5.htmlpermukaannya. Pemetaan lingkungan adalah teknik yang sangat dipahami dengan baik, dan rincian teknis yangterpapar dalam Bab 18, "Pemetaan Tekstur." Kita dapat menggunakan kedua bola dan pemetaan kubus, korban keduahasil yang lebih baik dengan harga biaya tekstur yang lebih tinggi. Pilihannya, seperti biasa, tergantung pada efek yang ingin Andamencapai. Untuk sebuah game open-laut, sangat mungkin peta bola langit akan baik-baik saja. Tetapi jika Anda inginrefleksi yang benar (di sebuah danau yang dikelilingi oleh pohon, misalnya), peta kubus akan menjadi pilihan yang lebih baik. Hanyaingat bahwa jika Anda berencana untuk komputasi refleksi realistis, Anda akan perlu untuk recompute peta kubus perframe (atau setiap beberapa frame), dan dengan demikian kompleksitas komputasi akan tumbuh. Pastikan tercermingeometri sederhana, sehingga lulus render-ke-tekstur dapat dilakukan dengan biaya yang murah. Alternatif lain adalahmenggunakan strategi LOD, sehingga model tercermin adalah versi skala-down dari geometri. Hal ini dapatsangat efektif, terutama jika indeks refleksi tidak terlalu tinggi, sehingga penonton tidak akan melihat perbedaansama sekali.Transparansi Indeks perairan laut terbuka sangat bervariasi tergantung pada bahan kimia dari air danintensitas matahari. Secara umum, visibilities sekitar 15-20 meter dianggap normal, yang memberikanIndeks transparansi antara 73 dan 80 persen per meter (80% cahaya memasuki volume airsatu meter lebar efektif membuat ke sisi lain, sisanya diserap).Tapi penyerapan cahaya adalah salah satu konsekuensi dari transparansi air. Yang lainnya adalah refraksi:pembengkokan sinar karena perbedaan kepadatan media yang berbeda. Kecepatan cahaya di udara terbukasignifikan lebih cepat daripada dalam media padat seperti air, dan dengan demikian sinar cahaya membungkuk saat mereka memasuki cairan.Ini bisa berhasil disimulasikan dengan menggunakan teknik shader (dijelaskan dalam bab berikutnya). Perhatikan,bagaimanapun, bahwa permainan yang paling benar-benar mengabaikan refraksi karena sulit terlihat dalam skenario gameplay. Ituhanya contoh akan permainan di mana pemain bisa menyeberangi sungai, atau situasi lain di mana merekasebagian terendam dalam air. Sebuah permainan sepenuhnya di bawah air, misalnya, tidak perlu untuk mensimulasikan refraksikarena semua tindakan yang terjadi dalam medium yang sama (air), dan dengan demikian tidak ada sinar yang bengkok.Salah satu dari beberapa pengecualian untuk aturan ini adalah fenomena yang disebut caustic: konsentrasi cahaya karenarefraksi, yang menyebabkan pola menari cahaya di dasar laut. Hal ini juga sering terlihat dalamapapun dari danau untuk permainan bawah air.CausticCaustic diproduksi setiap kali cahaya perjalanan melalui jalan yang berbeda akhirnya berkumpul di samaspot. Caustic muncul karena beberapa objek semitransparan bertindak sebagai sebuah lensa, fokus sinar cahaya dalamdaerah kecil. Contoh klasik kaustik adalah tempat cahaya yang disebabkan oleh lensa pada selembar kertas ataupola tampaknya kacau dibentuk oleh gelombang di dasar kolam renang.Sayangnya, caustic realistis komputasi mahal. Mereka biasanya dihitung dengan menggunakan majuray 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 beberapaalgoritma yang efisien meniru tampilan caustic nyata interaktif. Tapi tak satu pun dari mereka akan benar-benarmenerapkan caustic analitis karena proses akan terlalu mahal. Mari kita mulai dengan belajar mengapa.Dalam simulasi kaustik realistis, sejumlah sinar cahaya ditembak dari sumber cahaya ke segala arah.Sinar-sinar atau foton mewakili jumlah cahaya yang dipancarkan oleh masing-masing lampu. Mereka sinar langsung memukulbenda buram hanya dihilangkan (sedangkan kontribusi pencahayaan mereka diterapkan ke objek buram itupermukaan). Sebagian besar sinar sehingga akan hilang. Tetapi mereka sinar memukul benda-benda semitransparan sepertiseperti kaca atau air akan disebarkan dan dimasukkan ke dalam media baru, arah mereka akan berubah karenaperbedaan dalam kecepatan cahaya antara "luar" menengah (udara, umumnya) dan "dalam" media(Kaca, air, dan sebagainya). Ini perubahan arah atau membungkuk diatur oleh Hukum Snell, yang menyatakan bahwa:Dosa (masuk) / Sin (ditransmisikan) = IORhttp://www.tar.hu/gamealgorithms/ch20lev1sec5.html (2 dari 5) 2/9/2009 18:13:46http://www.tar.hu/gamealgorithms/ch20lev1sec5.htmlHukum 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 kontribusisinar yang berbeda dan memutuskan mana piksel dipengaruhi oleh kaustik. Kabar buruknya adalah bahwa ini adalah brute forcealgoritma. Kita perlu jutaan foton untuk mencapai tingkat yang baik realisme, dan bahwa membuang teknik untukreal-time digunakan.Gambar 20.8. Hukum Snell mengatur lentur dari sinar saat mereka menyeberangi Mediabatas.Yang berbeda, pendekatan yang lebih sukses melibatkan mundur ray tracing menggunakan estimasi Monte Carlo. Di sini,kita mulai dari dasar laut, dan sinar jejak mundur dalam urutan kronologis terbalik, berusahamenghitung jumlah semua pencahayaan masuk untuk titik tertentu. Idealnya, ini akan tercapai dengan menyelesaikanterpisahkan semispherical dari semua cahaya datang dari atas titik yang sedang menyala. Tapi untuk alasan praktis, hasilnyaintegral ini diselesaikan melalui Monte Carlo sampling. Dengan demikian, seberkas sinar kandidat dikirim ke segala arahbelahan otak berpusat pada titik sampling. Dalam kebanyakan kasus, 16 sinar per pixel cukup untuk mencapaihasil photorealistic. Mereka yang melanda benda lain (seperti ikan paus, kapal, atau batu) dibuang. Kemudian,sinar yang melanda permukaan laut pasti datang dari luar, membuat mereka calon yang baik. Dengan demikian, merekaharus dibiaskan, menggunakan kebalikan dari Hukum Snell. Sinar-sinar yang tersisa harus disebarkan di udara untukmenguji apakah sinar yang benar-benar berasal dari sumber cahaya atau hanya sebuah hipotesis palsu. Sekali lagi, hanyasinar-sinar yang benar-benar berakhir memukul sumber cahaya yang memberikan kontribusi pada kaustik, dan sisanya dari sinarhanya dibuang sebagai hipotesis palsu.http://www.tar.hu/gamealgorithms/ch20lev1sec5.html (3 dari 5) 2/9/2009 18:13:46http://www.tar.hu/gamealgorithms/ch20lev1sec5.htmlMetode Monte Carlo yang agak lebih cepat dari biasa maju ray tracing: Mereka mempersempit jumlahsinar hanya beberapa juta. Namun jumlah sampel masih membuat mereka terlalu lambat untuk penggunaan real-time. Kita bisa,Namun, menyederhanakan mundur Monte Carlo ray tracing ide untuk mencapai hasil yang diinginkan. Kami membuat beberapaasumsi agresif pada kandidat yang baik untuk caustic, dan dengan demikian menghitung hanya subset dari tibasinar. Secara khusus, kita menghitung satu sinar per pixel. Dengan demikian, metode ini memiliki biaya komputasi yang sangat rendah, danmenghasilkan sesuatu yang sangat mirip tampilan dan perilaku kaustik, meskipun itu benar-benartidak benar dari sudut pandang fisik.Untuk mulai dengan, kita menghitung caustic pada siang hari di khatulistiwa. Ini berarti matahari tepat di atas kita. Untukdemi algoritma kita, kita perlu menghitung sudut langit ditutupi oleh disk berjemur. Matahariantara 147 dan 152 juta kilometer dari Bumi tergantung pada waktu tahun, dan yangdiameter 1,42 juta kilometer. Setengah halaman aljabar dan trigonometri menghasilkan sudut untuk disk mataharidari 0,53 °.Asumsi kedua adalah bahwa dasar laut terletak pada kedalaman konstan. Jangan lupa bahwatransparansi air antara 77 dan 80 persen per meter linear. Ini berarti 20-27 persencahaya insiden per meter diserap oleh media (pemanasan itu), memberikan visibilitas keseluruhan berkisar antara15 dan 20 meter. Logikanya, ini berarti caustic akan terbentuk dengan mudah bila sinar cahaya perjalanan terpendekjarak dari saat mereka masuk ke air sampai saat mereka memukul dasar laut. Dengan demikian, akan causticmenjadi maksimal untuk sinar vertikal dan tidak akan menjadi seperti terlihat untuk sinar memasuki air ke samping. Ini merupakanasumsi agresif tetapi merupakan kunci keberhasilan algoritma. Perhatikan, sebagai bukti sederhana, bahwa causticsangat populer di daerah tropis, pantai berpasir. Ini biasanya dekat dengan khatulistiwa dan memangsangat dangkal. Jadi sepertinya kita sedang menuju ke arah yang benar.Algoritma kami bekerja sebagai berikut: Kita mulai di dasar laut, tepat setelah kami telah dicat tanahpesawat. Kemudian, kedua, aditif dicampur lulus digunakan untuk membuat kaustik di atas itu. Untuk melakukannya, kitamembuat mesh dengan rincian yang sama seperti mesh gelombang dan satu yang akan diwarnai per-titik denganNilai kaustik: nol berarti tidak ada pencahayaan dan satu berarti seberkas cahaya yang sangat terfokus hits dasar laut. Untukmembangun pencahayaan ini, mundur ray tracing digunakan. Untuk setiap titik sudut mesh, kita memproyeksikannya secara vertikalsampai kita mencapai titik gelombang terletak tepat di atasnya. Kemudian, kita menghitung normal gelombang pada saat ituTitik menggunakan perbedaan terbatas. Dengan vektor dan normal, dan menggunakan Hukum Snell (ingat IOR untukair 1,33333), kita dapat membuat sinar sekunder yang perjalanan dari gelombang ke udara. Sekarang, semua kita haruslakukan adalah memeriksa sinar matahari benar-benar memukul setelah meninggalkan air. Untuk melakukannya, kita menghitung sudutantara ray dan sinar vertikal menggunakan dot product. Kita tahu matahari adalah 0,53 ° di seluruh, tetapi halo yang dapatdianggap sebagai sumber cahaya sekunder, hampir setiap hari meliputi busur 10 kali lebih besar. Kemudian, kita menggunakansudut indeks peta tekstur, yang mengkode luminositas dari kaustik tergantung pada sudut (lihatGambar 20.9).Gambar 20.9. Sebuah peta tekstur digunakan untuk mengikat sudut ray untuk luminositas.http://www.tar.hu/gamealgorithms/ch20lev1sec5.html (4 dari 5) 2/9/2009 18:13:46http://www.tar.hu/gamealgorithms/ch20lev1sec5.htmlSebagai rekap, teknik saya telah terkena pada dasarnya mengubah masalah perhitungan kaustik kepemetaan lingkungan, menggunakan fungsi generator gelombang untuk menghitung koordinat tekstur. Untungnya,hasil (lihat Gambar 20.10) yang sangat baik.Gambar 20.10. Kiri: visi bingkai Wire, menunjukkan sampel pada bagian bawahlaut. Kanan: pandangan padat, menunjukkan pola interferensi yang khas ditemukan dicaustic.Teknik ini juga dapat diimplementasikan menggunakan pemrograman grafis klasik. Tapi itu dirancang dari harisatu harus dikodekan menggunakan pixel shader untuk meningkatkan efisiensi. Untuk melakukannya, kita akan menghitung fungsi gelombangdan 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 dariNVIDIA dan aku, dan tersedia di situs web Gamasutra. "http://www.tar.hu/gamealgorithms/ch20lev1sec5.html (5 dari 5) 2/9/2009 18:13:46http://www.tar.hu/gamealgorithms/ch20lev1sec6.htmlDalam PenutupSetelah membaca bab ini, Anda mungkin berakhir dengan kesan palsu bahwa Anda telah menguasai alamrender sepenuhnya. Jika hal ini terjadi, saya sarankan Anda menutup buku, berjalan-jalan, dan kemudian kembali kemembaca Anda ketika Anda selesai. Pergilah ke padang rumput, sungai, atau taman dan melihat-lihat. Anda akansegera menemukan bagaimana kompleksitas alam masih jauh dari yang dijinakkan oleh programmer grafis, dan beberapa keraguanitu pernah akan dikuasai. Mengingat kompleksitas fraktal, alam akan selalu membutuhkan lebih banyak sumber daya dan lebihterlibat algoritma, efektif tersisa salah satu tantangan utama bagi programmer untuk tahun yang akan datang.Bab ini, bersama dengan referensi yang diberikan dalam Lampiran E, baru saja menggores permukaan dari apa yangtentu akan menjadi subjek yang luas dalam pemrograman grafis. Semakin akrab Anda menjadi denganmata pelajaran ini, lebih kompetitif Anda akan.


0 komentar:

Posting Komentar