Anasayfa Makale Ray Tracing Hakkında Bilmeniz Gereken Her Şey

Ray Tracing Hakkında Bilmeniz Gereken Her Şey

Grafik işlemede önemli bir dönüm noktası olan Ray Tracing teknolojisi hakkında bilmeniz gerekenleri bu yazıda anlatıyoruz.

Nvidia, aylardır RTX adını verdiği Ray Tracing teknolojisini yaygınlaştırmak için çalışıyor. Oyun geliştiricileri ve oyun motoru üreticileri de bu çağrıya karşılık verdi. Şirket, yakın zamanda sunduğu bir sürücü güncellemesiyle GTX ekran kartlarına da Ray Tracing desteği getirdi. Böylelikle bu teknolojiyi kullanabilecek yeni kullanıcı kitlesine ulaşıldı. Tüm bunlar olurken birçok oyun da Ray Tracing teknolojisini desteklemeye başladı. Peki RTX ve Ray Tracing nedir? Bu soruyu cevaplamadan önce Ray Tracing olmadan oyunlarda aydınlatma ve gölgeler nasıl çalışıyor buna bakalım.

Oyun Grafiklerinin Oluşturulması

Düzgün şekilde işleyen ve gözüken bir dünyanın sanal simülasyonunu oluşturmak oldukça karmaşık bir işlem. Yer çekimi ve fizik kanunlarını bir kenara bırakıp dünyanın nasıl gözüktüğünü düşünelim. Etrafa yayılan sınırsız ışık demeti, bunların yüzeylerdeki yansımaları ve cisimlerin içinden geçişi her nesnenin moleküler özelliklerine göre şekillenir. Böylesine sonsuz bir kaynağı bilgisayarların işlem gücüyle çözmek şu an için mümkün değil. Bu yüzden günümüz grafik işleyicileri farklı yaklaşımlar geliştirmiştir.

Pikselleştirme olarak adlandırılan işlemde genellikle çokgenler ve özellikle de üçgenler kullanılır. Oyunlarda milyonlarca çokgen kullanılıyor ve pikselleştirme işlemi tüm bu verileri ekranda görüntülenecek şekilde iki boyutlu çerçevelere dönüştürüyor.

Yoğun şekilde matematik içeren bu işlemde her çokgenin gösterileceği ekran oranı belirleniyor. Tek bir üçgen tüm ekranı kaplayabileceği gibi sadece birkaç pikseli de kaplayabilir. Pikseller kararlaştırıldığında ise dokular ve aydınlatma da uygulanıyor. Yıllar içerisinde donanım ve kullanılan teknikler pikselleştirme işlemini daha hızlı hale getirdi ve modern oyunlarda milyonlarca görünür poligon bulunuyor. Üstelik bunlar inanılmaz hızlarda işleniyor.

Gölge haritaları, yumuşak gölgeler, ortam aydınlatması ve daha fazla grafik tekniğiyle birlikte nesnelerin görünümü daha gerçekçi hale geldi. Her çerçeve için milyarlarca hesaplama yapılması gerekse de modern grafik işlemciler saniyede trilyonlarca hesaplama yapabiliyor. Fakat bütün bunlara rağmen oyunlardaki ışıklandırma ve gölgeler nesnelere göre hareket etmiyor. İşte Ray Tracing tam da burada devreye girerek oyunlara gerçek aydınlatma ve gölge desteği getiriyor.

Rasterization ve Ray Tracing

Ray Tracing Nedir?

Ray Tracing, üç boyutlu bilgisayar grafiklerinde, ışığın yolunu bir görüntü düzleminde piksel olarak izleyip, sanal nesnelerle karşılaşmasının etkilerini simüle ederek görüntü oluşturmada kullanılan bir tekniktir. RTX ise NVIDIA’nın ekran kartlarında kullandığı Ray Tracing teknolojisine verdiği isimdir.

Ray Tracing yaklaşımı ilk olarak Turner Whitted tarafından 1979 yılında ortaya koyuldu. Turner; gölgeleri, yansımaları ve daha fazlasını içeren etkileyici görüntülerin nasıl hesaplanacağını açıkladı. Bu yüzden de Turner şu anda Nvidia’nın araştırma biriminde çalışıyor. Ray Tracing yönteminin en önemli problemi ise pikselleştirmeye göre daha kompleks işlemlere ihtiyaç duymasıydı.

