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.
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
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
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
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:
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
Core Techniques and Algorithms in Game Programming
Tidak ada komentar:
Posting Komentar