Işın izleme

**Işın izleme** (), gerçek dünyada ışığın ne şekilde hareket ettiğini göz önünde bulundurarak bir sahnenin görüntüsünü çizen bir grafik oluşturma yöntemidir. Ancak bu yöntemde işlemler gerçek yeryüzündeki yolun tersini izler. Gerçek dünyada ışık ışınları bir ışık kaynağından çıkar ve nesneleri aydınlatırlar. Işık, nesnelerden yansır ya da şeffaf nesnelerin içinden geçer. Yansıyan ışık gözümüze ya da kamera merceğine çarpar. Yansıyan ışık ışınlarının çoğu bir gözlemciye erişmediği için bir sahnedeki ışınları izlemek sonsuza dek sürebilir.

## Giriş
Günümüzde pek çok alanda bilgisayar kullanımı oldukça yaygınlaşmıştır. İlk zamanlarda sadece bazı hesaplamalar yapmak için kullanılan bilgisayarlar, kullanım alanları genişledikçe insan hayatında daha çok yer edinmiş, iletişim yetenekleri geliştikçe de insanla daha çok ortamı paylaşır hale gelmişlerdir. Bu bağlamda görüntünün güzel olması pek çok uygulama için gerekli olmakla beraber, güncel uygulamaların büyük kısmında gerçekçilik de büyük önem taşır. Örneğin oyunlar ve animasyonlar bilgisayar dünyasında oldukça popülerdir. Görüntünün gerçekçi ve güzel arasında, uygulanabilir, yakın olması, metodun gerçek dünyada *ışığın çevreyle olan etkileşimini modelleme*ye çalışmasıdır.

Elbette hiçbir algoritma mükemmel değildir. uygulanması da hızın artmasını sağlayabilir.

Phong aydınlatma modeline göre herhangi bir pikselin renk değeri belirlenirken üç bileşen kullanılır. Bunlar ortam (ambient), yaygın (diffuse) ve aynasal (specular) bileşenlerdir. Bu üç bileşen, toplamları 1'e eşit olan üç katsayı ile toplanarak, ilgili pikselin renk değeri hesaplanır. Klasik ışın izleme yöntemi, ambient değerini gerçekçi olarak modelleyememektedir. Örneğin tavanında bir lambanın bulunduğu bir odanın simülasyonu yapılmak istendiğinde, odanın tavanı neredeyse tamamen karanlık kalmaktadır.

Ayrıca aynı odada bir masa olduğunu farz edersek, masanın altının da tamamen siyah olduğu görülür. Gerçek dünyada bazı yüzeylerin tamamen karanlık olmamasına rağmen, ışın izlemenin sonucunda tamamen karanlık olmasının nedeni, ışık kaynağından çıkan ışınlar tarafından doğrudan aydınlatılmayan yüzeylerin gerçekte aydınlık olmasıdır. Yani sahnede aydınlık görünmesine rağmen, ışık kaynağından çıkan ışınların direkt olarak çarpmadıkları yüzeyler bulunmaktadır. Bu yüzeyler kırılmalar veya yansımalar neticesinde aydınlanmaktadır. Bu işleme **[[Dolaylı aydınlatma]] (Indirect Illumination)** denir. Doğrudan aydınlatılmayan bu yüzeylerin renk değerlerinin hesaplanması, *derinliği önceden belirlenmiş özyinelemeli bir algoritma*yı gerekli kılar. Aksi takdirde görüntünün tamamen gerçekçi olması beklenemez. Elbette ki bu algoritmanın koşması, görüntünün daha da geç hesaplanmasına neden olacaktır. Bu nedenle algoritmanın optimum olması çok önemlidir.

## Işın İzleme Yöntemi

### Işın İzleme Yöntemine Giriş

