Posts Tagged ‘voxel’

Akhir- akhir ini teknologi Rendering Ray Tracing semakin sering terdengar dalam berbagai pemberitaan media massa. Teknologi yang diproyeksikan sebagai pengganti teknologi rendering polygon dengan triangle -disebut juga rasterization seperti pada game konvensional saat ini -juga mendapatkan Dukungan penuh dari NVIDIA dengan platform CUDA dan Intel dengan Larrabeenya. Teknologi Ray tracing sendiri sebenarnya bukan sepenuhnya hal baru bagi kita yang senantiasa mengikuti perkembagnan teknologi komputer dan 3d rendering, bahkan movie sekelas Lord Of The ring sendiri telah menerapkan Ray Tracing untuk merender berbagai spesial efek dalam filmnya agar tampak lebih real.

Karena itulah sebenarnya tidak diperlukan hardware tersendiri untuk melakukan tenik Ray tracing, prosesor- prosesor lawas sendiri sudah mampu melakukan teknik rendering Ray tracing meskipun harus diparalelkan hingga puluhan prosesor untuk merender sebuah scene seperti yang ada dalam Film Lord Of The ring. Karena itu beberapa waktu yang lalu karena terbatasnya power sebuah prosesor Perkembangan teknologi Ray Tracing sedikit terhambat, namun akhir akhir ini dengan semakin berkembang nya teknologi prosesor selain x86, seperti stream prosesor pada GPU terkini dan x86 khusus seperti pada Intel Larabee maka teknologi ini kembali terangkat ke permukaan .

Meski demikian Ray Tracing masih mengalami sedikit masalah untuk diterapkan pada aplikasi real time seperti game , hal ini ditunjukkan dengan masih kecilnya frame rate game Enemy Territory yang dirender dengan Ray Tracing pada demo Larrabee milik Intel. Hal ini didukung juga oleh kebanyakan developer game termasuk john Carmack (kreator game Doom dari id software) , seperti yang disamopaikannya pada situs PC Perspective yang dimuat situs Toms Hardware. Berikut kutipannya:
“ Saya Pikir ray tracing dalam pemikiran klasik hanyalah sebuah proses menyisipkan rays (sinar) pada bangun geometry konvensional semacam triangle atau bentuk bangun primitif lainnya, saya tidak terlalu yakin bahwa hal ini akan mengambil alih tugas render utama secara keseluruhan seperti yang selama ini diusahakan oleh intel. Secara performa terdapat banyak sekali keuntungan yang bisa didapatkan dalam proses rasterization konvensional, selain itu apabila dilakukan dengan benar rasterization akan jauh lebih efisien dalam menghindari banyaknya referensi geometri yang diperlukan dengan teknik occlusion queries dan conditional renders . Rasterization akan jauh lebih efisien berapapun jumlah transistor (pada prosesor) yang ada apabila dihadapkan secara langsung dengan ray tracing”.

Jika John Carmack sendiri tidak terlalu tertarik dengan Ray Tracing, bukan berarti beliau adlah seseorang yang kolot dan membiarkan grafik raster tidak memiliki pesaing. John ternyata memiliki pemikiran sendiri tentang masa depan rendering real time yang melibatkan voxel ray casting semenjak beberapa tahun yang lalu. Berikut ini beberapa detail mengenai voxel ray casting yang diungkapkan oleh Jon Olick (dari id software juga) melalui presentasinya pada ajang SIGGRAPH seperti yang dimuat juga oleh situs Toms Hardware.

(untuk mengenal teknologi Ray Tracing lebih jauh dan detail silakan baca artikel pada majalah Game Buzz ed. 4 yang bisa didownload gratis di gamexeon)

 

Sejarah Voxel Ray Casting
John Carmack telah memulai eksperimen tentang voxel semenjak 10 tahun yang lalu dengan kode nama Trinity. Kebanyakan orang mengira eksperimen ini adalah engine 3D baru dari id untuk Quake 3, akan tetapi seperti yang kita ketahui Quake 3 tetap menggunkana engine konvensional seperti yang diungkapkan Carmack sendiri dalam catataanya pada tahun 1998. M eski eksperimen ini bisa dikatakan terhenti namun dalam catatan tersebut tercantum pula beberaapa eksperimen awal yang melibatkan voxel octrees. Beliau hampir berhasil pula menampilkan voxel secara software meskipun dalam resolusi yang sangat kecil meskipun dalam kasus ini tidak sebanding dengan keuntungan menampilakan poligon secara hardware.

