Minggu, Desember 19, 2010

Ray Tracing



Ray tracing adalah suatu metode untuk me-render obyek 3D yang hasilnya realistik seperti foto. Metode ini dilakukan dengan cara menelusuri sinar mata atau sumber cahaya, kemudian diperiksa apakah sinar tersebut mengenai obyek atau tidak. Jika ternyata sinar yang ditelusuri tersebut mengenai suatu obyek maka selanjutnya diperhitungkan intensitas pada obyek tersebut, yaitu intensitas ambient, diffuse dan specular. Hasil dari perhitungan intensitas inilah yang terlihat oleh mata.

Ada dua konsep dasar yang harus di perhatikan dalam ray tracing ini, yaitu: kita dapat melihat benda karena benda tersebut memantulkan cahaya; jika sinar menabrak permukaan benda maka dapat terjadi 3 hal, yaitu penyerapan, pemantulan, dan pembiasan. Ada pula 3 efek umum yang terjadi pada proses ray tracing, yaitu penyerapan, pemantulan, dan pembiasan cahaya. Di sini pemahaman kita mengenai fisika optik harus digali lagi.


Metode ray tracing dibagi menjadi dua jenis, yaitu forward ray tracing dan backward ray tracing.

Forward Ray tracing

Pada forward ray tracing, sinar yang ditelusuri adalah sinar yang dipancarkan dari sumber cahaya. Satu hal yang harus diperhatikan adalah bahwa sinar yang dipancarkan oleh sumber cahaya tidak hanya berjumlah puluhan atau ratusan tetapi dapat berjumlah jutaan bahkan lebih. Semua sinar yang dipancarkan tersebut harus ditelusuri satu persatu. Bila setelah proses penelusuran dilakukan, sinar yang sedang ditelusuri tersebut tidak mengenai mata, maka sinar tersebut akan diabaikan, yang berarti akan banyak sekali perhitungan sia-sia yang dilakukan. Hal ini dikarenakan tidak semua sinar yang dipancarkan dari sumber cahaya akan mengenai mata. Dengan menggunakan cara ini, maka untuk menghasilkan gambar yang diinginkan akan membutuhkan banyak waktu.


Gambar 2.1. Forward Ray Tracing


 Backward Ray Tracing

Backward ray tracing menggunakan penelusuran sinar dari mata. Sinar dipancarkan dari mata ke arah setiap pixel yang membentuk layar gambar dan kemudian diteruskan ke obyek-obyek yang akan digambar. Jika sinar yang melalui suatu pixel tersebut mengenai suatu obyek maka dilakukan perhitungan intensitas pada titik tabrak obyek tersebut. Intensitas hasil perhitungan tersebut digunakan untuk memberi warna pada pixel tersebut. Perhitungan intensitas yang dilakukan adalah dengan memperhitungkan efek pencahayaan dan efek visual.


Jika sinar yang dipancarkan tersebut tidak mengenai obyek sama sekali maka pixel diberi warna sama dengan warna latar belakangnya.


Gambar backward ray tracing
  
Efek Pencahayaan pada Ray Tracing

Untuk memperoleh gambar yang semirip mungkin dengan aslinya, perlu ditambahkan efek pencahayaan, karena pada dunia nyata pun semua benda dapat terlihat karena adanya cahaya. Efek pencahayaan dapat dibedakan menjadi tiga, yaitu ambient, diffuse dan specular. Di bawah ini akan dijelaskan secara lebih rinci tentang ketiga efek pencahayaan tersebut.

Ambient 

Ambient adalah efek pencahayaan yang telah membaur dengan lingkungan sehingga arah cahaya tidak dapat diketahui, seakan-akan cahaya datang dari segala arah. Efek ini akan mempengaruhi terang atau tidaknya suatu lingkungan yang terlihat oleh mata. Semakin banyak lampu maka ruangan semakin terang, sebaliknya jika lampu sedikit maka ruangan remang-remang.