Işın izleme yöntemi, ışık kaynağından çıkan ışınların fiziksel davranışlarını modellemek üzere kurulmuştur. Gerçek yeryüzündeki cisimleri görebilmemiz için ışık kaynağından çıkan ışınların, cisimlere çarparak yansıması ya da cisimlerin içinden geçerek kırılması ve sonuçta da gözümüze ulaşması gerekir. Bilgisayar ortamında ise, gerçekçi 3B görüntüler üretebilmek için boyama ve görünmeyen yüzeylerin kaldırılması işlemleri gerçekleştirilmelidir.

Boyama, 3B nesnelerin herhangi bir noktasındaki renk değerinin belirlenmesine denir. Bu renk belirleme işlemi ışıklandırma, gölgelendirme, geçirgenlik, yansıma ve kırılmaya bağlı olarak belirlenir.

Görünmeyen yüzeylerin kaldırılması ise, gözlemci tarafından 3B nesnelere bakıldığında, manzaradaki cisimleri oluşturan yüzeylerden görünmeyenlerin kaldırılması, dolayısı ile görünenlerin belirlenmesi işlemine verilen addır.

Işın izleme yöntemi hem görünmeyen yüzeylerin kaldırılması, hem de renk değerlerinin belirlenmesine ilişkin çözümler sunar.

#### İleri Yönlü Işın İzleme (Forward Ray Tracing) Yöntemi
Işık kaynağından doğrusal olarak saçılan ışınların cisimlerden yansıması ya da kırılması sonucu göze ulaştığı kabul edilerek yapılan modellemeye İleri Yönde Işın İzleme (Forward Ray Tracing) yöntemi denir. Gerçek yeryüzündeki görme, bu modele uygun olarak gerçekleşmektedir.

Gerçek dünyada ışık kaynağından saçılan milyarlarca fotonun çok az bir kısmı göze ulaşır. Bu model bilgisayar ortamında gerçeklenirken, göze ulaşamayan fotonlar için çok sayıda gereksiz hesaplama yapılacaktır. Bu nedenle ileri yönde ışın izleme yönteminin bilgisayar ortamında gerçeklenmesi oldukça zordur.

#### Geri Yönlü Işın İzleme (Backward Ray Tracing) Yöntemi
Göze ulaşmayan ışınların sisteme getireceği yükten kurtulmak için, sadece göze ulaşan ışınlar için hesaplama yapılması istenir. Bu nedenle ışın izleme yönteminin bilgisayar ortamında gerçeklenmesi için Geri Yönde Işın İzleme (Backward Ray Tracing) modeli kullanılır. Bu modelde ileri yönde ışın izleme yönteminin tersine, ışınların gözden çıkarak cisimlere çarpıp yansıması ya da kırılması sonucu ışık kaynağına ulaştığı kabul edilir.
Bu yaklaşım sayesinde ileri yönde ışın izleme yöntemindeki gibi ışık kaynağından çıkan tüm ışınlar için değil, sadece göze ulaşabilen ışınlar için hesaplama yapılmış olur.

Geri yönde ışın izleme yönteminde, gözlemcinin belli bir noktadan, görüntü düzlemine dik olarak baktığı varsayılır. Bakış noktasından çıkıp görüntü düzleminden geçen ışınlar, cisimlere çarptıktan sonra kırılarak veya yansıyarak ışık kaynağına ulaşıyorsa, ilgili pikselin rengi ışık kaynağının konumuna, cisimlerin rengine, yansıtma ve geçirgenlik özelliklerine göre belirlenir.

Eğer tüm yansımalar ve kırılmalar sonucunda, gönderilen ışın ışık kaynağına ulaşmazsa, ilgili piksel siyaha boyanır. Burada yapılan yansıma ve kırılma işlemleri için bir derinlik değeri belirtilmelidir. Aksi takdirde işlemler çok uzun zaman alabilir.

#### Işının Tanımı
Işının matematiksel olarak ne ifade ettiğini belirtmek faydalı olacaktır. Işın, başlangıç noktası ve doğrultusu olan vektörel bir büyüklüktür. Başlangıç noktası R0 olan, Rd doğrultusu boyunca ilerleyen R vektörü aşağıdaki gibi tanımlanabilir:

