2000 yılından bu yana ekran kartlarının gelişimi denildiği anda akla hep shader teknolojisinin bir adım daha ileri gidişi, bellek ve GPU işlem kapasitesinin artması geliyor. Peki nereye kadar böyle devam edecek? Aslında hemen hemen bu dönemin sonuna geldik sayılır. Birkaç senedir NVidia, ATI gibi büyük ekran kartı üreticileri eski bir dost olan Ray Tracing ile flört etmeye başladı.

Eski (şu an için kullanılan) metoda biraz göz atalım.

Rasterization

Üçgenlerden Oluşan Bir Arazi

Üçgenlerden Oluşan Bir Arazi

Eski metod, Rasterization şeklinde isimlendirilmiştir. Herşey iki boyutlu çokgenler üzerinden oluşturulmaktadır. Genellikle üçgen ya da dörtgen kullanılarak ekrandaki objeler oluşturulur.

Bir üçgen nasıl çizilir? Elimizde bir kağıt varsa ve insan kadar gelişmiş bir canlıysak bu o kadar da zor bir iş değildir. Ancak bilgisayarları ele aldığımız durumda ekranda bir matris şeklinde dizilmiş pixeller karşımıza çıkıyor ve işimiz biraz zorlaşıyor. Düşünün ki kareli metod defterindeki karelerin içini karalayarak bir üçgen çizmemiz gerekiyor. Üçgeni öncelikle elimizle karelerden bağımsız olarak aşağıdaki gibi çizebiliriz.
 
Üçgen Çizimi 1

Üçgen Çizimi 1

Buradaki siyah kareler bilgisayar ekranındaki pikselleri temsil etmektedir. Üçgeni satır satır çizeceğimizi varsayalım. Öncelikle bulmamız gereken her satırda hangi karelerin ilk ve son kareler olarak seçilmesi gerektiğidir. Bu kareleri aşağıdaki resimde mavi ile işaretledik.

Üçgen Çizimi 2

Üçgen Çizimi 2

Artık tek yapılması gereken her satırdaki mavi kareler arasında kalan bölgeyi yatayda doldurmak. Bunun sonucunda ise aşağıdaki görüntü elde edilir.

Üçgen Çizimi 3

Üçgen Çizimi 3

Özetle Rasterization dediğimiz metot kullanıldığında çizim ekrandaki her bir çokgen için satır satır yapılır.

Üçgenler ya da dörtgenler karmaşık bir objeyi modellemekte yeterli olur mu? Örneğin bir insan modeli nasıl görünecektir?

Bruce Lee - Wireframe

Bruce Lee - Wireframe

Görüldüğü gibi Bruce Lee’yi tanımakta hiç zorlanmıyoruz. Ancak bu modeldeki çokgen sayısı epey bir yüksektir ve oyunlardaki gibi gerçek zamanlı olarak kullanılmak için ideal bir model değildir. Eğer yumuşak hatlara sahip bir model istiyorsak ya yüksek adette çokgen kullanacağız ya da ekran kartlarının shader özelliklerini kullanarak bazı çözümler üreteceğiz.

Şimdi gelelim diğer metoda.

Ray Tracing

Ray Tracing, gerçek yaşama uygun görüş simülasyonu için çok daha iyi bir tekniktir. İnsan gözü etrafındakileri nasıl görür, hemen hemen bunu bire bir simüle etmektedir.

Gerçek hayatta gözümüz ışık kaynağından gelen ve diğer objelerin yansıttığı ışığı toplar. Ancak bir bilgisayar ekranı söz konusu olduğunda ekrandaki tüm piksellerin ışık toplayabilmesi için ışık kaynağından oldukça yüksek sayıda (güneş mesafesindeki bir ışık kaynağı göz önüne alındığında sonsuza gidebilecek miktarda) ışın atmak gerekmektedir. Bu nedenle bilgisayarda Ray Tracing gerçek hayata göre ters bir mantıkla uygulanır. Işık kaynağından izlemciye değil izlemciden ışık kaynağına doğru ışınlar atılır. Yani ekranda kaç adet piksel var ise o sayıda ışın atılacaktır.

Ray Tracing Java Simülatör (2 Boyutlu)

Bu linkteki simülatör Ray Tracing’in çalışma presibini anlamanıza yardımcı olacaktır.

Ray Tracing sonucunda nasıl bir görüntü oluşur? Bunun Rasterization’a göre avantajı nedir? Oluşan görüntü şu şekildedir.

Bir Ray Tracing Örneği

Bir Ray Tracing Örneği

Bu örnekte de görüldüğü gibi Ray Tracing oldukça gerçekçi ve yumuşak hatlara sahip objeler ortaya çıkmasını sağlar. En önemli özelliklerinden biri de yansıma ve gölge gibi Rasterization tekniğinde oldukça yüksek maliyetli hesaplamalar gerektiren ve bu derece gerçekçi olamayan efektleri oldukça kolay ve gerçekçi bir biçimde hesaplayabilmesidir.

