Minggu, 17 Juni 2012

Bab 20. Organik rendering (cont.)


Rumput
Kita telah melihat bagaimana Render pohon adalah masalah memberikan banyak detail untuk satu objek menggunakan geometri yang sangat sedikit. Render rumput adalah cerita yang sama sekali berbeda. Setiap rumput relatif sederhana dan dapat berkisar dari satu baris ke beberapa segitiga. Namun, kita harus membuat ribuan dari mereka untuk menyampaikan tampilan padang rumput rumput nyata. Disini kompleksitas tidak terletak pada objek tertentu tetapi dalam jumlah kita akan mencoba untuk mencapai. Tidak mengherankan, rumput metode rendering sangat berbeda dari algoritma pohon.

Kami akan mengeksplorasi serangkaian algoritma yang cocok untuk rumput. Beberapa dari mereka akan memiliki keterbatasan tertentu (tidak bisa menghidupkan rumput adalah salah satu yang populer). Hanya dengan mengetahui semua algoritma secara rinci akan Anda dapat memilih salah satu yang cocok untuk anda.

Layered Grass
GrassOne pendekatan berlapis untuk rumput rendering adalah untuk menghitung rumput melalui volume rendering. Ini adalah algoritma yang sangat murah yang menghasilkan hasil yang cukup baik. Idenya sederhana: Ambil pisau individu rumput. Pisau akan vertikal atau hampir vertikal, dan sehingga mempermudah dengan garis vertikal lurus cukup akurat. Tapi berapa banyak bilah rumput yang ada di sebuah padang rumput terbuka? Jumlahnya bisa mencapai ratusan ribu, dan kami jelas tidak akan melukis garis yang banyak. Biaya akan menjadi penghalang. Kita perlu cara alternatif untuk mengatasi masalah itu, sehingga kami dapat menjaga tingkat kompleksitas jelas sementara menjaga tingkat kompleksitas yang sebenarnya itu cukup rendah.

Di sinilah konsep volume rendering kicks in Sebagai ganti lukisan pisau individu, kami akan sampel volume yang ditempati oleh padang rumput keseluruhan, dan membuat pisau sebagai piksel pada tekstur. Untuk melakukannya, kita akan menggunakan elemen volume (voxel), yang akan menyandikan tata letak pisau rumput sebagai fungsi volume. Sekarang, karena kita menyederhanakan rumput dengan garis vertikal lurus, kita kehilangan informasi Y, dan kita bisa kompres voxel 3D kami hanya bitmap 2D, yang kita akan lapisan di Y untuk menyampaikan volume.

Jadi, algoritma kami semudah melukis bitmap yang sama di iris Y beberapa. Sekarang, bitmap adalah bagian kompleks. Untuk volume rendering, bitmap akan perlu untuk mengkodekan bagian XZ dari bilah-bilah rumput. Ini berarti bitmap RGBA, di mana area yang tercakup rumput yang dicat dengan alpha = 1, dan daerah yang tidak seharusnya memiliki pisau rumput yang dicat dengan alpha = 0. Hal ini sangat penting untuk ruang semua elemen rumput merata, jadi kita tidak bisa merasakan pola ubin di rumput.

Rendering cukup sederhana. Render bidang tanah pertama. Kemudian, membuat quad sama, menggeser bersama Y untuk setiap iterasi. Antara 5 dan 20 quads akan diperlukan untuk menyampaikan rasa kontinuitas vertikal. Sebagai aturan praktis, jumlah lapisan harus dapat dihubungkan ke lapangan kamera. Sebuah kamera yang sangat bernada melihat pisau dari atas, dan dengan demikian tidak banyak iterasi yang diperlukan. Sebuah kamera yang hampir sejajar dengan tanah, di sisi lain, akan membutuhkan jumlah yang jauh lebih tinggi dari iterasi untuk enerate ilusi pisau terus menerus. Lihatlah Gambar 20,6 untuk gambar jelas.
Gambar 20.6. Lapisan tekstur peta digunakan untuk membuat rumput dan menyampaikan paralaks.

