Rabu, 19 April 2017

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

0 komentar:

Posting Komentar