Peki Ray Tracing ile ne derece gerçekçi görüntüler elde edilebilir? Buna bir örnek görelim.

Tay Tracing - Cam Yüzeyler

Ray Tracing - Cam Yüzeyler

Ray Tracing’in en başarılı olduğu konulardan biri materyallerdir. Resimde de görüldüğü gibi cam yüzeylerin sahip olduğu saydamlık, ışık kırılması, gölge-yarı gölge v.b. özellikler gerçeğe çok yakın olarak simüle edilebilmektedir.

"Rasterization" - "Ray Tracing" Kıyaslama

"Rasterization" - "Ray Tracing" Kıyaslama

Rasterization ile Ray Tracing’i kıyaslayacak olursak soldaki gibi bir sonuç ile karşı karşıya geliriz. Görüldüğü üzere her iki resimde de aynı objeler, aynı kamera açısı, aynı desenler kullanılmıştır. Ancak Ray Tracing tekniğinde çaydanlık ve kaşık metalik özellikleri nedeniyle sadece ışığı değil çevredeki diğer objeleri de yansıtmaktadırlar. Bunun haricinde de genel olarak Ray Tracing metodunda objeler daha yumuşak hatlara sahiptir ve çevreyle daha uyumlu olarak resmin içinde yer almaktadırlar.

Ray Tracing günümüzde gerçek zamanlı olarak pek kullanılmamaktadır. Örnekleri mevcutsa da bu güne kadarki denemelerde yüksek çözünürlüklerde ve detaylı bir biçimde kullanıldığında en fazla saniyede birkaç kare çizdirilebilmektedir. Diğer bir deyişle oldukça düşük FPS’ler elde edilmektedir. Ancak intel, nvidia, amd gibi firmalar yakın gelecekte bunu değiştirecek donanımları hazırlamaya başladılar bile.

Quake Wars Ray Tracing 1

Quake Wars - Ray Tracing 1

Quake Wars oyununun Intel tarafından Ray Tracing kullanan bir versiyonu hazırlanmıştır. Oyunun görüntü kalitesi ve efektleri ciddi bir oranda yükselmiştir.

Quake Wars Ray Tracing 1

Quake Wars - Ray Tracing 2

Rasterization ve Ray Tracing’in Kıyaslaması, Avantaj ve Dezavantajları

Rasterization’ın en büyük özelliği bir çokgenin çizilme zamanının oldukça kısa olmasıdır. Örneğin ekranı kaplayan büyüklükte bir üçgen söz konusu olduğunda Rasterization hızlı bir biçimde bu üçgeni çizebilir. Ancak Ray Tracing kullanıldığı taktirde bu üçgenin yer aldığı bölgedeki tüm pikseller için birer (veya birden fazla) ışın atılması gerekmektedir ki bu çok daha yavaş bir işlemdir. Ancak ekrandaki çokgen sayısı arttıkça Rasterization’ın dezavantajları ortaya çıkmaya başlar. Bazı durumlarda üçgenlerin bir kısmı tamamen ya da kısmen fuzuli olarak çizdirilebilir. Bunun nedeni arkada kalan, önüne başka çokgenler çizdirilen yüzeylerdir. Ancak Ray Tracing’de her zaman ekrandaki piksel sayısı kadar ışın atılacaktır. Bu ışınlar her doğrultuda (şeffaflık durumu haricinde) en yakın yüzeye çarpacak ve arkasındaki yüzeylerle ilgili bir işleme tabi tutulmayacaklardır. Yine de her durumda o doğrultudaki en yakın çarpışma yapan yüzeyi bulmak için farklı algoritmalar kullanmak gerekmektedir.

Rasterization’ın Ray Tracing’e göre günümüzdeki en göze çarpan avantajı donanımların bu teknik için gerekli fonksiyonları donanımsal olarak desteklemeleridir. Vertex Shader, Pixel (Fragment) Shader, Geometry Shader gibi özellikler CPU’yu rahatlatarak gerekli işlemlerin GPU üzerinde yapılmasını sağlamakta ve tamamen bu hesaplara özel optimize edilmiş ekran kartları çok yüksek hızlara ulaşılmasına olanak tanımaktadır. Gelecekte Ray Tracing’in ekran kartları tarafından desteklenmeye başlaması ile Rasterization’ın bu avantajı silinecek ve çok daha gerçekçi üç boyutlu sahneler elde etmemizi sağlayan Ray Tracing, oyunlar ve uygulamalar tarafından yeni standart olarak benimsenecektir.

İşin en komik yanı ise Ray Tracing’in yeni değil, oldukça eski bir teknoloji olması ve gerçek zamanlı olarak bile birçok kullanım örneğinin bulunmasıdır. Sanırım donanım üreticileri Rasterization ile pazardan elde edebilecekleri kârın son damlasına kadar suyunu sıkmadan köklü bir değişikliğe gitmek istemediler. Ancak artık zamanıdır, yakında hep beraber Ray Tracing tekniğinin önümüze sunacağı inanılmaz gerçekçi dünyaların büyüsü ile sanal ortamlarda yolculuk ediyor olacağız.