Dengan demikian, metode ini membutuhkan waktu satu peta tekstur dan quads sebanyak yang diperlukan untuk menggambarkan pisau. Kita bahkan dapat menambahkan animasi dengan mengubah tekstur rumput koordinat sedikit. Bahkan, metode ini baru-baru ini kode untuk berbagai permainan dan platform. Rumput tidak bisa melihat dekat, tapi ilusi ini cukup meyakinkan, dan biaya yang pasti plus.

Selain itu, metode ini dapat diimplementasikan dalam quad tunggal dengan menggunakan pixel shader. Di sini kita akan menghitung sudut dari pemain untuk Texel masing-masing dan sampel volume untuk menghasilkan peta tekstur. Dengan cara ini kita hanya akan menggunakan satu quad, yang akan bekerja rincian proyeksi internal. Perhatikan, bagaimanapun, bahwa pendekatan shader tidak selalu ide yang baik. Jika kita melukis quads beberapa menggunakan pendekatan pertama, kita dapat memiliki elemen setengah tenggelam di rumput realistis, seperti binatang di tengah rumput tinggi atau berdiri sepak bola di tengah lapangan. Metode shader, dengan menggunakan hanya satu quad untuk menyingkat informasi dari quads yang berbeda, menghilangkan kemungkinan ini.

Distribusi statistik Algoritma
Kita sekarang akan membahas algoritma distribusi statistik, yang mencoba untuk menyampaikan kepadatan padang rumput penuh secara real time. Karena render semua rumput hanya mungkin, metode ini berfokus pada radius sekitar player dan alfa-rumput memudar seiring dengan bertambahnya jarak sehingga tidak ada pop di terjadi. Jika warna rumput memadukan baik dengan daerah ini, mata yang terkecoh, dan penampil berasumsi bahwa padang rumput seluruh efektif ditutupi oleh rumput. Menggunakan trik sederhana ini memastikan bahwa kita melukis sejumlah konstan segitiga untuk rumput, yang merupakan kunci untuk algoritma.

Geometri dicat menggunakan primitif segiempat; dan quad masing-masing mewakili beberapa bilah rumput yang dikelompokkan bersama-sama. Hal ini membantu mengurangi dampak segitiga, karena rumput pasti akan membutuhkan banyak geometri. Dengan teknik ini, penting untuk menggunakan metode rendering yang baik (seperti Rentang Array Vertex [VAR] di OpenGL atau DrawPrimitive dalam DirectX). Sayangnya, rumput tidak terdiri dari strip primitif, dan pengindeksan tidak akan membantu secara signifikan, sehingga VAR dari quads tampak seperti pilihan yang baik.

Pada titik ini, bagian statistik dari algoritma mulai bekerja untuk memastikan bahwa pola-pola terlihat tidak diinginkan dipecah sebanyak mungkin. Penonton tidak harus melihat bagaimana pisau dikelompokkan bersama, juga tidak melihat bahwa landscape tidak penuh dengan rumput. Untuk mencapai hal ini, pilihan terbaik adalah dengan menggunakan distribusi Poisson spasial, yang mendistribusikan serangkaian sampel pada bidang tanah sehingga jarak XZ antara dua sampel yang dipilih secara acak tidak pernah lebih kecil dari ambang batas tertentu. Distribusi Poisson yang populer dalam literatur komputer grafis. Mereka digunakan untuk wilayah sampel dalam ray tracing stokastik untuk efek yang sama.

Menerapkan distribusi Poisson tidak sederhana. Jika kita membutuhkan hasil 100 persen akurat, metode yang perlu digunakan disebut "anak panah melempar," yaitu, berturut-turut menambahkan elemen ke distribusi spasial secara acak, dan jika elemen baru melanggar definisi Poisson distribusi (dan tentunya memiliki lain sederhana lebih dekat dari ambang batas yang diinginkan), menghilangkannya. Dengan mengulangi rutinitas ini sampai kepadatan yang diinginkan tercapai, kita akan memperoleh distribusi Poisson sempurna. Tapi untuk permukaan besar proses ini dapat mengambil lama untuk menyelesaikan, sehingga metode-dekat Poisson digunakan: Bagilah permukaan dalam kotak persegi, tempat salah satu unsur dalam setiap node, dan menerapkan gerakan acak kecil untuk itu di kedua arah X dan Z . Gerakan kecil ini disebut jitter dan memastikan bahwa tidak ada pola yang terlihat terjadi. Jika jitter terbatas (misalnya, untuk setengah ukuran grid), kita masih mematuhi distribusi Poisson di sebagian kecil dari biaya. Untuk penciptaan rumput, metode ini (lihat Gambar 20.7) akan digunakan.
Gambar 20.7. Statistik distribusi pisau rumput. Kiri atas: Kotak. Kanan atas: Grid
jittered untuk membuat distribusi Poisson. Kiri bawah: Quads ditambahkan. Kanan bawah:
Hasil akhir di mana semua pola yang teratur telah dieliminasi.