*R = R<sub>0</sub> + t R<sub>d</sub>, t > 0 *'(2.1)**

Burada t, R<sub>d</sub> doğrultusu boyunca giden R ışınının R<sub>0</sub> başlangıç noktasına uzaklığıdır. t değerinin R<sub>0</sub> ile R<sub>d</sub> arasındaki uzaklığa tam olarak eşit olması için R<sub>d</sub>'nin boyu 1 olmalı, yani R<sub>d</sub> normalize edilmelidir.

==== Birincil Işınların Üretilmesi ====
Bakış noktasından yollanan ve görüntü düzlemindeki her [[piksel]]in merkezinden geçen ışınlara, Birincil Işınlar (Primary Rays) denir. [[Işın]] izleme yönteminin ilk adımı birincil ışınların oluşturulmasıdır.

Birincil ışınlar cisimlere çarpıp yansıyarak ya da kırılarak ışık kaynağına ulaşırsa [[görüntü]] düzlemindeki ilgili pikselin rengi, bu birincil ışının çarpıp yansıdığı ya da kırıldığı cisimlerin fiziksel özelliklerine göre belirlenecektir.

Birincil ışınların üretilebilmesi için, ilk olarak doğrultunun hesaplanması gerekir. Bunun için 2.1 ifadesi yeniden düzenlenir:
 
R<sub>d</sub> = (R - R<sub>0</sub>) / t **(2.2) **

Anlaşılacağı gibi, birincil ışının doğrultusunun hesaplanması için iki [[nokta]]ya ve bir uzaklık bilgisine ihtiyaç vardır. İki noktadan birincisi genellikle R<sub>0</sub> = [ 0 0 0 ] olarak seçilen bakış noktasıdır. İkinci nokta ise, renk değeri hesaplanmak istenen pikselin koordinatlarıdır. t değeri [[hipotenüs]] teoreminden hesaplanabileceği gibi iki nokta arası uzaklık formülünden de bulunabilir. Ancak biz t değerini, kesişim testi neticesinde bulacağız.

Bununla beraber, R<sub>d</sub>'nin normalize edilmiş halini bulmak için X, Y ve Z koordinatlarını ayrı ayrı t'ye bölmek yeterlidir. R<sub>d</sub>'nin bulunması ile birincil ışın üretimi bitmiş olur. Böylece başlangıç noktası ve doğrultusu bilinen bir [[vektör]] elde edilmiştir. Bu birincil ışın ile manzaradaki bir yüzeyin kesişip kesişmediğini tespit etmek için, başlangıç noktası R<sub>0</sub>'ın ve doğrultu vektörü olan R<sub>d</sub>'nin bilinmesi yeterlidir.

[[Kesişim]] testlerinde, ışın ile yüzeyin kesişimi araştırılır. Eğer kesişim varsa 0'dan büyük bir t değeri geri döndürülür. Aksi takdirde t değeri 0 olur. Hesaplanan bu t değeri sayesinde yüzey üzerindeki kesişim noktasının [[koordinat]]ları belirlenir. Eğer ışın bu kesişim noktasından kırılarak veya yansıyarak yoluna devam edecekse, kesişim noktası yeni başlangıç noktası yani R<sub>0</sub> olur. Yansıma veya kırılma doğrultusu belirlenerek yeniden kesişim testleri yapılır. Bu ışınlara İkincil Işın (Secondary Rays) denir. İkincil ışınlar istenen derinlik değerindeki bir özyinelemeli bir algoritma ile ışık kaynağına ulaşıncaya kadar yeniden hesaplanır.

==== Gerçek Piksel Koordinatlarının Hesaplanması ====
Görüntü düzleminin her bir pikseline karşılık, manzarada birden çok piksel karşılık düşer. Örneğin 10 x 10 boyutunda ve bakış noktasından z doğrultusunda 5 birim uzakta bir görüntü düzleminin bulunduğunu varsayalım. Eğer manzaramızın çözünürlüğü 1024 x 768 olarak seçilirse, 10 x 10 birimlik görüntü düzleminin herhangi bir (X, Y, 5) noktasından geçen ışının gerçek piksel koordinatları:

(10 * X / 1024 – X<sub>0</sub>, Y<sub>0</sub> – 10 * Y / 768, 5 ) 	olur. 	**(2.3)**

Bu ifadedeki (X<sub>0</sub>, Y<sub>0</sub>, 5 ) noktası, 10 x 10 birimlik görüntü düzleminin en üst sol köşesinin koordinatlarıdır.

=== Görünmeyen Yüzeylerin Kaldırılması ===

Görünmeyen yüzeylerin kaldırılmasının, gözlemci tarafından [[3B]] nesnelere bakıldığında, manzaradaki cisimleri oluşturan yüzeylerden görünmeyenlerin kaldırılması, dolayısı ile görünenlerin belirlenmesi işlemine verilen ad olduğunu belirtmiştik.

Görünmeyen yüzeylerin kaldırılmasında kullanılan başlıca yöntemler [[Derinlik Tamponu]] (Z-Buffer) ve Işın İzleme (Ray Tracing) 'dir.
 
Derinlik tamponu yönteminde üç boyutlu cisimlerin iki boyutlu görüntü düzlemine izdüşümü alınırken, ilgili pikselin renk değerinin yanı sıra cisimle kesişim noktasının Z değeri de saklanır. Aynı piksel için yeni bir cisim kesişimi algılandığında Z değerleri karşılaştırılır. Yeni Z değeri eskisinden küçükse bu pikselin rengi yeni cismin rengi ile değiştirilir ve Z değeri yenisiyle güncellenir.

Işın izleme yöntemi ile görünmeyen yüzeyler kaldırılırken, bakış noktasına göre aynı doğrultuda bulunan yüzeylerden, t uzaklığı en küçük olanı seçilmelidir. İlgili pikselin renk değeri hesaplanırken, seçilen bu yüzey esas alınır, diğerleri göz ardı edilir.

Dikkat edilirse, Z Buffer yöntemi ve benzeri tüm diğer yöntemlerde kullanılan [[çokgen]] türü üçgen olmasına rağmen, ışın izlemede işlemler yönteminde [[piksel]] mertebesinde gerçekleştirilir. Bu sayede eğrisel yüzeylerde bile iyi sonuçlar elde edilir. Diğer yöntemlerde bu derece gerçekçi sonuçlar elde etmek için çokgenlerin son derece küçük seçilerek bir piksel boyutuna indirilmesi gerekir ki oldukça zor, hatta imkânsız denilebilir.

==== Arka Yüzeylerin Kaldırılması (Backface Culling) ====
Görünmeyen yüzeylerle ilgili diğer bir konu da arka yüzeylerin kaldırılmasıdır. Arka yüzeyler, bakış noktasından bakıldığında asla görülemeyecek olan yüzeylerdir. Örneğin dik olarak bakılan bir [[küp]]ün arka yüzeyi asla görülemez. Bu yüzeylerin kaldırılması ışın izleme yönteminin hızlanmasını sağlar. Bununla birlikte arka yüzeylerin kaldırılması ışın izleme yöntemi ile çok kolay gerçekleştirilebilir.

=== Işın - Nesne Kesişim Testleri ===
Işın izleme yönteminin en temel özelliği, bakış noktasından gönderilen ışınların cisimlerle kesişip kesişmediğini anlamak üzere yapılan kesişim testleridir. Bu testlerde, kesişimi araştırılacak cismin [[matematiksel]] denklemi ile ışının başlangıç noktası ve doğrultusunun [[koordinat]]ları kullanılır. Sonuçta, varsa, kesişim noktası ve bu nokta ile bakış noktası arasındaki t uzaklığı hesaplanır. Aynı doğrultuda birden fazla kesişim noktası bulunabilir. Bu durumda en küçük t değeri esas alınır. Böylece görünmeyen yüzeyler kaldırılmış olur.