Sesaat setelah rilis Quake 3 Beliau kemudian melakukan pula analisis mengenai pola akses memori dan samapai pada kesimpulam voxel ray tracer bisa dilakukan pada hardware dengan kebutuhan yang jauh lebih kecil dibandingkan kebutuhan hardware untuk menampilkan poligon (dengan rasterization) secara hardware pada saat itu dengan penampilan visual yang jauh lebih menarik pada banyak kasus.

Voxel sendiri memulai debutnya pada game outcast yang muncul pada Juli 1999 dan berhasil membuat kagum banyak orang pada masa itu. Hal ini bukan hanya karena kualitasnya yang luar biasa namun juga dikarenakan ketidak laziman engine 3d nya di saat kartu grafis 3d menjadi barang wajib bagi PC para gamer.]

OUTCAST
OUTCAST

Outcast didasarkan pada engine rendering secara software sepenuhnya sehingga menjadikannya sangat rakus daya komputasi prosesor. Untuk memainkannya pada resolusi maksimal (512 x 384) diperlukan sebuah prosesor kelas atas dan bukannya sebuah kartu grafik 3d . Bukan hanya hal ini saja yang membuat engine ini unik namun penggunaan voxel sendiri juga menjadikan proses rendering outcast menjadi berbeda

Akan tetapi meski demikian kita harus tetap berpandangan bahwa meskipun Outcast (dengan novalogic sebagai developer) telah menjadi penentu standar rendering berdasarkan voxel, yang terjadi sebenarnya game ini hanyalah menggunakan bentuk sederhana untuk keseluruhan model termasuk landscapenya. Seluruh model dan karakter hanya berupa model polygon standar . Lansekapnya berdasarkan pada sebuah map dengan kedalaman tunggal yang artinya hanya ada satu kedalaman yang mungkin untuk masing- masing titik pada lingkungan dengan mengabaikan keberadaan sudut pada struktur tertentu.

Batasan tersebut tidak menjadi masalah besar dikarenakan struktur bersudut sangatlah jarang akibat adanya keterbatasan secara fisika (game pada jaman ini masih mengabaikan physic simulation). Tampilan lansekapnya sendiri sangat sederhana dan dihasilkankan per-kolom. Untuk tiap kolom, sebuah nilai sumbu Y maksimum disimpan (dalam Y-buffer) . Pixel pada tiap kolom yang tampak digambar mulai dari bawah layar apabila nilai Y lebih besar dari Ymaksimum (yang disimpan dalam Y buffer)Metode rendering ini menyebabkan proses pemindahan bagian tak tampak dari layar menjadi mudah dan efisien.

Tentang Voxel, octrees dan ray casting
Voxel adalah singkatan dari volume dan pixel, jadi sebuah voxel adalah elemen dasar yang memiliki ruang (pixel hanya titik) . Bayang kan sebuah kotak lego yang bila digabungkan akan membentuk berbagai bangun baru. Voxel memiliki prinsip serupa dengan kotak mainan Lego yaitu berupa sebuah kotak utuh dan padat sementara pada polygon triangle melambangkan kulit bangun di luarnya saja.

Voxel sendiri pada umumnya dipakai pada bidang medis, bentuk aslinya sangat sesuai untuk penggambaran bentuk ruang dari gambar bagian perbagian seperti yang dihasilkan MRI. Meskipun begitu menggambarkan ruang dengan voxel bukanlah pendekatan yang paling sempurna karena dunia disekitar kita tidak terbuat dari sekumpulan kotak- kotak kecil. Contohnya ditunjukkan pada gambaran donat menggunakan voxel di bawah ini:

Meskipun begitu kekurangan ini bisa dimaklumi apabila digunakan pada game, karena triangle pada sebuah bangun polygon pada saat ini pun juga hanya merupakan pendekatan dari bangun ruang sebenarnya yang bisa diperhalus dengan memperbanyak lebih banyak triangle. Pada voxel, penghalusan ini bisa juga dilakukan dengan penggunaan voxel yang berukuran lebih kecil, yang berakibat pada kebutuhan memori yang lebih besar.
Apabila dihitung, sebuah kotak yang terdiri dari 1024 voxel tiap bidang (bidang X,Y,Z) membutuhkan memori 1024 x 1024 x 1024 * 4 byte dalam nilai red,green,blue,dan alpha (RGBA) yang setara dengan memory sebesar 4 GB. Jawaban dari masalah besarnya kebutuhan memori ini adalah penggunaan Octrees atau octal trees.