Intensitas ambient pada suatu obyek dapat dicari dengan persamaan :

I = Ia * Ka

dimana,

I= Intensitas yang dihasilkan

Ia = Intensitas ambient

Ka = Koefisien ambient

Diffuse

Jenis pencahayaan yang kedua ialah diffuse. Diffuse adalah pencahayaan yang tergantung dari besarnya sudut yang dibentuk antara sinar dari lampu ke titik tabrak pada obyek dengan normal obyek. Sehingga posisi lampu sangat mempengaruhi efek diffuse ini. Intensitas diffuse dapat dicari dengan hukum

Lambertian sebagai berikut:

I = Ip * Kd (cosθ )

Dari persamaan intensitas diffuse tersebut cos θ dapat dihitung dengan melakukan dot product antara sinar dari lampu ke titik tabrak obyek dengan normal obyek itu, masing-masing merupakan unit vektor. Sehingga didapat persamaan baru

I = Ip * Kd * ( L • N )


dimana,

I= Intensitas yang dihasilkan

Ip = Intensitas diffuse dari sumber cahaya ‘x’

Kd = Koofisien diffuse

N = Vektor normal dari obyek

L = Vektor dari titik tabrak ke sumber cahaya

θ = Sudut antara N dan L

 Specular

Specular adalah efek pencahayaan dimana bayangan sumber cahaya terlihat pada permukaan obyek. Efek specular terlihat pada obyek yang mengkilap. Semakin mengkilap permukaan suatu obyek maka makin jelas bayangan sumber cahaya yang terlihat pada permukaan obyek tersebut. Untuk mencari intensitas specular dapat digunakan persamaan sebagai berikut :

I = Ip * Ks (cos θ ) n

Dari persamaan intensitas specular tersebut cos θ menggunakan dot product antara arah pantulan dengan negasi dari arah sinar.

I = Ip * Ks * ( R • V ) n

dapat dihitung dengan dimana,

I= Intensitas yang dihasilkan

Is = Intensitas specular dari sumber cahaya ‘x’

Ks = Koofisien specular

n = Variabel yang menentukan luas area yang berkilau jika terkena cahaya yang dipancarkan oleh sumber cahaya (bila n semakin besar maka cahaya semakin terfokus atau area yang berkilau menjadi lebih kecil)

R = Arah pantulan, berupa unit vektor

V = Negasi dari arah sinar

Sedangkan vektor R diperoleh dari − S + 2 * ( S • N ) * N

dimana,

S = Vektor dari titik tabrak ke sumber cahaya

N = Vektor normal dari obyek

Proses ray tracing yang prosesnya dapat digambarkan sebagai sebuah pohon sebenarnya dapat diselesaikan dengan algoritma yang lain, yakni algoritma pencarian runut balik. Tetapi, jika dianalisis lebih lanjut, penggunaan algoritma runut balik justru kurang efisien untuk kasus ini, karena setiap kali simpul dimatikan, perlu proses lain untuk naik ke simpul di atasnya dan membangkitkan anak-anak simpul lain hingga seluruh anak simpul dibangkitkan. Proses naik ke simpul sebelumnya membuat proses pencarian menjadi lama.
Algoritma branch and bound yang merupakan perbaikan dari algoritma pencarian melebar pun tidak bisa
digunakan karena algoritma tersebut menerapkan suatu batasan berupa cost. Pada proses rendering dengan metode ray tracingcost bukanlah hal yang paling utama karena pada akhirnya, untuk mencapai hasil yang paling mendekati kenyataan, semua simpul pada pohon perlu dibangkitkan untuk kemudian digabungkan kembali.
Algoritma pencarian melebar dirasa paling tepat untuk metode rendering ini, karena dalam satu waktu, algoritma ini dapat membangkitkan banyak simpul.



Tidak ada komentar:

Poskan Komentar