Setelah distribusi Poisson telah dievaluasi, jitter rotasi harus diperkenalkan. Menjaga semua segmen blade selaras tentu tidak membantu menyampaikan rasa kekacauan dan kealamian. Dengan demikian, setiap segiempat akan diputar sekitar sumbu (vertikal) Y. Berikut rotasi acak polos akan melakukan pekerjaan dengan sempurna, yang memungkinkan padang rumput kacau muncul.

Sebuah langkah akhir yang lebih membantu mengurangi artefak visual menambahkan faktor skala ke quads individu, sehingga beberapa quads adalah lebih tinggi daripada yang lain. Sebuah penyimpangan 30 persen atau lebih bekerja dengan baik.

Sebuah catatan pada rendering: Seperti Anda mungkin telah ditemukan, ini adalah metode mengisi-rate intensif karena quads banyak diminta untuk menyampaikan kepadatan sebuah padang rumput yang nyata. Dengan demikian, algoritma Render harus dipilih secara teliti. Di bawah OpenGL, menggunakan Daftar Display adalah bukan ide yang baik karena kita perlu menghidupkan bilah dan yang membutuhkan mengirimkan kembali daftar. Sebuah langkah baik adalah dengan menggunakan server-side array vertex, yang dapat diperbarui jika diperlukan. Sebuah strategi yang sangat baik adalah untuk menghitung istribution Poisson pada waktu buka dan membuat sebuah array dengan semua simpul quad, koordinat tekstur, dan sebagainya. Array akan mewakili sebuah patch persegi rumput, katakanlah, 10x10 meter. Kemudian, Anda hanya menghidupkan dua simpul atas quad masing-masing melalui geser dan mengirim patch ke hardware grafis dengan menggunakan server-side array. Hal ini memungkinkan Anda untuk mengirim array yang sama beberapa kali dengan PushMatrix-Translate-PopMatrix, sehingga dapat mengisi seluruh Lembah rumput dengan mengulangi pola 10 x10. Manfaatnya jelas: Anda hanya akan menghidupkan 10 meter x10 rumput dan menggunakan sampel yang untuk menutupi banyak mil.

http://www.tar.hu/gamealgorithms/ch20lev1sec3.html (2 of 4)2/9/2009 6:13:30 PM
Core Techniques and Algorithms in Game Programming
 

Bab 20. organik Rendering

Pohon



Baru-baru ini render pohon digunakan untuk game computer. Simulator golf merupakan yang pertama mencoba untuk menyampaikan tampilan pohon realistis (biasanya dengan mensimulasikan mereka dengan papan reklame). Tapi banyak game di skenario saat ini dilakukan luar ruangan, jadi pohon yang semakin populer.

Pohon dapat diberikan dalam berbagai cara, dan keputusan tentang cara untuk melakukan ini tergantung pada prioritas dari pohon-pohon di pipa rendering. Ada beberapa pendekatan yang yang berbeda, namun masing-masing menawarkan hubungan biaya-manfaat berbeda, sehingga Anda perlu untuk menganalisis siklus jam berapa atau segitiga yang akan Anda mengabdikan untuk skenario Anda. Dalam beberapa permainan aksi, pohon bisa menjadi latar belakang terhadap gameplay yang terjadi, dan dengan demikian metode, sederhana murah akan digunakan. Dalam skenario lain, seperti role-playing game (RPG), pohon adalah bagian dari atmosfer, dan energi sehingga lebih akan dikhususkan untuk menggambarkan mereka secara realistis.

Saya akan membahas metode rendering yang berbeda secara rincidengan menekankan karakteristik kunci (memori tapak, penggunaan CPU, segitiga, dan seterusnya) sehingga Anda dapat membuat keputusan untuk permainan Anda.