Ray Tracing yöntemi, üç boyutlu bir dünyada ışık demetinin izlediği yolu takip ediyor. Üç boyutlu dünya içerisinde tek bir piksel için bir ışın çiziliyor ve bu ışının ilk çarptığı poligon olması gerektiği gibi renklendiriliyor. İyi bir sonuç olmak için de tek bir piksel için birçok ışın demeti kullanmak gerekiyor. Çünkü bir ışın bir nesneyle kesiştiğinde, çokgen üzerindeki bu noktaya ulaşabilecek ışık kaynaklarını hesaplamak ve bunun için de daha fazla ışın kullanmak gerekir. Yansıma özelliği, materyalin rengi, şekli gibi ek özellikler için de daha fazla ışın kullanılıyor.

Kıscası Ray Tracing, oyunlardaki ışıklandırmayı gerçek dünyaya, güneş ışığının sağladığı aydınlatmaya benzetme işlemidir. Tek bir ışık kaynağı dünyayı aydınlatır. Diğer ışıklar ve gölgeler ise bu kaynaktan elde edilen yansımalar ve gölgelerden oluşturulur. Ray Tracing’in mantığı da ışıkların yolunu, yansımasını ve buna göre oluşturduğu gölge ve aydınlatma oranını hesaplayarak grafikleri mümkün olduğunca gerçekçi hale getirmektir.

Bir ışık kaynağından tek bir piksele düşen ışığın miktarını hesaplamak için ray tracing formülü; ışığın ne kadar uzakta olduğuna, ne kadar aydınlık olduğuna, ışık kaynağına göre yansıyan yüzeyin açısına göre yansıyan ışığın sıcaklık değerini hesaplar. Bu süreç sahnedeki diğer nesnelerden yansıyan ışıklar gibi diğer ışık kaynakları için de tekrarlanır. Hesaplamalar materyalin yüzeyine göre uygulanır. Cam ya da su gibi geçirgen ya da yarı geçirgen yüzeyler ışığı yansıtır ve daha fazla işlem gücü gerektirir. Öte yandan tüm bunların bir sınırı vardır. Çünkü sınır olmadan ışınları izlemek sonsuza kadar sürebilir.

BVH Algoritması

Nvidia’ya göre en sık kullanılan ışın izleme algoritması BVH (Bounding Volume Hierarchy) Traversal‘dır. Bu algoritmayı DirectX Raytracing API kullanır ve Nvidia’nın RT çekirdekleri hızlandırır. Işınlarla çokgenlerin kesişme hesaplamalarını optimize etmek kritik önem taşıyor. Yüzlerce nesneye sahip bir sahneyi ele aldığımız zaman, binlerce potansiyel poligona sahip oluruz ve ışının hangi poligonlarını kestiğini hesaplamaya çalışırız. Bu normal şekilde bir arama problemi oluşturur ve çok uzun zaman alır. BVH ise bu süreci her nesnenin bir kutunun içerisine alındığı bir nesneler ağacı oluşturarak hızlandırır.

Örneğin bir tavşan modelini ele aldığımızda BVH kutusu ilk olarak tüm tavşanı içerir. Bu kutuyu kesen ışınların hesaplaması yapılır. Eğer kesen bir ışın yoksa bu kutu için daha fazla işlem yapılmaz. Kesen ışın olduğunda ise BVH algoritması kesilen kutunun içerisindeki daha küçük kutuları inceler. Bu işlem istenilen noktaya ulaşılıncaya kadar devam eder.

BVH hesaplamaları CPU ya da GPU üzerinden yapılabilir ancak bunun için ayrılmış bir donanım hesaplamaları büyük ölçüde hızlandırabilir. Bunun için Nvidia RTX kartlarının RT çekirdekleri bu hesaplamaları yürütüyor. BVH yapısına ve sahnenin karmaşıklığına göre saniyede hesaplanması gereken ışın miktarı değişiyor. Nvidia’nın RT çekirdekleri bu algoritmayı CUDA çekirdeklerine göre 10 kat daha hızlı yürütebiliyor. CUDA çekirdekleri de bu işlemi CPU çekirdeklerine göre potansiyel olarak on kattan daha hızlı gerçekleştiriyor.

