Pengenalan Terhadap Ray Tracing

Shandy Gunawan
HMIF ITB Tech
Published in
6 min readFeb 19, 2019

oleh: Shandy ~ Teknik Informatika ITB 13516097

Pembuka

Peluncuran kartu grafis dengan kode RTX oleh Nvidia beberapa waktu lalu mengenalkan istilah baru kepada publik, yakni ray tracing. Akan tetapi, istilah ini masih belum banyak dimengerti sehingga publik mengira bahwa ray tracing adalah fitur Nvidia terbaru. Ray tracing sesungguhnya adalah sebuah teknik pembangunan gambar dari model (rendering) yang mampu menampilkan efek cahaya yang sangat realistis dan sudah banyak digunakan di industri film. Pada tulisan ini, kita akan menelusuri lebih jauh mengenai ray tracing, termasuk aplikasinya dalam bidang komputer grafis.

Sejak tahun 1990, pemodelan 3D konvensional menggunakan proses yang bernama rasterization. Proses ini menggunakan kumpulan segitiga dan poligon untuk membuat model objek tiga dimensi. Kemudian, model tersebut dikonversi lagi menjadi pixels dan dilanjutkan dengan berbagai post-processing sebelum menjadi gambar akhir yang akan ditampilkan ke layar.

Mengutip dari web resmi Nvidia, ray tracing mampu mensimulasikan perilaku fisik cahaya. Ray tracing mampu mengkalkulasikan warna dari pixels dengan menelusuri jalur yang ditempuh cahaya seolah-olah tampilan layar yang ditonton berasal dari mata penonton sendiri. Berbagai perilaku dari cahaya seperti refleksi, refraksi, dan bayangan menentukan warna akhir dari setiap pixel di layar.

Bagaimana sebuah gambar diciptakan?

Hal terpenting yang kita butuhkan untuk menciptakan sebuah gambar adalah sebuah permukaan dua dimensi. Kemudian, kita dapat meng-visualisasikan permukaan tersebut sebagai dasar sebuah piramida horizontal dengan puncak (vantage point) piramida tersebut terletak di tengah mata kita dan tingginya sejajar dengan arah pandang (line of sight) kita. Dasar piramida tersebut kemudian kita sebut sebagai image plane atau canvas. Ilustrasi berdasarkan visualisasi tersebut antara lain sebagai berikut.

Gambar 1. Ilustrasi Image plane

Image plane ini berfungsi sebagai permukaan dua dimensi yang akan kita gunakan untuk memproyeksikan berbagai tampilan tiga dimensi.

Sebagai contoh, jika kita ingin menggambar sebuah kubus tiga dimensi pada sebuah image plane maka kita perlu menggambarkan garis-garis yang saling menghubungkan titik-titik sudut kubus yang terlihat oleh mata. Pada gambar berikut, titik-titik sudut tersebut diberi nama c0, c1, c2, dan c3.

Gambar 2. Penamaan titik-titik sudut pada kubus tiga dimensi

Setelah itu, kita menarik garis dari masing-masing sudut tersebut ke vantage point yang merupakan mata kita.

Gambar 3. Penarikan garis dari sudut kubus tiga dimensi ke vantage point

Perpotongan garis-garis tersebut dengan image plane juga membentuk titik-titik sudut yang akan merepresentasikan kubus tiga dimensi tersebut pada image plane. Titik-titik sudut tersebut kemudian disebut c0’, c1’, c2, dan c3’. Persegi hasil proyeksi tersebut yang akan ditampilkan pada layar dua dimensi.

Gambar 4. Proyeksi kubus di image plane hasil penarikan garis

Metode diatas dinamakan sebagai perspective projection yang berfungsi untuk menerjemahkan objek-objek tiga dimensi yang kita lihat sehari-hari menjadi dua dimensi.

Setelah kita mampu menggambar outline dari objek tiga dimensi pada sebuah permukaan dua dimensi, kita mampu menambahkan warna pada gambar tersebut. Seperti yang kita ketahui, kecerahan dan warna adalah hasil dari interaksi cahaya dengan material objek. Cahaya terbentuk dari photon mampu diserap, direfleksikan, atau ditransmisikan oleh objek-objek yang berinteraksi dengan photon tersebut. Besar persentase photon yang diserap, direfleksikan, dan ditransmisikan oleh berbagai material objek menentukan bagaimana objek tersebut terlihat oleh mata.

Sebagai contoh, cahaya putih terbentuk dari photon RGB (Red, Green, Blue). Jika sebuah objek berwarna merah maka material objek tersebut menyerap photon Green dan photon Blue tetapi merefleksikan photon Red yang akan ditangkap oleh mata dan menerjemahkannya menjadi warna merah. Perlu diingat bahwa contoh diatas hanyalah simplifikasi, photon tidak sesungguhnya bersifat RGB. Selain itu, tingkat kecerahan dari suatu objek yang berasal dari jumlah photon yang dipantulkan juga memberikan dimensi lain bagi mata untuk merepresentasikan objek tersebut, seperti shading. Melihat pentingnya cahaya bagi penampilan objek, ray tracing dapat dikatakan juga mempunyai peran penting dalam menentukan penampilan gambar ke layar monitor kita.

Cara Kerja Ray Tracing

Ray tracing dinamakan demikian karena metode tersebut mensimulasikan jalur dari sinar cahaya (light rays) berasal dari sumber cahaya menuju mata manusia. Tujuan yang ingin diraih dari ray tracing yakni menentukan warna dari light rays tersebut, terutama jika light rays mengalami banyak pantulan dari berbagai objek. Penjelasan diatas akan jauh lebih mudah dipahami melalui gambar berikut.