Billboard
Sebuah billboard adalah quad layar-blok yang digunakan untuk menggantikan obyek, kompleks jauh dengan gambar resolusi tinggi. Sebagai pemirsa bergerak di sekitar, papan iklan juga berputar, sehingga selalu menghadap ke arah Anda. Billboard sangat bagus untuk pohon yang jauh karena mereka memungkinkan Anda untuk mewakili visual hutan lebat hanya dengan beberapa segitiga.

Seperti yang Anda telah lihat, menyelaraskan papan reklame dengan layar ini relatif mudah. Yang harus Anda lakukan adalah menghitung dunia-ruang vektor, yang bila diproyeksikan, menghasilkan layar-blok vektor, dan kemudian menggunakannya untuk merender primitif. Perhitungan ini dengan mudah dapat dibuat dari pemodelan dan matriks proyeksi dalam API pilihan Anda atau langsung dengan menggabungkan posisi pemain dan sudut rotasi dengan beberapa rumus trigonometri.

Jika Anda memutuskan untuk membuat pohon billboard, Anda harus menyadari beberapa teknik yang mungkin bisa membantu untuk meningkatkan realisme hasilnya. Coba gunakan sebagai tekstur yang berbeda sebanyak yang Anda bisa, sehingga pemandangannya terlihat variatif dan tidak pengulangan dari pohon yang sama. Jika memungkinkan, pak semua tekstur pohon yang ada di tekstur, tunggal yang besar, sehingga Anda dapat ncapsulate seluruh hutan dalam panggilan render tunggal, menghindari operasi tekstur yang terus memakan biaya swap.

Saran kedua: Jika Anda dapat membelinya, oleskan skewing layar-blok halus ditransformasi ke pohon yang untuk menyampaikan animasi. Pastikan pohon benar dihapuskan satu sama lain, sehingga hasil keseluruhan memberikan arti kekacauan, yang akan membantu realisme. Skewing dapat diimplementasikan dengan mudah di billboard. Hal ini hanya masalah meninggalkan simpul dasar tidak berubah sementara menerjemahkan simpul atas sepanjang garis didefinisikan oleh vektor layar-blok horisontal, seperti yang ditunjukkan pada Gambar 20.1.

Gambar 20.1. Billboarded pohon menggunakan transformasi condong untuk mensimulasikan animasi sederhana

Teknik lain perbaikan adalah untuk bermain dengan warna dan ukuran sedikit. Anda bisa juga mengganti tekstur warna sehingga mereka terlihat berbeda atau memodifikasi per titik warna 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 warna atas spektrum yang relatif luas. Juga, bermain dengan ukuran. Simpan satu skala mengubah untuk setiap pohon, sehingga Anda dapat menampilkan pohon ukuran yang berbeda. Variasi besar tidak benar-benar diperlukan. Membiarkan deviasi 10-15 persen dari ukuran "standar" adalah semua yang Anda perlu untuk lebih memecah pola lanscape dan dengan demikian membuat sebuah skenario meyakinkan.

Billboard yang besar jika Anda perlu membuat sebuah hutan pada platform sumber daya yang sangat terbatas. Dengan demikian, semua teknik dijelaskan sebelumnya diarahkan meningkatkan realisme hasil, karena teknik ini sangat terbatas. Sekarang mari kita telusuri beberapa keterbatasan dan item yang harus diperhatikan ketika menggunakan pohon billboarded.

Pertama dan terpenting, berhati-hatilah dengan jarak pandang. Seperti mungkin Anda ketahui, billboard tidak benar-benar dimaksudkan untuk dilihat dari dekat. Mereka adalah datar, terlihat pixelated, dan jika billboard dekat dengan tepi lateral layar, dapat melihat terdistorsi.

Alternatif terbaik untuk memperbaiki tampilan, datar pixelated adalah untuk memadukan representasi billboard yang jauh dengan versi dari dekat dibuat dengan menggunakan metode yang lebih baik. Gambar berbasis pohon render dapat digunakan serta benda-benda geometri nyata. Saya akan masuk ke lebih rinci tentang pendekatan ini ketika saya menjelajahi masing-masing teknik. Masalah distorsi agak sulit untuk ditangani. Billboard dirancang untuk selalu menghadapi kamera. Jadi, jika mereka dekat dengan penonton, gerakan kamera kecil akan menyiratkan pergeseran sudut besar, sehingga billboard akan berputar untuk mengakomodasi posisi pemain baru dan kadang-kadang bisa terlihat yang salah.