Her piksel için kaç ışının gerekli olduğu ise göreceli bir kavram. Düz ve yansımayan bir zeminle uğraşmak kıvrımlı ve parlayan bir zemine göre daha kolaydır. Özellikle aynalardan oluşan bir ortamda yüzlerce ışın gerekli olabilir. Bir sahne için tam ışın izleme yapmak için piksel başına bir düzine ya da daha fazla hesaplama gerekebilir. Daha fazla ışınla daha iyi sonuçlar alınabilir.

Karmaşıklığına rağmen günümüz filmleri genellikle Ray Tracing yöntemini kullanıyor ve yüksek detaylı bilgisayar resimleri oluşturuyor. Saniyede 60 karede çekilen 90 dakikalık bir film için 324,000 kare gerekir ve her kare saatlerce bilgisayar işlemi gerektirir. Oyunlarda tek bir GPU ile bunu yakalamak mümkün değildir. O yüzden bir Hollywood filminde gördüğünüz çözünürlüğü ve kaliteyi elde edemezsiniz -en azından şimdilik.

Hibrit Grafik İşleme

Bilgisayar donanımları pikselleştirme işlemini daha hızlı hale getirmek için 20 yıldan daha fazla bir süredir uğraşıyor ve oyun tasarımcıları başarılı sonuçlar elde ediyor. Ancak düzgün aydınlatma, gölgeler ve yansımalar halen sorun çıkarıyor.

Hibrit grafik işleme ise geleneksel pikselleştirme teknolojilerini bir çerçevedeki çokgenleri işlemek için kullanıyor ve elde edilen sonuçları ihtiyaç olan yerde Ray Tracing ile birleştiriyor. Ray Tracing işlemi daha az karmaşık hale geliyor ve yüksek FPS değerlerine olanak sağlanıyor. Ancak performans ve kalite arasındaki denge hiçbir zaman ortadan kalkmıyor.

Işın izleme yönteminin nasıl çalıştığını ve hesaplama karmaşıklığının sebebini daha iyi anlamak için belirli teknikleri gözden geçirelim.

Yansımalar

Screen Space Reflections (SSR) gibi önceki aynalama ve yansıma teknikleri bir takım dezavantajlara sahipti. Bu teknikler çerçevede olmayan nesneleri gösteremiyor ya da olanları da kısmen gösterebiliyordu. Ray Tracing kullanılarak oluşturulan gölgeler ise üç boyutlu dünyada oluşturulduğu için sadece ekranda gözükenlerle sınırlı olmadan düzgün yansımalar elde edilebiliyor.

Battlefield 5 için ışın izleme kullanarak yansımalar oluşturulmak istenildi. Çerçevenin grafik işlemesi yapıldığında piksel başına bir ışın kullanılarak görünmesi gereken yansıma varsa oluşturulmaya çalışıldı. Ancak çoğu yüzey yansıtan özellikte değildi ve bu aşırı yük getirdi. Optimize edilmiş Battlefield 5 algoritması ise sadece yansıyan yüzeyler için gerekli ışınları hesaplıyor ve yarı yansıtan yüzeylerde de iki piksel için bir ışın kullanıyor.

Çoğu yüzey yansıtan özellikte olmadığı için etki genellikle göze çarpmıyor ancak az işlem gücü gerektiriyor. Çok yansıyan materyalin olduğu sahnelerde ise daha fazla ışın ve işlem gücü gerekiyor. Bu yüzden RTX 2080 Ti ile bile 1080p çözünürlükte 54 FPS değerinde kalınabiliyor.

Gölgeler

Yansımalarda olduğu gibi gölgeler için de Ray Tracing ile birden çok yaklaşım kullanmak mümkün. Işın izleme ile birlikte oluşturulan gölgelerde yüzeydeki her piksel için bir ışık kaynağından çıkan bir ışın gereklidir. Eğer ışın, yüzeye ulaşmadan önce bir nesne ile kesişirse o piksel daha koyu olur. Işık kaynağına uzaklık, ışığın parlaklığı ve rengi de hesaplamanın içine katılır.

