Işın izleme

Işın izleme (İngilizce: Ray tracing), 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.

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 modellemeye çalışmasıdır.

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 algoritmayı 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 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şı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.

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.

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

Bakış noktasından yollanan ve görüntü düzlemindeki her pikselin 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.

Anlaşılacağı gibi, birincil ışının doğrultusunun hesaplanması için iki noktaya ve bir uzaklık bilgisine ihtiyaç vardır. İki noktadan birincisi genellikle R0 = [ 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, Rd’nin normalize edilmiş halini bulmak için X, Y ve Z koordinatlarını ayrı ayrı t’ye bölmek yeterlidir. Rd’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ı R0’ın ve doğrultu vektörü olan Rd’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 koordinatları 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 R0 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.

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.

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.

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 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 koordinatları 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.

V1 ve V2 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, ışı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.

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

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.

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.

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.

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.

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.

Bir yüzeye ışığın gelmesini engelleyen başka bir yüzey varsa, ışığın ulaşamadığı yüzey gölgede 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.

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.

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.