Dua solusi yang ada untuk memecahkan masalah ini. Opsi pertama adalah untuk menyelaraskan billboard tidak begitu mereka menghadapi kamera, tapi begitu mereka menghadapi pesawat pandang kamera (lihat Gambar 20.2). Dengan melakukan ini, billboard jauh akan tetap terlihat benar (masalah sudut dapat diabaikan di sini). Contoh lebih dekat tidak akan lagi memutar untuk menghadapi penonton, dan tampilan yang lebih realistis akan tercapai.

Gambar 20.2. Billboard selaras dengan kamera (kiri) versus billboard selaras
dengan bidang kamera pandang terhadap distorsi benar.


Alternatif kedua adalah untuk memungkinkan rotasi terbatas atas pesawat melihat kamera. Ini adalah solusi tengah-of-the-road yang memberikan hasil cukup baik. Di sini, billboard akan dihitung seolah-olah mereka menghadap kamera. Lalu, sudut antara representasi dan bidang pandang akan dihitung, dan hanya yang terbatas rotasi akan diizinkan. Dengan cara ini pohon dapat berorientasi ke kamera ketika mereka berada dipohon yang jauh, dan lebih dekat tidak menderita artefak rotasi ditemukan di billboard klasik.

Gambar Berbasis Metode
Traditional pemrogram grafis cenderung mempunyai kecenderungan untuk segitiga. Semua masalah harus diringkas menjadi penyerahan segitiga dan representasi (kadang-kadang cukup kompleks) geometris. Tapi bagaimana kalau kita lupa tentang itu sebentar? Bagaimana jika, bukannya terurai segala sesuatu ke segitiga, kami memilih sederhana berbeda? Gambar Berbasis Rendering (IBR) adalah denominator umum dari teknik yang berbeda yang tidak mencoba untuk membuat representasi geometris akurat dari objek, melainkan menyampaikan daya tarik visual mereka dengan menggunakan gambar. Dalam kasus ekstrim, sebuah billboard adalah metode IBR. Tapi banyak metode IBR lain ada, menghasilkan hasil yang lebih baik.

Render pohon sangat cocok untuk IBR. Pohon memiliki set geometris, data yang besar dengan pohon yang layak membutuhkan lebih dari 10.000 segitiga. IBR, di sisi lain, menempatkan penekanan pada tekstur, menjaga jumlah segitiga yang relatif rendah. Seperti yang akan Anda lihat sebentar, Anda dapat membuat pohon relatif keren dengan sekitar 20 segitiga menggunakan beberapa teknik IBR.

Teknik IBR. juga dapat ditingkatkan atau bawah untuk menawarkan berbagai tingkat detail. Kita akan melihat bagaimana mereka berbaur secara alami dengan billboard dan dapat dengan mudah diintegrasikan dengan representasi geometri juga.

Metode Paralel IBR.
Metode IBR. Paralel dirancang untuk secara akurat menggambarkan pohon yang merupakan bagian dari latar belakang. Keterbatasan adalah bahwa kita juga harus statis atau bergerak pada bidang sejajar dengan pohon. Oleh karena itu metode yang cocok untuk petualangan, permainan yang paling berkelahi, dan sebagainya.

Gagasan utama adalah untuk mewakili kompleksitas pohon nyata dengan array, hirarkis billboard berlapis. Kami akan menggunakan salah satu billboard untuk batang pohon, dan dari sana, serangkaian billboard dihubungkan oleh sendi, seperti tokoh dalam animasi rangka. Dengan demikian, kita dapat menghidupkan pohon seolah-olah itu ditiup oleh angin dengan menyebarkan gerakan melalui hirarki sekaligus menjaga jumlah segitiga yang sangat rendah. Sebuah model yang baik dari pohon dengan menggunakan metode ini dapat memakan waktu sekitar 25 quads untuk membuat, sehingga metode dapat digunakan untuk hutan lebat juga.