Tree (pohon atau percabangan) sendiri adalah struktur data yang sering digunakan pada ilmu komputer yang dimungkinkan untuk ditata secara hirarkis(berdasarkan urutaN TERTENTU). Kita menggunakannya setiap hari tanpa kita sadari pada saat bekerja dengan file komputer kita (misal di win exploreer).

Pada struktur percabangan sistem file terdapat hard disk (sebagai akar/batang ) yang terdiri atas beberapa cabang(folder) yang masing masing memiliki ranting sendiri- sendiri (subfolder ) seterusnya hingga mencapai daun(file).

Sebuah batang pohon bisa memiliki jumlah cabang berbeda- beda. Contohnya jika hanya ada 2 cabang bisa disebut pohon biner( binary tree) , empat cabang disebut quadtree, dan akhirnya 8 cabang disebu t octal tree(octree).

Octree mengijinkan penggunaan ruang memori lebih efisien dengan memakai resolusi yang hanya dibutuhkan saja. Perhatikan penggambaran teknik tree secara 2 dimensi berikut :

Gambar tersebut menunjukkan perkiraan gambaran sebuah lingkaran dengan resolusi 12 x 12, dapat kita lihat ter dapat beberapa sel yang kosong dan tidak terpakai. Dengan menggunakan quadtree didapatkan :

Membangun sebuah quadtree ada bidang 2d dapat dilakukan dengan membagi gambar awal dengan dua garis yang menghasilkan 4 kuadran (per- empat-an) bidang . Jika sebuah kuadran penuh atau kosong, proses akan berhenti sampai di sini. Jika kuadran hanya terisi sebagian , maka kuadran tersebut akan dibagi dua lagi dan demikian seterusnya. Proses baru akan berhenti jika keseluruhan kuadran telah homogen ( semuanya kosong atau semuanya terisi penuh ) atau hingga sampai pada kedalaman yang telah diinginkan. (pada contoh kita berhenti hingga kedalaman ¾ dengan masing- masing bidang terbagi 16 ). Dari contoh sederhana ini dapat dilihat hasil akhir yang lebih mendekati bentuk lingkaran sempurna dengan penggunaan lebih sedikit data (97 titik atau sel dibanding dengan 122 pada awal mulanya). Sebuah octree adalah perluasan dari teknik quadtree ini dalam bidang 3 dimensi, dimana tiap octree hanya perlu menjaga “sambungan/titik hubung” pada tiap sub bagian hasil pembagian yang dilakukan sebelumnya, sehingga pada praktiknya tiap titik hubung haruslah mengandung 8 pointer sebagai tambahan dari informasi warna RGBA dan bangun voxel dasar.


Octrees

Terdapat beberapa cara untuk menampilkan voxel pada layar, salah satunya yang dipilih id Software adalah teknik ray casting. Seperti ray tracing, ray casting adalah proses memancarkan atau menyorotkan berkas sinar (ray) pada tiap pixel. Perbedaan keduanya terletak pada saat terdapat persinggungan objek, algoritma ray casting akan berhenti dan tidak melakukan perhitungan lagi. Akibatnya raycasting jauh lebih cepat dari ray tracing karena tidak akan terdapat masalah akses memori pada ray kedua seperti yang terjadi pada ray tracing . Keuntungan lain adalah perhitungan persinggungan ray dengan voxel jauh lebih cepat daripada triangles, selain itu tidak diperlukan pula struktur data tambahan untuk mempecepat perhitungan persinggungan ini. Octree telah mencakup data (tekstur & geometri) dan struktur percepatan sekaligus.

Keunggulan rendering voxel octree
Keunggulan utama octree terletak pada kemampuan untuk memecahkan masalah LOD (level of detail) pada tekstur dan geometry sekligus hanya dengan penggunaan sebuah algoritma tunggal. Hal ini dikarenakan pada tiap octree telah terkandung informasi warna (RGBA) dan geometri (voxel) sekaligus. Sehingga jika sebelumnya (pada polygon triangle) tekstur dan geometri ditangani secara terpisah sepenuhnya, pada octree keudanya terangkum pada satu system yaitu pengaturan LOD octree itu sendiri.