Bu kısımda ışın izleme yönteminde kullanılacak temel matematiksel işlemler için gerekli [[vektörel]] ifadeler ve işlemler anlatılacaktır.

==== Işın İzlemede Kullanılan Temel Matematiksel İfadeler ====

===== Üç Boyutlu Uzayda Noktanın Tanımı =====
[[Üç boyutlu uzay]]da bir P noktası, kendine ait X, Y, Z koordinatları ile aşağıdaki gibi ifade edilebilir:

P = [ x y z ] **(2.4)**

===== Skaler Çarpım =====

İki vektörün skaler çarpım değeri karşılıklı olarak x, y ve z değerlerinin çarpımlarının toplamına eşittir. Skaler çarpımı * sembolü ile temsil edilirse V<sub>1</sub> ve V<sub>2</sub> vektörlerinin skaler çarpımı aşağıdaki gibi hesaplanır:

V<sub>1</sub> * V<sub>2</sub> = (V<sub>1</sub>X * V<sub>2</sub>X) + (V<sub>1</sub>Y * V<sub>2</sub>Y ) + (V<sub>1</sub>Z * V<sub>2</sub>Z) **(2.5)**

V<sub>1</sub> ve V<sub>2</sub> vektörlerinin boyunun 1 birim olduğu, yani her iki vektörün de normalize olduğu durumda, bu iki vektörün skaler çarpımı iki vektörün arasındaki [[açı]]nın [[kosinüs]] değerini verir. İki vektör arasındaki açının kosinüsü [[difüz]] aydınlatmada kullanılır.

===== Vektörel Çarpım =====
Vektörel çarpım işlemini x sembolüyle temsil edersek V1 ve V2 vektörlerinin vektörel çarpımı aşağıdaki gibi hesaplanır: 
V<sub>1</sub> x V<sub>2</sub> = [ V<sub>1</sub>Y* V<sub>2</sub>Z - V<sub>1</sub>Z* V<sub>2</sub>Y V<sub>1</sub>Z* V<sub>2</sub>X - V<sub>1</sub>X* V<sub>2</sub>Z V<sub>1</sub>X* V<sub>2</sub>Y - V<sub>1</sub>Y* V<sub>2</sub>X ] **(2.6)**

Vektörel çarpım, ışın izleme yönteminde üçgenlerin normalini bulmak için kullanılır. Yansıyan veya kırılan ışınların yeni doğrultularının hesaplanması için yüzeye dik olan vektörün, yani yüzey normalinin, bilinmesi gerekir.

Difüz ve speküler aydınlatma yapılırken de yüzey normali kullanılır. Ayrıca arka yüzey kaldırmada da hangi yüzün arka yüzey olduğunu belirlerlerken yüzey normali esas alınır. Bakış noktası ile arasında 90°'den daha büyük açı bulunan yüzeyler, arka yüzey kabul edilir.

Tüm bu işlemlerde kullanılacak olan yüzey normalinin birim vektör olması, yeni normalize olması, gerekir.

===== Barisentrik Koordinatlar =====
Üçgenin bir köşesinden başlanıp, kenarları belli katsayılarla çarparak başlangıçta alınan köşeye eklenirse, üçgen içinde istenen bir noktaya ulaşmak mümkündür. Kenarların çarpıldığı katsayılara Barisentrik Koordinatlar denir. Üçgen içindeki herhangi bir noktanın barisentrik koordinatlar cinsinden gösterimi aşağıdaki gibidir:

t (u, v ) = V<sub>0</sub> + u (V<sub>1</sub> – V<sub>0</sub> ) + v (V<sub>2</sub> – V<sub>0</sub>) **(2.7)**

Bu ifadedeki u ve v değerleri [[barisentrik koordinatlar]]dır ve aşağıdaki şartları sağlamalıdır:

u ≥ 0 ve v ≥ 0 için u + v ≤ 1

Barisentrik koordinatlar bu çalışmada hızlı kesişim testleri gerçekleştirilirken kullanılmıştır. [[Tomas – Möller kesişim testi]]nde Barisentrik koordinatlardan faydalanılarak daha kısa sürede kesişim testi yapılabilmektedir.