Kesulitan utama dari metode ini adalah mendapatkan data billboard sehingga pohon yang dihasilkan terlihat baik. Metode saya akan merekomendasikan membutuhkan paket rendering (3ds max, Maya, dan sebagainya) dan setiap dari pemodelan pohon plug-in yang tersedia untuk mereka. Anda mulai dengan model pohon dengan rincian sebanyak yang Anda inginkan. Ingatlah bahwa ini adalah metode IBR., detail jadi lebih tidak berarti kompleksitas lebih atau frame rate yang lebih rendah. Jadi, pastikan pohon itu serealistis mungkin.

Kemudian, Anda harus menggunakan pesawat kliping atau operasi Boolean untuk mengekstrak irisan geometri pohon di arah Z dan mengambil snapshot dari geometri itu. Batangnya umumnya dapat disimpan dalam satu lapisan, dan dengan demikian dedaunan pohon adalah di mana Anda harus menghabiskan sebagian besar waktu Anda. Pastikan cabang besar yang secara hirarki dibagi menjadi beberapa lapisan karena ini akan memungkinkan animasi lebih halus kemudian hari. Saya sarankan menyimpan lapisan ini menggunakan beberapa konvensi penamaan berarti karena rumit jika Anda tidak merekonstruksi pohon sesudahnya . Sebagai contoh, saya encode nama sebagai rangkaian huruf, yang mewakili disposisi hirarkis yang diberi lapisan seperti ditunjukkan pada Gambar 20.3.
Gambar 20.3. Penamaan untuk cabang hirarkis.


Langkah berikutnya melibatkan menyimpan "anchor point" untuk setiap gabungan antara dua lapisan. Titik jangkar adalah di mana kita akan menghubungkan potongan. Cabang A akan memutar sehubungan dengan tempat ini, jadi mendeteksi dengan benar adalah penting bagi realisme adegan lengkap. Anda harus menyimpan koordinat ini bersama di 2D, mengacu pada sistem koordinat elemen saat ini, seperti yang ditunjukkan pada Gambar 20.4.

Gambar 20.4. Orthogonal berbasis gambar pohon dengan quads ditampilkan.


Sehingga data set kami sekarang siap.

Untuk membuat itu, kita harus mengikuti pendekatan animasi rangka. Setiap billboard baru mewarisi gerakan dari induknya dan merambat ke bawah untuk anak-anak. Sebagai aturan praktis, node lebih dekat dengan akar umumnya lebih besar dan lebih berat. Dengan demikian, kisaran pergerakan berbagai cabang harus meningkatkan sedikit ketika kita menjauh dari akar pohon dan maju ke daun.

Menggabungkan semua langkah dalam proses ini menghasilkan pohon yang sangat realistis. Namun, perlu diketahui bahwa menciptakan kumpulan data merupakan proses yang membosankan, terutama jika Anda perlu untuk melakukannya untuk jenis pohon beberapa untuk menciptakan sebuah hutan. Dengan demikian, disarankan bahwa Anda kode beberapa plug-in untuk modeler pilihan, yang membuat hidup lebih mudah. Sebuah GUI intuitif sangat dapat menyederhanakan menciptakan set data ini metode ini.

Perpanjangan untuk mekanisme ini menggunakan IBR. paralel untuk daun, yang biasanya disimpan dalam cluster, dan geometri nyata (mungkin dengan perangkap progresif seperti dijelaskan pada Bab 21, "Teknik Prosedural") untuk bagasi. Dengan cara ini kita memiliki pohon kita dapat bergerak lebih dekat, dan jika daun dirancang untuk menggabungkan tidak hanya yaw tapi lapangan juga, kita bisa melihat dari bawah.

metode Orthogonal IBR.

Metode paralel dijelaskan pada bagian sebelumnya memungkinkan penciptaan pohon realistis untuk pemain statis atau gerakan terbatas. Mereka menyampaikan rasa besar paralaks dan volume, dan dapat animasi. The downside adalah bahwa kita tidak dapat melihat pohon itu dari dekat, atau mengitarinya realistis. Alasan keterbatasan ini terletak pada resolusi tekstur dan dalam kenyataan bahwa tekstur adalah layar-blok, sehingga tidak memungkin berputar di sekitar mereka.