Ray Tracing, geliştiricilere gölgeleri işlemek için birçok araç sunuyor. Az önce bahsedilen teknikten daha karmaşık ama gerçek dünya algısına yakın teknikler de mevcut. Örneğin aşağıda Shadow of the Tomb Raider oyunu için Ray Tracing ile oluşan gölge farkını görüyorsunuz.

Çok sayıda ışık kaynağı bulunuyor. Mum veya ampül gibi tek doğrultuda ışık veren ufak ışık kaynaklarından spot ışıklara, neon işaretlere varıncaya kadar farklı ışık kaynakları farklı davranışlar sergiliyor. Ray Tracing gölgelerin daha yumuşak ve kompleks bir yelpazede daha doğru şekilde oluşmasına olanak sağlıyor. Yukarıdaki örnekte olduğu gibi de ortaya ikna edici sonuçlar çıkıyor.

Ortam Aydınlatma

Ortam aydınlatma, gölge grafik işlemenin çok özel bir kategorisini oluşturuyor. Köşelerde, aralıklarda, nesnelerin içindeki ve çevresindeki küçük alanlarda gördüğümüz grimsi gölgeleri çoğaltmaya yarıyor. Bir bölge içerisine ve bunun etrafındaki bir bulut içerisine çok kısa ve çok sayıda ışık göndererek elde ediliyor. Etraftaki nesnelerle oluşan kesişim de hesaplanıyor. Kesişim ne kadar fazla olursa daha koyu bölgeler elde ediliyor. Aslında bu yöntem çok fazla kaynak harcamıyor çünkü ışınlar yalnızca yerel nesneler için test ediliyor ve BVH ağaçları daha küçük ve işlenmesi kolay oluyor.

EA’ın SEED grubu DirectX Ray Tracing kullanarak bir demo oluşturdu ve Ray Tracing öncesi kullanılan SSAO (Screen Space Ambient Occlusion) tekniğiyle RTAO (Ray Traced Ambient Occlusion) tekniğini kıyasladı. SSAO ile elde edilen sonuç kötü olmasa da RTAO daha iyi gözüküyor.

Caustic

Caustic, ışığın kavisli yüzeylerden yansıtılması ya da yansıması nedeniyle oluşan etkidir. Aydınlık bir havada öğle vakti güneş ışığının su dolu bir bardaktan yansıyan ışıklarla oluşturduğu ışık demeti buna örnek olarak gösterilebilir.

Ray Tracing Unreal Engine
Unreal Engine ile oluşurulan bu sahne, gücünü Ray Tracing’den alıyor.

Caustic etkisi de standart yansımalara benzer şekilde hesaplanır. Işınlar oluşturulur ve bir yüzeyle etkileşen ışınlar kaydedilir. Yansımalar ve kırılmalar da buna göre oluşturulur. Yüzeysel caustic etkisi çok işlem gücü gerektirmese de hacimsel caustic etkisi çok fazla hesaplama gerektirebiliyor.

Ray Tracing ile Evrensel Aydınlatma

En yüksek işlem gücü gerektiren Ray Tracing tekniği evrensel aydınlatmadır ve tüm sahne boyunca her piksel için ışınları yayarak ışıkta meydana gelen az değişikliklere bile uyum sağlamaya yarar. Evrensel aydınlatma kavramı daha çok doğrudan olmayan, dolaylı aydınlatma ile ilgilidir.

Örneğin karanlık bir odada sürgülü bir pencerenin açıldığını düşünün. Pencerenin açılışı sadece duvarda ya da zeminde dikdörtgen biçiminde bir alanı aydınlatmayacak ve aynı zamanda tüm oda daha aydınlık bir duruma gelecek. Evrensel aydınlatma özelliği, karmaşık bir ışın ağı yayar ve bir sahneyi aydınlatmak için ek ışınlar oluşturur.

Global Aydınlatma

Metro Exodus, bu yöntemi uyguluyor ve bu yüzden de performans sorunları yaşayabiliyor. Sahnenin görünümünü her zaman değiştireceği anlamına gelmese de bu yöntem Battlefield 5 ve Tomb Raider’da kullanılan tekniklerden daha çok kaynak tüketiyor.