==== Işın – Yüzey Kesişim Testi ====
Orijine olan uzaklığı D olan, P<sub>n</sub> = [ A B C ] normaline sahip olan P yüzeyini denklemi aşağıdaki gibidir:

A<sub>x</sub> + B<sub>y</sub> + C<sub>z</sub> + D = 0	 **(2.8)**

Köşe koordinatları V<sub>i</sub> (X, Y, Z ) olan üçgenin oturduğu yüzeyin denklemi aşağıdaki gibi hesaplanabilir:

A * V<sub>o, x</sub> + B * V<sub>o, y</sub> + C * V<sub>o, z</sub> + D = 0 **(2.9)**

2.9 ifadesinden D değeri bulunur. Eğer P yüzeyi ile R ışını kesişiyorsa, R'nin o noktaya karşılık gelen t değeri için yüzey denklemi sağlanmalıdır.

A * (X<sub>0</sub> + tX<sub>d</sub>) + B * (Y<sub>0</sub> + tY<sub>d</sub>) + C * (Z<sub>0</sub> + tZ<sub>d</sub>) + D = 0 **(2.10)**

2.10 ifadesi t'ye göre yeniden düzenlenirse, başlangıç noktası ile yüzey arasındaki uzaklık belirlenmiş olur:

t = - (A * X<sub>0</sub> + B * Y<sub>0</sub> + C * Z<sub>0</sub> ) / (A * X<sub>d</sub> + B * Y<sub>d</sub> + C * Z<sub>d</sub> ) **(2.11)**

Eğer t < 0 ise kesişim yoktur. Eğer t > 0 ise kesişim vardır ve kesişim noktası I aşağıdaki gibi hesaplanabilir:

I (X, Y, Z) = (X<sub>0</sub> + tX<sub>d</sub>, Y<sub>0</sub> + tY<sub>d</sub>, Z0 + tZ<sub>d</sub> ) **(2.12)**
==== Işın-Üçgen Kesişim Testleri ====
[[3B]] nesneler genellikle üçgenlerden oluşacak şekilde modellenir. Bu sebeple kesişim testi [[algoritma]]larının çoğu üçgenler üzerine yoğunlaşmıştır.

===== Alan Hesabı İle Işın – Üçgen Kesişim Testi =====
Bu yöntem, ışın – üçgen kesişim testleri arasından en basit olanıdır. Öncelikle ışın – yüzey kesişim testi yapılmalıdır. Daha sonra ışın ve yüzeyi oluşturan üçgenin köşe noktaları görüntü düzlemine perspektif olarak izdüşürülür. [[Kesişim noktası]] ile üçgenin ikişer noktası sıra ile alınarak üç tane alt üçgen elde edilir. Bu üçgenlerin alanları hesaplanarak toplanır. Elde edilen toplam alan, kesişim testi yapılan üçgenin alanına bir ε kadar yakınsa ışın üçgenin içindedir yani ışın ile üçgen kesişmektedir denir.

===== Açı Hesabı ile Işın -Üçgen Kesişim Testi =====
Işın [[düzlem]] kesişim testinden elde edilen kesişim noktasının üçgenin içerisinde olup olmadığının kontrolü için kullanılan diğer bir yöntem de [[açı]] testidir. Yine ilk olarak ışın – yüzey kesişim testi yapılmalıdır. Daha sonra ışın ve yüzeyi oluşturan üçgenini köşe noktaları görüntü düzlemine perspektif olarak izdüşürülür. Kesişim noktası ile üçgenin ikişer noktası sıra ile alınarak üç tane üçgen elde edilir. Bu üçgenlerin I noktasını merkez nokta kabul eden açıları hesaplanarak toplanır. Elde edilen toplam açı 360° ise ışın üçgenin içindedir yani ışın ile üçgen kesişmektedir denir.