Sebuah teknik baru harus digunakan untuk kasus-kasus yang membutuhkan lebih fleksibel. Seperti pada kasus sebelumnya, teknik ini agak mirip dengan tomografi aksial medis terkomputerisasi (CAT) scan, sehingga irisan pohon harus diambil.

Tapi kali ini kita akan memutar secara bebas dan, dengan beberapa keterbatasan, bahkan tinggal di bawah bayangan pohon kita.

Perbedaan utama adalah bahwa saat ini kami tidak akan melakukan irisan paralel tetapi akan sampel pohon baik di XY dan YZ pesawat, jadi kita mendapatkan serangkaian peta tekstur merata spasi. Kemudian, kita akan melukis mereka, merekonstruksi proporsi pohon seperti dalam volume rendering konvensional. Untuk mencegah penampil dari memperhatikan pola yang teratur, alpha-campuran akan digunakan untuk memastikan kelancaran transisi antara billboard selaras dalam kedua sumbu. Dengan cara ini kita dapat melihat pohon itu dari jauh saja dan mengitarinya. Semakin banyak billboard yang Anda gunakan, hasil yang lebih baik akan Anda raih. Namun, demo dengan sekitar 5-8 irisan di setiap arah (yang mengakibatkan sebuah pohon segitiga 20-32) terlihat cukup baik. Satu-satunya masalah dengan teknik ini adalah bahwa bagasi biasanya harus diatur secara tersendiri, karena sebagian besar waktu yang akan tampak salah.

Masalah lain adalah bahwa penampil tepat di bawah pohon seharusnya tidak diperbolehkan untuk mencari, atau ilusi kompleksitas akan hilang sepenuhnya. Gerakan lapangan sehingga harus dibatasi untuk teknik untuk mencapai hasil yang baik. Sebuah solusi untuk situasi ini tidak menggunakan dua sumbu tapi tiga sumbu: XY, YZ, dan XZ. Billboard XZ jarang akan digunakan kecuali untuk memecahkan kasus dimana penonton ditempatkan di bawah pohon. Kemudian, puncak pohon akan diiris dalam lapisan horizontal, dan rasa volume dan paralaks akan dipertahankan. Tapi solusi ini jarang diterapkan karena memerlukan peta tekstur bahkan lebih (IBR. metode tekstur semua kurang). Hal ini lebih sederhana untuk membatasi gerakan kamera sedikit.

Adapun pelaksanaan, metode ortogonal dimulai seperti metode paralel: dengan memodelkan sebuah pohon yang sangat resolusi tinggi menggunakan plug-in atau paket. Pohon lagi dapat sebagai kompleks yang Anda inginkan karena kita tidak akan menggunakan geometri sama sekali. Proses mengiris tidak terjadi dalam paket pemodelan tetapi dalam preprocessor atau di waktu buka dalam aplikasi utama. Algoritma ini adalah sebagai berikut:

menghitung kotak bounding dari pohon
pilih nomor yang benar dari irisan
for setiap slice di bidang XY
    menempatkan kamera dalam posisi tetap sepanjang sumbu Z
    menginisialisasi depan dan belakang pesawat kliping sehingga Anda membatasi Zbuffer ke daerah Anda
- ingin mengiris
    membuat frame, simpan ke disk (mungkin dibersihkan)
end for

for setiap slice di pesawat YZ
    menempatkan kamera dalam posisi tetap sepanjang sumbu X
    menginisialisasi depan dan belakang pesawat kliping sehingga Anda membatasi Zbuffer ke daerah Anda
- ingin mengiris
    membuat frame, simpan ke disk (mungkin dibersihkan)
end for

Perhatikan bahwa posisi kamera tidak benar-benar relevan, selama itu tetap masih lebih dari loop rendering. Satu-satunya perbedaan itu akan membuat adalah pada ukuran billboard, yang akan disesuaikan dengan ukuran tekstur yang cocok sesudahnya pula.