Prinsip kerja yang digunakan sendiri merupakan perluasan dari prinsip kerja teknik mipmapping yang dipakai pada tekstur. Tujuan dari mipmapping adalah mencoba mengubah ukuran texel (texture element) menjadi sedekat mungkin dengan ukuran sebuah pixel. Untuk itu beberapa macam ukuran resolusi tekstur dihitung ulang dahulu kemudian disimpan ,hardware akan beradaptasi dengan pilihan ukuran yang ada untuk disesuaikan dengan tampilan pixel pada layar.

Hal semacam ini dipakai juga oleh voxel octree dengan pilihan tingkat detail yang lebih dinamis (tanpa perlu disimpan/ fixed terlebih dahulu) Segera setelah ukuran sebuah voxel lebih kecil dari ukuran pixel, rays yang memotong octree dihentikan prosesnya sehingga didapatkan ukuran tekstur pada voxel yang sesuai ukuran pixel.

Yang perlu dilakukan sebelumnya hanyalah menyimpan inforasi rata- rata yang terkandung dalam tiap sub bagian octree pada tiap titik hubung sehingga akan didapatkan cara paling sederhana dalam mengatur LOD. Mekanisme ini paling sesuai untuk diterapkan pada system yang menerapkan streaming rendering, misalnya pada sistem Mega Texture milik id software yang diapakai pada engine game RAGE (belum rilis).Hanya saja porsi octree yang diperlukan akan dismpan dalam memori video, sedangkan octree yang lain disimpan dalam memory utama guna mempercepat proses akses ke depannya (pada rasterization geometri/ triangles disimpan keseluruhan pada memori utama)

Sebagai hasilnya akan diperoleh jumlah geometri (dan tekstur) yang nyaris tak berhingga dengan detail octree sesuai dengan yang kita inginkan sementara jumlah memori utama dan memori video yang terpakai relatif konstan. Batasan yang ada hanya terleatak pada kemampuan artis menciptakan octree dan batasan pada media penyimpanan generasi selanjutnya.

Batasan pada tekstur sendiri memungkinkan untuk diatasi, misalnya dengan penggunaan sistem tekstur visual seperti megatexture yang kelak akan terdapat pada kebanyakan engine 3d seperti idtech 5 dan cryengine 3 tahun depan. Batasan pada geometri juga dapat diatasi dengan beberapa solusi yang telah mengemuka. Misalnya yang paling sederhana adalah penggunaan beberapa versi bangun geometri yang berbeda resolusi dan memilih salah satu yagn paling tepat untuk ditampilkan di layar sesuai dengan jarak kamera dengan bangun tersebut. Meskipun demikian masih terdapatr artifak visual yang terjadi ketika berpindah LoD.

Beberapa usaha dilakukan untuk menghaluskan proses perpindahan LoD, salah satunya disebut progressive mesh. Dimana untuk tiap- tiap LoD dipisahkan menjadi dua grup vertices(titik sudut): parent vertices dan child vertices. Saat LoD berkurang, child vertices akan dirender mendekati parent vertices secara bertahap dan dihapus sepenuhnya saat mencapai nilai integer baru bersamaan dengan dihapusnya tepian yang menghubungkan child dengan parent vertices.

Teknik ini dapat bekerja dengan baik meskipun tidak sepenuhnya otomatis. Diperlukan input tambahan untuk menunjuk tepian mana yang harus dipertahankan( tidak dihapus).
Cara lain adalah dengan tesselation (fitur DX11) pada tingkatan bangun primitif orde tinggi(disebut patches) yang dipasangkan dengan teknik displacement mapping. Teknik yang terakhir disebut telah ada secara teori selama bertahun- tahun tanpa hasil nyata yang cukup memuaskan.

Namun berkat usaha AMD dan microsoft teknik ini telah berhasil terwujud dengan standar DX 11 dan hardware grafik terbaru saat ini. Meski demikian voxel octrees sendiri masih menjadi alternatif yang menggoda untuk dicoba diterapkan para developer game karena beberapa keunggulan seperti pemecahan masalah tekstur dan geometri dengan algoritma tunggal sehingga pemilihan LoD menjadi sangat mudah dan fleksibel untuk dilakukan. Lagipula mengevaluasi ukuran voxel pada layar jauh lebih sederhana dibanding pada triangle.

Kekurangan dan Batasan Voxel
Masalh utama membangun octree terletak pada besarnya daya komputasi yang dibutuhkan sehingga sangat tidak realistis untuk menghitung perubahan yang terjadi secara real time pada objek geometri dinamis. Proposal yang diajukan id software sendiri untuk mengatasi masalh ini adalah dengan menggunakan octree hanya untuk bangun geometri statis, sementara keseluruhan elemen dinamis pada layar akan ditampilan dengan teknik rasterization.