Ray tracing olmadan bile Metro Exodus, orta düzeyde ekran kartlarını çok zorluyor. Ray Tracing ile birlikte de en yeni ve üst sınıf ekran kartlarını zorlayacak bir oyun olarak ortaya çıkıyor.

Performansı Arttırmak İçin Yapay Zeka Kullanmak

Eğer oyunlardaki Ray Tracing örneklerine bakarsanız, çoğu oyunda şu an için bir ya da iki Ray Tracing yönteminin kullanıldığını görürsünüz. Battlefield 5 sadece yansımaları, Tomb Raider gölgeleri, Metro da evrensel aydınlatmayı kullanıyor. Şu anki GPU’lar için tüm yöntemlerin kullanıldığı bir oyunu kaldırmak mümkün olmasa da yakın zamanda kabul edilebilir FPS değerleriyle daha fazla Ray Tracing kullanan oyunları oynamak mümkün olacak.

Bu karmaşıklığı azaltmak için çeşitli yöntemler de kullanılıyor. Bu yöntemlerden birisi az sayıda piksel üzerinde Ray Tracing kullanmaktır. Bunu da iki şekilde yapmak mümkündür. Nvidia’nın DLSS algoritması, oyunun daha düşük bir çözünürlükte grafik işlemesi yapmasını ve ardından da yapay zeka kullanarak kırılmaların da kaldırılarak ölçeklenmesini sağlıyor. Bu yöntem mükemmel çalışmıyor lakin en azından Ray Tracing ile düşen FPS’yi belli bir oranda telafi edebiliyor.

Bir diğer yöntem ise çözünürlüğü düşürmeden ışınların sayısını azaltmak. Bu tekniğe de gürültü engelleme adı veriliyor. Bu teknikte daha az ışın kullanılıyor ve daha sonra makine öğrenme algoritmaları kullanılarak boşluklar dolduruluyor. Gürültü engelleme tekniğini Ray Tracing kullanan üst düzey filmlerde de görüyoruz. Nvidia bu teknik üzerine de birçok araştırma yaptı. Oyunlarda bu tekniğin nasıl kullanılacağı henüz bilinmese de yöntemin potansiyeli mevcut.

Ray Tracing Grafik Dünyasının Geleceği

Epic ve Unreal Engine, Unity 3D, Frostbite gibi grafik işlemedeki büyük isimler Ray Tracing tekniğini kullanmaya başladı. Microsoft da donanım şirketleriyle ve yazılım geliştiricilerle bir araya gelerek DirectX 12 mimarisinin üstüne tamamen yeni bir DirectX Ray Tracing API ortaya çıkardı.

Nvidia’nın RTX 2000 serisi GPU’ları, son kullanıcılara sunulan ilk Ray Tracing hızlandırmasına sahip donanım olmasına rağmen, Ampere GPU’lar Ray Tracing performansını çok daha üst düzeye çıkardı. Bunun hangi noktaya varacağını şimdiden kestirmekse oldukça zor olsa da AMD’nin de RX 6000 serisi ile bu kervana katıldığını görüyoruz. RX 6800, 6800 XT ve 6900 XT Ray Tracing desteği ile gelen kartlar. Şirket, RDNA3 mimarisinde de RT teknolojisini kullanmaya devam edecek.

Her piksel için gerçek zamanlı Ray Tracing kullanmak RTX 2080 Ti üzerinde şu an için mümkün olmasa da grafik endüstrisi bu yönde bir yol izleyecek. 2030 yılında GPU’ların yüzlerce Ray Tracing çekirdeğine sahip olacağını görebiliriz.

Basit gölgeleri ve yansımaları düşündüğünüzde Ray Tracing kavramının grafik işlemenin geleceğini nasıl oluşturduğunu sorgulayabilirsiniz. Ancak gerçekte ışığın doğru modellenmesi gerçek dünyanın taklit edilmesinde oldukça önemli. Gerçek dünyadaki algılarımızın şekillenmesinde ışık kritik bir rol oynuyor. Bu çözülmesi zor bir sorun olsa da, Ray Tracing gerçekçi oyunlara atılan büyük bir adım olarak karşımıza çıkıyor.