Sekarang Anda harus memiliki serangkaian gambar RGBA siap untuk rendering. Seperti yang Anda lihat, ini preprocess jauh lebih sederhana daripada yang diperlukan dalam metode paralel. Untuk rendering, Anda harus mulai dengan rendering semua gambar untuk serangkaian quads sumbu-sejajar, sehingga mereka merekonstruksi geometri pohon. Kemudian, Anda harus alfa-paduan quads tergantung pada sudut ke penampil. Secara khusus, quads menghadap penonton harus buram, dan sebagai quad pindah dari penonton, transparansi harus meningkat. Tuning kode ini sangat penting untuk ilusi volume, sehingga sedikit trial and error yang diperlukan. Setelah Anda mencapai ini, Anda akan melihat XY dan YZ billboard "bergiliran," sehingga XY quads fade out, quads YZ fade in untuk menciptakan tampilan yang terus menerus dari volume pohon. Kadang-kadang bagasi akan bekerja dengan baik dengan teknik ini, dan kadang-kadang Anda akan perlu menggunakan mesh reguler untuk bagasi karena akan terlihat berlapis. Anda dapat melihat hasil keseluruhan digambarkan dalam Gambar 20.5.

Gambar 20.5. Akhir tampilan pohon dengan titik jangkar dan peta tekstur ditampilkan.[1]



pohon IBR. Orthogonal terlihat sangat meyakinkan. Tapi mereka memiliki sisi negatifnya. Metode animasi hirarkis kami merancang untuk pohon paralel tidak layak di sini. Tekstur peta dipisahkan dengan jarak dan memindahkan mereka akan membuat pohon terlihat seperti itu melanggar. Sebuah perbaikan kecil dapat dicapai dengan geser simpul atas quads yang sangat halus, sehingga terlihat seperti puncak pohon secara keseluruhan bergerak. Kadang-kadang Anda bahkan akan dapat secara manual menambahkan beberapa quads tambahan untuk puncak pepohonan, sehingga Anda dapat memindahkan mereka sedikit dan meniru animasi. Namun, teknik ini bekerja terbaik dengan pohon statis.

Kelemahan lain untuk teknik ini khususnya (dan IBR. secara umum) adalah bahwa penggunaan tekstur hanya skyrockets. Sebuah pohon, kualitas rinci baik akan membutuhkan banyak irisan berkualitas baik, dan ini berarti banyak memori akan digunakan. Ambil contoh, sebuah pohon yang terbuat dari 8 +8 irisan; masing-masing disimpan sebagai bitmap 32-bit 256 x256 RGBA. Setiap bitmap akan memerlukan 256KB memori terkompresi untuk grand total 4MB untuk seluruh pohon. anda
mungkin berpendapat bahwa angka-angka ini tidak terlalu buruk karena kita tidak menggunakan
geometry apapun sebagai imbalan. Meskipun ini benar, 4MB per pohon membuat menggunakan teknik ini sangat keras dalam setiap permainan utama, dimana data set harus disimpan ke minimum. Berikut adalah beberapa saran untuk mengurangi kebutuhan tekstur:
-          Jangan menyimpan nilai alpha. Transparansi Simpan menggunakan warna hitam dan menghasilkan transparansi dengan hati-hati memilih fungsi pencampuran.
-           Gunakan tekstur palletized. Treetops relatif seragam dalam warna dan dengan demikian dapat berhasil dikodekan dalam 256 warna.
-           Gunakan irisan yang lebih sedikit dan lebih kecil tergantung pada melihat jarak Anda. Jika Anda hanya akan melihat pohon-pohon dari jauh, mungkin 4 x4, irisan 64x64 akan lebih dari cukup. A 4 x4, pohon 64x64 hanya membutuhkan 256KB (menggunakan peta RGBA).
-           Jika Anda menggabungkan teknik ini dengan resolusi tinggi, hingga model dekat, ukuran tekstur juga dapat dikurangi karena mereka tidak pernah akan terlihat dari dekat.
-           Buat pohon yang berbeda dengan peta tekstur yang sama. Mencerminkan peta secara vertikal maupun horizontal, gunakan sedikit perbedaan warna vertex, dan skala atas atau bawah untuk memastikan bahwa setiap peta tekstur menciptakan pohon sebanyak mungkin.

 http://www.tar.hu/gamealgorithms/ch19lev1sec5.html2/9/2009 6:12:32 PM
Core Techniques and Algorithms in Game Programming