Rancang Bangun Ray Tracing Pipeline Pada Platform CUDA
Reza Fuad R
1, Mochamad Hariadi
2Game Technology Research Group, Department of Electrical Engineering
Sepuluh Nopember Institute of Technology, Surabaya
email: [email protected]
1, [email protected]
2Abstrak
Ray tracing adalah algoritma penggambaran tiga
dimensi yang banyak digunakan untuk memproduksi gambar berkualitas foto realistik. Permasalahan terbesar pada algoritma ray tracing adalah kebutuhan daya kom-putasi yang sanga besar untuk melakukan penggambaran. Pada penelitian ini akan dilakukan perancangan sistem
ray tracingpada platform CUDA dengan menggunakan
struktur uniform grid. Platform CUDA merupakan stan-dar parallel processing pada GPU dan dapat digunakan untuk berbagai keperluan komputasi. Hasil penelitian berupa sistem yang dapat berjalan pada interaktif frame rate dengan teknik pencahayaan yang sederhana. Kata kunci: ray tracing, uniform grid, foto realis-tik, parallel processing
1 PENDAHULUAN
Penggambaran grafik tiga dimensi telah menjadi tu-lang punggung untuk beberapa bidang seperti film, ar-sitektur, grafik desain, dan game. Penggambaran grafik tiga dimensi terdiri dari dua jenis yaitu rasterzation dan PBRT (Physically Based Rendering Technique). Teknik rasterzation biasa digunakan pada game dan aplikasi yang bersifat real-time sedangkan PBRT lebih digunakan untuk aplikasi yang membutuhkan ketepatan penggam-baran sesuai dengan sifat-sifat cahaya yang ada di alam. Salah satu contoh aplikasi yang menggunakan PBRT adalah [5] yang menggunakan metode ray tracing untuk penggambaran film “Cars”.
Ray tracing merupakan suatu metode penggambaran
dengan cara mensimulasikan perjalanan partikel cahaya dari sumber cahaya ke mata penglihat. Pada perkemban-gannya metode ray tracing kemudian sedikit berubah dari pengertian asalnya yaitu mensimulasikan perjalanan par-tikel cahaya dari mata penglihat ke sumber cahaya. Pe-rubahan tersebut digunakan untuk mengefisienkan pro-ses perhitungan dan pengertian tersebut hanya digunakan
pada bidang keilmuan komputer grafik. Ray tracing
diperkenalkan pada makalah [13] dan masih dilakukan dengan bentuk-bentuk geometri yang sederhana seperti bidang datar dan bola.
Permasalahan utama pada metode ray tracing adalah kebutuhan komputasi yang sangat besar untuk dapat menggambar satu gambar dengan jumlah polygon yang banyak. Salah satu cara untuk mempercepat
penggam-Gambar 1: Struktur uniform grid
baran adalah dengan menggunakan accelerated structure yang membagi scene menjadi sebuah data spasial. Salah satu accelerated structure yang banyak digunakan adalah uniform grid. Gambar 1 merupakan gambaran struktur uniform gridyang digunakan. Uniform grid telah dikem-bangkan dan dipublikasikan pada makalah [2, 4, 6, 7, ?]. Secara sederhana struktur uniform grid dapat diumpa-makan sebagai sebuah bidang koordinat baru dengan skala satu pixelnya adalah sama dengan besar satu cell pada uniform grid.
2 DESAIN SISTEM
Perhitungan ray tracing dengan menggunakan struk-tur uniform grid memerlukan dua tahapan dasar yaitu konstruksi struktur uniform grid dan traversing
struk-tur uniform grid. Tahapan pertama diperlukan untuk
membentuk struktur uniform grid sesuai dengan keadaan
scene sedangkan tahapan kedua dilakukan pada saat
penggambaran yaitu bagaimana program secara selek-tif melakukan perhitungan perpotongan antara garis per-jalanan partikel cahaya dengan polygon yang ada pada scene.
2.1
Pembuatan Struktur Uniform Grid
Secara skematik, rancangan struktur data uniform gridyang digunakan terdapat pada gambar 2. Pada
gam-bar tersebut, pada kiri atas adalah struktur uniform grid yang berkolerasi dengan struktur triangle offset. Pada kiri bawah terdapat struktur triangle offset yang berkolerasi dengan struktur triangle data. Panah dan kolom
berwar-Gambar 2: Rancangan struktur data
na hijau merupakan kolerasi yang terbentuk antara satu struktur dengan struktur lainnya. Rancangan struktur da-ta tersebut mirip dengan rancangan struktur dada-ta yang di-gunakan pada makalah [6, 4] yang melakukan penelitian yang bertujuan sama yaitu penggambaran tiga dimensi dengan metode ray tracing dan struktur data uniform grid. Konstruksi struktur uniform grid mempunyai 6 proses yang dilakukan secara serial dan masing-masing proses berjalan secara paralel. Proses-proses tersebut adalah in-isialisasi, overlapped polygon, parallel prefix sum, perhi-tungan perpotongan cell pada uniform grid, paralel sort, dan scanning data. Proses dan metode yang digunakan pada proses konstruksi struktur uniform grid diambil dari makalah [3].
Inisialisasi
Proses inisialisasi adalah proses menentukan resolusi
uni-form grid yang digunakan dan memesan memori yang
dibutuhkan untuk menyimpan struktur uniform grid . Per-samaan 1 digunakan untuk menentukan resolusi uniform griddengan nilai variabel k = 5. Nilai k = 5 diambil dari percobaan pada makalah [12] yang menghasilkan nilai k= 5 adalah nilai k terbaik untuk digunakan pada pe-nentuan struktur uniform grid. Proses ini berjalan secara serialpada CPU karena hanya terdiri dari beberapa per-hitungan dan pemesanan memori untuk struktur data uni-form gridsehingga tidak diperlukan proses paralel.
Nx= dx3 r kP V , Ny= dy 3 r kP V , Nz= dz 3 r kP V (1) Overlapped Polygon
Overlapped polygon merupakan proses untuk mencatat
berapa cell yang berpotongan dengan polygon dari mo-del input serta proses perhitungannya bersifat indepen-den pada satu polygon. Proses perhitungan berjalan se-cara paralel dengan thread berjumlah banyaknya polygon
dari input model. Metode perhitungannya menggunakan pemetaan dari AABB suatu polygon ke koordinat uniform grid(koordinat dengan x, y, dan z adalah cell index dan (0,0,0) berada di AABB uniform grid yang paling min-imum). Total perhitungan yang dilakukan pada proses ini akan digunakan untuk memesan memori yang dibu-tuhkan oleh struktur data triangle offset.
Paralel Prefix Sum
Proses berikut adalah melakukan penambahan terhadap semua hasil yang didapatkan pada proses overlapped polygonuntuk mencari total memori yang dibutuhkan un-tuk struktur triangle offset. Pada proses sebelumnya, data hasil keluaran disimpan dalam array dan proses selanjut-nya adalah melakukan penambahan untuk setiap elemen pada array tersebut. Proses penambahan tersebut dina-makan prefix sum. Persamaan 2 merupakan persamaan inclusive scan yang digunakan pada proses ini dengan menggunakan pustaka CUDPP (CUDA Data Parallel Processing) [10, 11].
[a0, a1, . . . , an−1] ⇒ [a0, (a0+ a1), . . . , (a0+ . . . + an−1)] (2)
Perhitungan Perpotongan Cell
Perhitungan perpotongan cell adalah proses mencatatan cellmana saja yang berpotongan dengan polygon. Pro-ses ini mirip dengan proPro-ses kedua, yaitu overlapped poly-gon, tetapi pada proses ini bukan menghitung tetapi men-catat cell mana saja yang berpotongan dengan polygon dari model input.
Paralel Sort
Langkah berikutnya adalah melakukan sorting
berdasarkan index cell sehingga membentuk data yang urut dari index cell terkecil ke yang terbesar. Proses pengurutan dilakukan dengan menggunakan algoritma paralel radix sort yang terdapat pada makalah [9], yang sampai saat ini merupakan algoritma paralel sorting yang paling cepat yang pernah diimplementasikan pada
platform CUDA. Algoritma dari paralel radix sort
tersebut telah diimplementasikan pada pustaka CUDPP dan pustaka tersebut digunakan pada proses ini.
Scanning Data
Scanning dataadalah proses mencatatan index awal dan index akhir yang menyimpan data polygon yang
berpo-tongan dengan index cell. Proses scanning data
di-lakukan secara paralel dengan thread sebanyak jumlah overlapped polygonyang telah dihitung pada proses ke-dua. Pada proses scanning data ditekankan bahwa sete-lah melakukan proses sorting maka data dianggap akan urut dari index cell terkecil ke index cell terbesar se-hingga yang diperlukan adalah melihat data pada index cell sekarang dengan data pada index cell sebelumnya dan data pada index cell selanjutnya, jika data index cell sekarang dengan data index cell sebelumnya tidak sama maka berarti index triangle offset sekarang adalah index awal dari cell sedangkan jika data index cell sekarang tidak sama dengan data index cell selanjutnya maka index
Gambar 3: Perhitungan vektor arah ray
triangle offset sekarang merupakan index terakhir pada triangle offsetdari cell.
2.2
Ray Tracing Traversal
Tahapan ray tracing traversal dibagi menjadi 3 proses besar yaitu inisialisasi, deteksi perpotongan ray dengan AABB dari scene dan traversal. Metode yang digunakan untuk proses traversal adalah metode yang dipaparkan pada makalah [1]
Inisialisasi
Proses inisialisasi adalah proses perhitungan komponen arah primary ray yang ditembakkan dari kamera ke dalam scene. Terdapat dua proses dalam tahapan ini-sialisasi yaitu mengorthogonalkan vektor kamera dan menentukan vektor arah dari pusat kamera pada setiap titik pada gambar hasil dengan resolusi yang diinginkan. Pencarian tiga vektor kamera yang orthogonal digunakan metode gram-schmidt orthonormalization.
Pada gambar 3 merupakan skema dari kamera yang digunakan untuk menghitung ll, yaitu vektor yang gunakan sebagai acuan titik (0,0) pada gambar yang di-hasilkan. Vektor l, v, dan u merupakan vektor arah kam-era yang saling orthogonal yang dihasilkan pada pro-ses sebelumnya sedangkan variabel a adalah aspek rasio dari resolusi gambar (panjang/tinggi) dan variabel d di-hasilkan dari d =tan( f ovy/2)1 , parameter f ovy adalah sudut kebebasan dari kamera.
ll = campos + dl − av − u (3)
Proses selanjutnya seletah melakukan perhitungan vektor ll adalah menghitung vektor arah sesungguhnya untuk setiap titik pada gambar. Persamaan 4 digunakan untuk perhitungan vektor arah untuk setiap titik pada gambar. p = ll + 2av x resx + 2u y resy (4)
Perpotongan Ray-AABB Scene
Perhitungan perpotongan ray dengan AABB dari scene digunakan untuk mengetahui koordinat uniform grid per-tama yang digunakan untuk memulai traversal pada struktur uniform grid. Metode deteksi perpotongan an-tara ray dengan AABB yang digunakan adalah metode slabs. Hasil keluaran dari proses ini adalah koordinat dalam sistem koordinat uniform grid yang pertama kali berpotongan dengan ray.
Traversal
Proses terakhir adalah melakukan proses traversal dari koordinat uniform grid yang pertama kali berpotongan dengan ray sampai didapatkan ray yang berpotongan dengan suatu polygon atau koordinat uniform grid telah keluar dari AABB scene. Metode traversal yang digu-nakan adalah metode yang dipaparkan pada makalah [1]. Setiap berganti koordinat, dilakukan perhitungan per-potongan antara ray dengan segitiga yang masuk dalam kelompok segitiga yang berpotongan dengan cell pada uniform grid. Metode deteksi perpotongan antara ray dengan segitiga yang digunakan adalah metode yang di-paparkan pada makalah [8].
3 Hasil Percobaan
Pada pengujian yang akan dilakukan, digunakan spe-sifikasi perangkat keras dan perangkat lunak dengan rin-cian sebagai berikut
• Kartu grafik NVIDIA GeForce GTX 260 896 MB DDR3
• Sistem operasi Linux Debian squeeze
• NVIDIA CUDA Toolkit 2.3 dan NVIDIA CUDA SDK 2.3
Data yang diambil dalam pengujian ini adalah waktu pembuatan/konstruksi struktur uniform grid (tidak ter-masuk pengiriman data ke memori GPU) dan waktu ray tracing traversalpada saat penggambaran.
Model / Scene Waktu Konstruksi (ms) Waktu Traversal (ms) Sistem yang dirancang Sistem pada makalah [6] Sistem pada makalah [7] Sistem yang dirancang Sistem pada makalah [6] Sistem pada makalah [7] Wood Doll 2,45 n/a n/a 34,25 n/a n/a
Bunny 6,14 n/a 10 61.39 n/a 680
Sponza 10,80 13 80 179,84 n/a 1930 Horse 6,81 n/a n/a 82,49 n/a n/a Fairy Forest 18,77 24 n/a 499,61 285 n/a Conference 24,42 27 n/a 339,91 130 n/a Hand 24,26 n/a n/a 99,14 n/a n/a Dragon 34,82 n/a 110 133,54 n/a 800 Happy Budha 44,08 n/a 140 172,40 n/a 580 Blade 71,30 n/a n/a 148,86 n/a n/a xyzrgb_dragon 193,51 n/a 800 n/a n/a 1430
Tabel 1: Hasil pengujian pembuatan struktur uniform grid dan ray tracing traversal, serta perbandingannya dengan sistem yang sejenis pada makalah [6] dan [7]
Hasil pengujian yang telah dilakukan serta perbandi-ngannya dengan sistem yang sejenis pada makalah lain dapat dilihat pada tabel 1. Pada gambar 4 merupakan salah satu gambar hasil keluaran dari sistem. Resolusi gambar hasil keluaran yang digunakan adalah 1024x1024 dan jumlah thread per block yang digunakan adalah 8x8.
4 Diskusi dan Evaluasi
Data hasil pengujian pembuatan struktur uniform grid pada tabel 1 memperlihatkan bahwa seiring dengan meningkatnya jumlah polygon yang ada pada model atau sceneyang akan digambar, maka waktu pembuatan struk-tur uniform grid yang dibutuhkan semakin meningkat pu-la. Tetapi hal tersebut tidak terjadi pada model
spon-zadengan model horse. Model horse mempunyai
jum-lah polygon lebih banyak daripada jumjum-lah polygon pada model sponza tetapi waktu pembuatan struktur uniform gridlebih singkat. Fenomena tersebut terjadi karena re-solusi dan besar struktur triangle offset dari horse lebih kecil daripada model sponza sehingga banyaknya data yang harus diproses menjadi lebih sedikit.
Hasil pengujian ray tracing traversal yang dilakukan dan direkap dalam tabel 1 menghasilkan waktu penggam-baran sangat bervariasi dan tidak hanya bergantung pa-da banyaknya polygon. Model yang mempunyai banyak cellkosong pada struktur uniform gridnya, seperti spon-za, conference, dan fairy forest, menghasilkan waktu penggambaran yang lebih besar daripada model yang mempunyai cell kosong sedikit.
Pada tabel 1 terdapat perbandingan antara sistem yang dirancang dengan sistem yang sejenis yang dipaparkan pada makalah [7, 6] pada model / scene tertentu. Dari data terlihat bahwa sistem yang dirancang mempunyai waktu penggambaran (pembuatan struktur dan traversal) yang lebih cepat dari sistem yang dipaparkan pada makalah [7] tetapi sedikit lebih lambat dari sistem yang dipaparkan pada makalah [6] karena perangkat keras yang digunakan pada pengujian lebih rendah daripada yang digunakan pada makalah [6].
5 Kesimpulan dan Saran
Dari hasil perancangan dan pengujian sistem
penggambaran tiga dimensi dengan menggunakan
algoritma ray tracing pada platform CUDA, maka dapat disimpulkan beberapa hal yaitu
• Pada sistem, waktu yang digunakan untuk pembu-atan struktur uniform grid tergantung pada dua hal yaitu banyaknya polygon pada scene dan besarnya struktur triangle offset.
• Waktu traversal pada model / scene akan lebih lama jika banyak terdapat cell pada uniform grid yang kosong (density scene kecil).
• Sistem yang dirancang dan dijalankan pada GPU memerlukan waktu penggambaran yang lebih cepat daripada sistem yang sejenis yang dijalankan pada CPU.
• Sekitar 80 % sampai 95 % waktu penggambaran di-gunakan untuk traversal dan sisanya didi-gunakan un-tuk pembuatan struktur uniform grid.
Sistem penggambaran ray tracing yang dirancang pa-da penelitian ini masih merupakan framework pa-dasar dan bukan merupakan solusi yang lengkap sehingga diperlukan pengembangan yang lebih lanjut pada sis-tem. Penulis menyarankan beberapa topik pengemban-gan yang dapat dilakukan, yaitu:
• Penggunaan material (texture dan warna) pada mo-del sehingga didapatkan hasil yang lebih realistik. • Penggunaan metode anti-aliasing untuk
menghi-langkan aliasing yang terdapat pada hasil penggam-baran.
• Penambahan efek refleksi dan refraksi cahaya (dengan material tertentu) agar didapatkan hasil penggambaran yang lebih realistik.
• Perancangan sistem lebih lanjut untuk dinamik scene (animated scene) sehingga dapat digunakan dengan model / scene yang terdapat animasi di-dalamnya.
Pustaka
[1] AMANATIDES, J., AND WOO, A. A fast voxel
traversal algorithm for ray tracing. In Proc. Euro-graphics 1987(August 1987).
[2] CHRISTEN, M. Ray tracing on gpu. Master’s thesis, University of Applied Sciences Basel, 2005. [3] FUAD, R., AND HARIADI, M. Gpu-based
paral-lel algorithm for construction of uniform grid struc-ture. In National Seminar on Applied Technology, Science, and Arts 2009(2009).
[4] IVSON, P., DUARTE, L., AND CELES, W. Gpu-accelerated uniform grid construction for ray trac-ing dynamic scenes. Master’s thesis, PUC-Rio, 2009.
[5] JENSEN, H. W.,ANDCHRISTENSEN, P. H. High-quality rendering using ray tracing and photon map-ping. In Siggraph course notes (2007).
[6] KALOJANOV, J., AND SLUSALLEK, P. A paral-lel algorithm for construction of uniform grids. In HPG ’09: Proceedings of the Conference on High Performance Graphics 2009(New York, NY, USA, 2009), ACM, pp. 23–28.
[7] LAGAE, A., AND DUTRÉ, P. Compact, fast and robust grids for ray tracing. In SIGGRAPH ’08:
ACM SIGGRAPH 2008 talks(New York, NY, USA,
2008), ACM, pp. 1–1.
[8] MÖLLER, T.,ANDTRUMBORE, B. Fast, minimum storage ray-triangle intersection. J. Graph. Tools 2, 1 (1997), 21–28.
[9] SATISH, N., HARRIS, M., AND GARLAND, M. Designing efficient sorting algorithms for many-core gpus. In Parallel & Distributed Processing, 2009. IPDPS 2009. IEEE International Symposium on(2009), pp. 1–10.
[10] SENGUPTA, S., HARRIS, M.,ANDGARLAND, M. Efficient parallel scan algorithms for GPUs. Tech. Rep. NVR-2008-003, NVIDIA Corporation, Dec. 2008.
[11] SENGUPTA, S., HARRIS, M., ZHANG, Y., AND
OWENS, J. D. Scan primitives for gpu comput-ing. In GH ’07: Proceedings of the 22nd ACM SIG-GRAPH/EUROGRAPHICS symposium on Graph-ics hardware (Aire-la-Ville, Switzerland, Switzer-land, 2007), Eurographics Association, pp. 97–106. [12] WALD, I., IZE, T., KENSLER, A., KNOLL, A.,
ANDPARKER, S. G. Ray Tracing Animated Scenes using Coherent Grid Traversal. ACM Transactions on Graphics 25, 3 (Jul 2006), 485–493. (Proceed-ings of ACM SIGGRAPH 2006).
[13] WHITTED, T. An improved illumination model for shaded display. Commun. ACM 23, 6 (1980), 343– 349.