Konsep Ray Tracing
Ada dua konsep yang menjadi dasar teori untuk
ray tracing, yaitu :
- Kita dapat melihat sebuah benda karena benda tersebut memantulkan cahaya. Cahaya yang dipantulkan tersebut lalu akan ditangkap oleh retina mata dan diterjemahkan oleh otak menjadi apa yang kita lihat.
- Dalam perjalanan sebuah sinar, jika sinar tersebut menabrak suatu permukaan, dapat terjadi tiga hal tergantung pada jenis permukaan yang ditabrak, yaitu penyerapan, pemantulan, dan pembiasan. Sebuah permukaan dapat memantulkan semua atau sebagian dari sinar, baik ke satu atau banyak arah. Permukaan tersebut juga dapat menyerap sebagian dari sinar, mengurangi intensitas sinar yang terpantul atau terbias. Jika permukaan tersebut mamiliki sifat tembus cahaya (transparency/translucent) maka permukaan itu akan membiaskan sebagian sinar dan menyerap sebagian atau semua spektrum sinar, sehingga dapat mengubah warna sinar.
Namun perlu diperhatikan bahwa ada perbedaan
mendasar antara konsep diatas dengan ray tracing. Pada ray tracing, umumnya
sinar berasal dari mata pengamat, sedangkan pada kenyataannya sinar selalu
berasal dari sumber cahaya. Karena itu ada dua jenis ray tracing, eye-based dan
light-based. Eye-based adalah ray tracing dimana sinar berasal dari mata
pengamat, sedangkan pada light-based ray tracing, sinar berasal dari sumber
cahaya.
Pada ray tracing, ada beberapa hal penting yang harus kita perhatikan :
- Tiga efek umum dalam ray tracing adalah pemantulan, tembus cahaya, dan bayangan.
- Ray tracing adalah fungsi rekursif.
- Sinar
- Fungsi Perpotongan
- Pemantulan
- Tembus cahaya/Tranparansi Bayangan
Implementasi
Ray Tracing pada game Quake Wars
Game pada umumnya menggunakan teknik render Rasterization, dimana teknik ini
membutuhkan pekerjaan pada programming yang sulit dan jika terlalu banyak
spesial efek (bayangan dan refleksi) makan semakin banyak yang perlu
diperhitungkan sebagai perkiraan sebagaimana terjadinya beberapa kali rendering
dan sering disimpan dalam tekstur resolusi terbatas. Dan perkiraan tadi bahkan
akan gagal pada kasus tertentu. Dengan Ray Tracing, kita hanya perlu mengecek
path (jalur) dari sumber cahaya ke surface (permukaan) terblokir atau tidak.
Hal ini dapat ditentukan dengan mudah hanya dengan ray (sinar) atau biasa
disebut shadow ray (sinar bayangan).
Jika sinar dari sumber cahaya bisa mencapai permukaan, maka titik
dipermukaan akan bersinar. Jika sebaliknya, maka akan gelap (membentuk
bayangan). Dalam game Quake wars, Ray Tracing paling banyak digunakan diluar
ruangan, dimana sinar cahaya berupa sinar matahari. Kita dapat menerapkan Ray
Tracing dengan sangat mudah, dan hasil yang didapat pun memuaskan.
Namun hal tersebut tidak selalu mudah pada
semua hal. Jika kita menerapkan sebuah transparansi pada sebuah objek, maka
kasusnya akan berbeda lagi. Jika kita menggunakan teknik Rasterization untuk
mengkalkulasikan bayangan atau biasa disebut shadow mapping, kita akan
mendapatkan objek sebuah bayangan yang menyatu dengan objek. Maksudnya jika
sumber cahaya berubah posisi seperti halnya pada scene dari matahari terbit ke
matahari tenggelam, maka posisi bayangan takkan berubah kecuali kita tambahkan
suatu algoritma lagi. Namun pada Ray Tracing hal ini adalah masalah yang
simple, program dapat membaca nilai transparansi (Transparency Value) dari
teksture dan terus memancarkan sinar tersebut sesuai dengan nilai
transparansinya. Hal ini akan menimbulkan efek tertentu, namun juga menciptakan
sebuah tantangan. Pada gambar dibawah, terlihat bahwa bayangan tercipta dari
medan gaya tergantung dari nilai transparansi dari medan gaya tersebut.
Terdapat
bayangan yang berbeda yang merupakan hasil dari Ray Tracing
|
Keuntungan lainya menggunakan Ray Tracing pada
objek yang setengah transparan, maka objek tersebut tidak perlu di urutkan
berdasarkan kedalamanya. Namun hal ini juga memberikan kerugian pada waktu
rendering, dimana waktu rendering akan menjadi lebih besar dari pada
sebelumnya. Jika terjadi sekali dua kali, mungkin tidak akan terlalu mempengaruhi
rendering, tetapi jika terjadi hingga sepuluh atau lebih, maka hal ini akan
menjadi sebuah masalah yang serius. Kasus ini dapat terjadi jika sebuah objek,
yang kita akan misalkan sebuah pohon, memiliki sebuah objek yang memiliki
transparansi sebagian dari daun-daunan. Untuk lebih jelasnya lihat gambar
dibawah.
Pada
gambar diatas, objek ranting dan daun kita jadikan satu, tetapi memiliki nilai
transparansi yang berbeda.
|
Dari
gambar sebelumnya, kita menginginkan pohon agar terlihat seperti ini.
|
Merender beberapa pohon pun akan menjadikan
sebuah masalah yang besar bagi performance pada game nantinya. Dan untuk
mengakalinya, maka dibaut sebuah peningkatan atau batasan tertentu seperti yang
telah dijelaskan pada teori ray tracing diatas
“Dalam menggunakan ray tracing, umumnya dibuat
suatu batasan agar lebih mangkus”.
Batasan-batasan tersebut adalah :
- Hindari menembak sinar baru setiap kali setelah membaca nilai transparansi;sebaliknya, sinar yang sama akan digunakan lagi yang berasal dari posisi hit dan terus ke arah yang sama.
- Menandakan apakah tekstur menggunakan transparansi dengan flag tunggal. Jika tidak, maka tidak ada kebutuhan untuk menembak sinar tambahan melalui transparansi potensial. Kulit dalam pohon adalah contoh dari tekstur buram dicampur dengan banyak tekstur transparan sebagian.
- Menurunkan jumlah sinar yang dibundel bersama-sama. Dalam banyak kasus, bundling sinar dengan jalan yang sama dapat menyebabkan mempercepat substansial. Namun, jika salah satu bagian dari bundel menabrak permukaan lainya, maka dibutuhkan beberapa perubahan. Dalam kasus rendering pohon, overhead dapat menjadi hal yang signifikan, dan akan memperlambat semuanya.
Bahkan dengan beberapa peningkatan/batasan
dala merender tadi, merender sebuah pohon masih membutuhkan waktu yang sangat
banyak. Untuk lebih jelasnya, gambar dibawah dapat menjelaskan seberapa banyak
sulitnya merender sebuah pohon melalui visualisasi warna, dimana merah berarti
objek membutuhkan waktu yang lama untuk dirender, sedangkan objek dengan warna
biru lebih cepat untuk dirender.
.
Gambar
untuk menunjukan waktu yang diperlukan untuk merender sebuah objek dengan
visualisasi warna
|
Seperti yang telah tergambarkan diatas,
merender sebuah pohon bahkan lebih lama dari merender sebuah air yang
merefleksikan objek lainya pada scene.
Didalam game Quake Wars, juga terdapat
beberapa objek yang menggunakan ray tracing, seperti sebuah Dome (kubah), yang
permukaanya diubah agar terlihat seperti terbuat dari kaca. Dengan menggunakan
index pembiasan yang biasa terdapat pada buku-buku fisika, dapat dihasilkan
sebuah kubah yang merefleksi dan membiaskan cahaya seperti gambar dibawah.
Refleksi
dan Refraksi menggunakan ray tracing kepada sebuah kubah berpermukaan kaca
|
Ray Tracing juga diterapkan dalam merender
objek air, yang mana objek air dapat terbentuk dari sebuah 2D, atau menjadikan
air 3D sebagai sifat asli dari airnya dengan menggunakan mesh berupa 100.000 segitiga.
Air
dengan 3D
|
Sumber :
Tugas 1B Implementasi Ray Tracing pada Game Quake Wars
Kelompok :
Afriandri Prima Utama (50414413)
Alfonsius Krisnanda ( 50414827)
Annisa Larasati A (51414380)
Fenton Martin (54414156)
Indra Arianggi S (55414290)
3IA01
Implementasi Ray Tracing pada Game Quake Wars