Harapan yang tersemat di benak para gamer pada saat mendengar voxel disebut adalah sebuah dunia yang interaktif, dinding yang bisa diledakkan dan kemudian melihat bentuk dinding yang berubah dengan bahan batu bata terlihat di dalamnya. Sayangnya setidaknya untuk saat ini semua hal tersebut masih menjadi impian kita semua, dinding abadi masih akan banyak dipakai hingga beberapa tahun ke depan.

Masalah lain adalah pada sistem streaming yang dipakai. Saat kita mendekati sebuah objek secara bertahap LoD akan diatur , pada saat ini sistem utama akan menangani pemanggilan data dari octree sebagai task background. Karena struktur data telah diatur sebelumnya (dengan tree/percabangan), proses pemanggilan data ini akan berjalan mengalir dengan lancar. Namun apakah yang terjadi jika kita melakukan teleport ke bagian lain dunia? Karena geometri yang berbeda, sistem streaming yang dipakai akan macet dan terjebak. Karena itu game developer harus berusaha sebisa mungkin mengghjindari terjadinya situasi seperti ini.

Masalah ini tidak hanya terjadi pada voxel octree, namun hampir keseluruhan sistem rendering secara streaming dimana prinsip kerja yang dipakai adalah variasi LoD secara kontinyu yang tidak akan mampu mengatasi perubahan mendadak. Pada saat ini maslah streaming ditemui pada tekstur saja (karena untuk geometri yang ada saat ini fixed /statis untuk masing- masing LoD). Melihat tekstur reslusi rendah selama 1 atau 2 detik memang menyebalkan , namun melihat octree resolusi rendah bisa jadi menyeramkan!!

Kerugian lain voxel adalah terjadinya pikselasi. Jika kita hanya menampilkan warna dari voxel yang terpotong oleh Rays, tepian kasar dari bentuk kubus (bentuk dasar voxel) akan terlihat jelas. . Untungnya masalah ini bisa diatasi dengan penggunaan trilinear filtering secara 3 dimensi.

Tantangan terakhir adalah jumlah memori untuk menyimpan keseluruhan objek dalam voxel yang luar biasa besar . Meskipun hal ini tidak akan mempengaruhi jumlah resource yang dibutuhkan saat eksekusi. Namun untuk bisa memanipulasi, menyimpan kemudian mendistribusikan struktur data semacam ini akan diperlukan teknik kompresi yang serius oleh id software.

Penutup
Rendering 3d secara real time semain menarik untuk diikuti pada tiap fase evolusinya. Banyak pendekatan lama dan baru bisa digunakan untuk memecahkan berbagai masalah yang muncul bersamaan dengan hadirnya GPU yang makin programmable.

Voxel octree ray casting adalah teknik yang menjanjikan untuk meningkatrkan kompleksitas geometri secara drastis di masa depan. Sayangnya saat ini voxel masih berada pada tingkat eksperimen dan masih banyak pertanyaan yang belum terjawab pada saat Jon Olick mendemostrasikannya di ajang SIGGRAPH.

Salah satunya adalah tools grafik editor yang bisa dipakai para artis. Olick mengharapkan sebuah evolusi dari sistem yang diapakai oleh MegaTexture yang mengijinkan para artis untuk menambahkan buffer demi menambah detail tekstur. Sistem semacam ini akan memodifikasi bentuk geometri secara langsung bersamaan dengan perubahan normal map. Namun saat ini semuanya masih berupa konsep saja dan menampilkan demo yang menarik masih menjadi bagian paling sulit. Apalagi hingga menjadi produk akhir yang cukup stabil dan efisien.

Sangat menarik untuk melihat model animasi menggunakan beberapa juta poligon (7 juta tepatnya) dengan frame rate 60 FPS pada hardware kartu grafis masa kini saat demo oleh jon Olick . Hasil awal ini sepenuhnya menjanjikan saat kita berpikir hardware macam apa yang dibutuhkan apakah saat teknologi ini keluar kelak. Melihat lamanya waktu yang dibutuhkan untuk membuat game saat ini serta peluncuran RAGE tahun depan , setidaknya dibutuhkan 3 atau 4 tahun lagi sebelum teknologi voxel ray casting bisa sepenuhnya menyentuh pasar..

Sumber : GAMEBUZZ ed. 4, Tomshardware