===== Tomas Möller Işın – Üçgen Kesişim Testi =====
Yukarıda anlatılan tekniklerin her ikisi de kesişim testi yapmadan önce ışın – yüzey kesişim testi yapılmakta, daha sonra perspektif izdüşümü yapılmaktadır. Böylece problem [[3B]]'dan [[2B]]'a indirgenmekte ve test esnasında 2B noktanın 2B üçgenin içinde olup olmadığı araştırılmaktadır. Ancak tüm bu işlemler için öncelikle yüzey denkleminin belirlenmesi, dolayısı ile normalin hesaplanması gerekmektedir. Elbette ki kesişim testine geçilmeden önce yapılan bu işlemler algoritmanın yavaş çalışmasına neden olmaktadır.
Bunun yerine kullanılan Tomas – Möller kesişim testinde yüzey normalinin hesaplanması gerekmemektedir.

====== Kesişim Testi Algoritması ======
Başlangıç noktası R<sub>0</sub> olan ve R<sub>d</sub> doğrultusu boyunca ilerleyen R vektörünü aşağıdaki gibi tanımlamıştık

R = R<sub>0</sub> + t R<sub>d</sub>, t > 0 **(2.1)**

Kesişim testi yapılacak olan üçgenin köşeleri V<sub>i</sub> ise, üçgen üzerindeki herhangi bir t (u, v ) noktasının barisentrik koordinatlarını aşağıdaki gibi ifade etmiştik:

t (u, v ) = V<sub>0</sub> + u (V<sub>1</sub> – V<sub>0</sub> ) + v (V<sub>2</sub> – V<sub>0</sub>) **(2.7)**

R ışını, verilen üçgeni bir t (u, v ) noktasında kesiyorsa, aşağıdaki ifade sağlanmalıdır:

R<sub>0</sub> + t R<sub>d</sub> = V<sub>0</sub> + u (V<sub>1</sub> – V<sub>0</sub> ) + v (V<sub>2</sub> – V<sub>0</sub>) **(2.13)**

2.13 ifadesi düzenlenirse, u, v ve t'ye bağlı bir lineer denklem sistemi elde edilir. Bu sistemin çözülmesi halinde u, v ve t bulunur. Görüldüğü gibi bu yöntemde yüzey normali ve perspektif izdüşüme gerek yoktur.

====== Algoritmanın Uygulanması ======
Tomas – Möller yöntemine ilişkin yalancı dil kodu (pseudocode) aşağıda verilmiştir:

IşınÜçgenKesişimi (o, d, vo, v1, v2 )
# e1 = v1 - v2
# e2 = v2 – v0
# p = d x e2
# α = e1 * p
# if (α > -ε and α < ε ) return (REJECT, 0, 0, 0 );
# f = 1 / α
# s = o - vo
# u = f (s * p )
# if (u < 0.0 or u > 1.0 ) return (REJECT, 0, 0, 0 );
# q = s x e1
# v = f (d * q )
# if (v < 0.0 or u + v > 1.0 ) return (REJECT, 0, 0, 0 );
# t = f (e2 * q )
# return (INTERSECT, u, v, t );

=== Gölgeler ===
Bir yüzeye [[Işık|ışığın]] gelmesini engelleyen başka bir [[yüzey]] varsa, ışığın ulaşamadığı yüzey [[gölge]]de kalmış olur. Gölge testi için, kesişim noktasından ışık kaynağına yollanan ışınlar ile diğer nesnelerin kesişimleri araştırılır. Eğer kesişim tespit edilirse yüzey gölgelenir.

Gölgelemenin gerçekleşmesi için, test için gönderilen ışından elde edilen kesişim noktası ile testi yapılan yüzey arasındaki uzaklığın, yüzeyin ışık kaynağına olan uzaklığından daha küçük olması gerekir.


=== Aynasal Yansıma ===
Diğer yöntemlerde çok zor tanımlanmasına rağmen, ışın izleme yönteminde yansıyan ve kırılan ışınlar mükemmel şekilde modellenebilir. Böylece son derece gerçekçi görüntüler elde edilebilir.

