Ekran Kartlarının Geleceği – Eski Teknik, Yeni Nesil
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
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.
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.
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.
Ö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?
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.
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.
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 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 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.
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.
Yıl 2018 ve Nvidia Ray Tracing teknolojisini yeni bir buluş gibi GTX serisi kartların yerine RTX olarak duyurdu ve bu güzel makaleniz neredeyse 10 yıl önceden yazılmasına rağmen günümüzü izah etmiş.Mükemmel bir öngörünüz var.Harika bir yazı olmuş.
@Emrah Beki:
Aslında NVidia firması ray tracing teknolojisini yeni buluş gibi sunmadı, GPU’da doğrudan api cağrılarıyla erişilebilecek, işi yalnızca “ray tracing” olan teknolojinin nihayet erişilebilir olduğunu gösterdi. Gerçek zamanlı ray tracing, CG’nin kutsal kaselerinden biridir. Ki hala daha o rüya gerçekleşmedi, ancak RTX’e sağlam bir bebek adımı diyebiliriz.
RTX, tüm frame’i ray tracing’le oluşturmaya yetmese de gerçek zamanlı ray kullanılırsa daha doğru görünebilecek reflection, ao, shadow vs. efektleri daha az hileyle, daha kısıtsız görüntüleyebilmeyi hedefliyor. Zira bilinen raster dünyasında bu efektlerin çoğu kabaca render edilmiş görüntüyü işlemekten, post-process etmekten ibaret.
2005 yılında Almanya’daki CeBIT fuarına katılmıştım. Bir üniversitenin geliştirdiği realtime raytracing engine’i incelemiştim. 4-5 FPS civarlarındaydı, sanırım 800×600 gibi bir çözünürlük kullanıyordu. Nasıl bir donanım üzerinde çalıştığını sorduğumda “evindeki güçlü bir PC’de çalışır” demişlerdi. Kendim de o zamana kadar CPU’ya yüklenerek bu işi yapmaya çalıştığım ve genellikle realtime’ı geç, render eden sahneler elde etmiş olduğum için özel bir donanım kullanmamış olmalarına şaşırmıştım. Nasıl yaptıklarını sorduğumda bir çok yeni optimizasyon bulduklarını, bunlardan en önemlisinin “ray grouping” olduğunu, birbirine paralel sayılabilecek düzeydeki rayler için ortak hesaplamaları frame’in başında yaptırıp, precalculated değerler kullandıklarını anlatmışlardı.
Düşün, yıl 2005, karşımda ek donanım gerektirmeden çalışan, oldukça da başarılı duran bir realtime raytracing engine var. 2009 yılına geldiğimizde “yeter artık, nerede kaldı bu raytracing destekli donanımlar” diye bu makaleyi yazmıştım. Asıl beklentim sadece RT için gerekli vektör hesaplarını falan hızlandırması değildi, bu tür mümkün olan optimizasyonları da donanım seviyesinde yapacak olmasıydı. Yani bizden yine geometrileri, textureları, materyalleri, raylerin sönümlenme kuralları gibi bazı bilgileri alacak, sonra tüm renderingi hardware olarak parametrik açılıp kapatılabilen optimizasyonları da kullanarak yapacaktı. Ben ne bileyim bu işin 2019’u bulacağını, hala da yetersiz seviyede kalacağını. Benim yıllar içerisinde şu donanımın 2010 öncesinde çıkmamış olması ile ilgili tek teorim “ticari planlamalar” oldu. Rasterization’ın suyunu çıkarmadan teknolojiyi değiştirmek istemediler. Yoksa 2005’de 4-5 FPS olarak gördüğüm engine’i hiç bir ek optimizasyon yapmadan günümüz donanımlarında zaten 30-40 FPS çalıştırırsın. NVidia, ATI, Intel ve diğer ekran kartı üreticilerinden tek beklentim bunu daha yüksek çözünürlükte, daha detaylı yapabilmemizi sağlamaları idi. Hala bulunduğum nokta hayal kırıklığıdır.