Gambar 5. Ilustrasi Ray Tracing

Seperti yang telah kita pelajari di sub-bab sebelumnya, kita melihat objek tiga dimensi dalam dua dimensi melalui image plane, dan warna objek diperoleh dari warna yang direfleksikan oleh material objek tersebut. Pada gambar diatas, terdapat suatu sumber cahaya, misal sebuah bohlam lampu, yang memancarkan cahaya ke segala arah. Jika kita melakukan tracing pada cahaya tersebut dari bohlam lampu maka kita akan dihadapi dengan beberapa pertanyaan:

  • Berapa banyak sinar (rays) yang dikeluarkan dari bohlam lampu?
  • Banyak sekali kemungkinan jalur yang ditempuh oleh sinar. Sebuah sinar dapat langsung terpancar menuju mata (directly to the eye), sinar lain harus mengalami pantulan terlebih dahulu sebelum menuju mata, dan terdapat banyak sinar yang tidak menuju mata sama sekali. Bagaimana cara kita memilih sinar-sinar yang pasti menuju ke mata?

Pada ilustrasi diatas, garis panah utuh adalah sinar yang mempunyai jalur menuju ke mata, baik langsung maupun melalui pantulan, sedangkan garis panah terputus-putus adalah sinar-sinar yang tidak menuju ke mata. Tugas kita yakni mampu memilih sinar yang mempunyai jalur seperti garis panah utuh karena melakukan tracing pada sinar yang tidak menuju mata hanya akan menguras resources.

Pertanyaan-pertanyaan di paragraf sebelumnya membuat tracing sinar-sinar yang terjamin menuju ke mata sangatlah sulit. Akan tetapi, jika kita melihat permasalahan tersebut secara terbalik (backwards), solusi dari permasalahan tersebut sangatlah mudah. Solusi tersebut yakni kita melakukan tracing sinar-sinar tersebut bukan dari bohlam, tetapi dari mata. Sebagai contoh, kita memilih sebuah titik pada image plane yang ingin kita ketahui warnanya. Warna dari titik tersebut berasal dari light ray yang menembus titik itu. Kita mampu melakukan tracing mulai dari mata, lalu menembus titik tersebut, dan seterusnya hingga mencapai sumber cahaya sehingga kita dapat mengetahui warna dari titik tersebut berdasarkan material objek-objek yang menumbuk tracing kita. Metode ini disebut sebagai backward tracing yang dapat diilustrasikan sebagai berikut.

Gambar 6. Ilustrasi Backward Tracing

Ray Tracing dalam Grafika Komputer

Algoritma Ray Tracing mengambil sebuah gambar yang terbuat dari pixels. Untuk setiap pixel-nya, kita menembakkan sebuah sinar utama (primary ray) menuju image plane yang berasal dari mata. Kemudian, kita melakukan tracing pada sinar utama tersebut untuk menentukan arahnya dan objek-objek yang tertumbuk oleh sinar tersebut. Pada kasus tertentu dimana sinar utama menumbuk lebih dari satu objek, kita memilih objek tertumbuk yang paling dekat ke mata dan menembakkan sebuah sinar bayangan (shadow ray) dari titik tumbukkan pada objek tersebut menuju sumber cahaya seperti gambar dibawah ini.

Gambar 7. Sebuah primary ray ditembakkan dari mata menembus titik tengah sebuah pixel untuk mengecek terjadinya tumbukkan. Jika terjadi tumbukkan, sebuah shadow ray ditembakkan dari titik tumbukkan untuk menentukan jika titik tersebut di dalam sebuah bayangan atau terkena sinar langsung.

Jika sinar bayangan tidak menumbuk objek lain saat menuju sumber cahaya maka titik tumbukkan tersebut terkena sinar langsung. Sedangkan, jika sinar bayangan menumbuk benda lain, maka titik tumbukkan tersebut dibayangin oleh objek yang ditumbuk oleh sinar bayangan.

Gambar 8. Shadow Ray yang ditembakkan menumbuk sebuah objek lain, maka titik asal dari shadow ray dibayangi oleh objek tersebut.

Jika kita mengulangi proses ini untuk setiap pixel, kita akan mendapatkan sebuah representasi dua dimensi dari sebuah pemandangan tiga dimensi.

Gambar 9. Representasi dua dimensi dari objek tiga dimensi

Pseudocode Ray Tracing

Berikut adalah implementasi algoritma ray tracing dalam bentuk pseudocode.

Penutup

Sesungguhnya materi-materi yang telah dibahas diatas hanyalah tip of the iceberg dari ray tracing yang sesungguhnya. Kita mampu mengkalkulasikan refleksi, refraksi, dan sifat-sifat cahaya lain untuk menghasilkan gambar yang semakin indah dan akurat dengan fenomena cahaya yang sesungguhnya. Oleh karena itu, penulis menganjurkan untuk membuka referensi-referensi yang digunakan oleh penulis untuk memperdalam wawasan pembaca mengenai ray tracing.

Referensi

Hayward, Andrew. (2018, March 21). What is ray tracing? Everything you need to know about the next big graphical leap. Retrieved from https://www.techradar.com/news/ray-tracing

NVIDIA. NVIDIA RTX Ray Tracing. Retrieved from https://developer.nvidia.com/rtx/raytracing

Rademacher Paul. Ray Tracing: Graphics for the Masses. Retrieved from

https://www.cs.unc.edu/~rademach/xroads-RT/RTarticle.html

Scratchapixel. Introduction to Ray Tracing: a Simple Method for Creating 3D Images. Retrieved from https://www.scratchapixel.com/lessons/3d-basic-rendering/introduction-to-ray-tracing/how-does-it-work

--

--