Eğer bir yüzeyin yansıtıcılık özelliği varsa, bu yüzeye çarparak yansıyan ışın diğer bir yüzeye çarptığında, bu yüzeyin rengi yansıtıcılık özelliği bulunan yüzey üzerinde görülür. Elbette bu işlem için de derinliği belirlenmiş özyinelemeli bir algoritma koşulmalıdır.

Yansıma değerinin belirlenmesi oldukça kolay bir işlemdir. Gerekli olan bir nokta ve bir doğrultudur. Nokta, ışın ile yansıtıcı yüzeyin kesişim noktasıdır ki artık yeni bir başlangıç noktası olmuştur. Bu noktadan yansıyacak olan ışının doğrultusu, gelen ışının doğrultusuna ve normale bağlıdır. Zira gelen ışın ile normal arasındaki açı, yansıyan ışın ile normal arasındaki açıya eşit olmalıdır. N ilgili yüzeyin normali, I gelen ışının olmak üzere Rref yansıma doğrultusu aşağıdaki gibi hesaplanır:

R<sub>ref</sub> = I – 2 (I * N ) * N **(2.14)'''

----

POV-Ray gibi ışın izleme programları ise simüle edilen bir kamera ile başlarlar ve ışık ışınlarını sahneye yollarlar. Kullanıcı kameranın, ışık kaynaklarının, nesnelerin yerini ve bunların yüzey özelliklerini belirler, eğer isterse sahneye sis, duman, ateş gibi atmosferik etkiler de ekleyebilir.

Sonuç görüntüdeki her piksel için bir ya da daha çok ışın kameradan sahneye yöneltilir ve sahnedeki bir nesne ile kesişip kesişmediğine bakılır. Kameradan çıkan bu ışının bir nesneyi kestiği her noktadaki yüzey rengi hesaplanır. Bunun için ışınlar sahnedeki her ışık kaynağına da yönlendirilir ve böylece kaynaklardan gelen ışık miktarı da hesaplanır. Benzer şekilde her yüzey noktasının gölgede kalıp kalmadığı hesaplanır. Yüzeyin şeffaf olup olmamasına göre de ne kadar ışığı geçirdiği ve ne kadar ışık kırılmasına yol açtığı da hesaplanarak nihai renk belirlenir.

## Ayrıca bakınız
* POV-Ray

## Dış bağlantılar
* The Ray Tracing News - (İngilizce)- Kısa bir araştırma ve diğer kaynaklara linkler]
* (İngilizce bir tez) - Interactive Ray Tracing: The replacement of rasterization? - A thesis about real time ray tracing and it's state in december 2006
* (İngilizce) - Gerçek zamanlı ışın izlemeyi kullanan oyunlar
* (İngilizce) - C++ dili ile ışın izleme uygulamaları üzerine bir takım kılavuzlar
* Internet Işın izleme yarışması  - sabit ve anime kategoriler

## Işın izleme yazılımları
* Blender 
* BRL-CAD 
* Bryce (software) 
* Indigo  - an unbiased render engine
* jawray - A portable raytracer written in C++ 
* Kray  - global illumination renderer
* OpenRT  - realtime raytracing library
* Optis  - Straylight and illumination software with full CAD integration (Solidworks and Catia V5)
* OSLO  - Lens design and optimization software; OSLO-EDU is a free download
* PBRT  - a Physically Based Raytracer
* Pixie 
* POV-Ray 
* Radiance 
* Raster3D
* Rayshade 
* RayTrace  - open source C++ software
* RealStorm Engine  - a realtime raytracing engine
* RPS Ray Tace  - AccuRender Ray Trace for SketchUp
* SSRT - C++ source code for a Monte-carlo pathtracer - written with ease of understanding in mind.
* Sunflow  - Written in Java (platform independent)
* Tachyon 
* TracePro  - Straylight and illumination software with a CAD-like interface
* TropLux - Daylighting simulation
* Yafray 
* Zemax  - Well Known Commercial Software for Optics design
* More ray tracing source code links