DirectX Raytracing (DXR) Nedir?

DirectX, Microsoft tarafından daima güncellenen bir manzara API’si. DirectX’in en son sürümü DirectX 12, şimdiye kadar yapılmış en büyük eklemelerden biri. Epey inanılmaz bulunan bu teknoloji, 2020’deki güncelleme ile sırf tanınan bir proje olmaktan çıkıp tam manasıyla kullanılmak üzere hayatımıza girmiş oldu. DirectX 12 ile birlikte de Ray Tracing üzere yeni teknolojiler oyun dünyasına kazandırıldı.
DirectX RayTracing yahut öteki ismiyle DXR; Intel, NVIDIA ve AMD iştirakinde geliştirilen bir gerçek vakitli ışın izleme teknolojisidir. 2018 yılının sonlarında Windows 10 1809 ile bir arada geliştiricilere ve kullanıcılara sunuldu. Böylelikle gerçeğe yakın derecede üç boyutlu imajlar ve dokular oluşturup işleyebilmek mümkün hale geldi.
Her ne kadar üç büyük firma bu teknolojiyi birlikte geliştirmiş olsa da NVIDIA elini biraz daha çabuk tutarak Volta mimarili GPU’lar yardımıyla donanımsal manada Ray Tracing dayanağı sunan birinci GPU üreticisi oldu. Yeniden de bu GPU’lar tam manasıyla abartılı derecede ışın izleme performansı sunmuyordu çünkü yetersiz kaldıkları birçok nokta mevcuttu.
2018 yılının Eylül ayında Turing mimarili GeForce RTX (RayTracingX) ekran kartlarının piyasaya sürülmesiyle birlikte, gerçek vakitli ışın izleme teknolojisi çok daha diğer bir noktaya ulaştı. NVIDIA’nın pazarlama başarısı sayesinde, Turing mimarili yongaların çok daha verimli bir halde ışın izleme yapabilmesi dalda hayli konuşuldu.

NVIDIA’nın Turing mimarili GPU’larına ilişkin görsel.
AMD cephesinin ise bu süreçte Ray Tracing takviyeli ekran kartları sunma konusunda pek sabırsız davranmadığını söyleyebiliriz. Çünkü AMD’nin birinci Ray Tracing takviyeli ekran kartları rakibinden tam iki yıl sonra, 2020 yılının Kasım ayında tanıtıldı. Radeon RX 6000 serisi ekran kartları, AMD’nin yeni kuşak konsollarda da kullanmış olduğu RDNA 2 mimarisinden güç alıyor.
Daha öncesinde Ray Tracing ile klasik ışın izleme teknolojileri ortasındaki farkın ne olduğuna ayrıntılı bir formda değinmiştik. Bu nedenle bu yazıda DXR’ın (DirectX RayTracing) bu işteki rolünün üstünde duracağız.
3D oyun dünyasında yıllardır ışık kaynaklarının ve gölgeye bağlı olarak objelerin parlaklığının ve renklerinin nasıl değişeceğini belirlemek için birtakım teknikler kullanılıyor. Ama bu, gerçek hayatta olduğu üzere kolaylıkla ve nizami bir formda yapılamıyor. Bu nedenle oyunlarda/işlenen imajlarda ışığın yüzeylerle olan etkileşimini düzgün bir halde ayarlamak için kimi ufak hileler kullanılıyor.
Ray Tracing (ışın izleme) teknolojisinde, bir ışık ışınının yolu izlenerek hangi objelere temas ettiği ve objeleri ne biçimde etkilediği göz önünde bulunduruluyor. Buna ek olarak yüzeydeki ışık yansıması ve renk ile birlikte yoğunluk derecesi hesaplanıp işleniyor.

Işınlar bildiğiniz üzere birtakım objeler yardımıyla yansıtılabilir, emilebilir, kırılmaya uğrayabilir yahut içlerinden geçebilir. Işınların bu özelliğinden ötürü kelam konusu oyun sahnelerinde ışınlar etrafta sekebilir, tıpkı vakitte objeleri de hala etkilemeye devam edebilirler. Bu sayede ışınlar hala takip edilmeye devam edilir, manzaranın işlenmesi sağlanır.
Günümüzdeki bilgisayar bileşenlerine bakıldığında bir ışını takip etmek ve elde edilen bilgiye nazaran manzara işlemek donanımsal manada pek sıkıntı değil. Ancak hakikaten tam manasıyla bir ışın izleme yapabilmek ve buna dayalı bir halde manzara işleyebilmek için, çerçeve (frame) içerisinde bulunan her bir piksel için bir adet ışın gönderilmesi ve bu ışının izlenmesi gerekiyor. Yani 1920x1080p manzara için 2 milyon 73 bin 600, 2560x1440p için 3 milyon 686 bin 400, 3840x2160p içinse 8 milyon 294 bin 400 adet piksele nazaran ışın izlemenin ve manzara işlemenin yapılması gerekmekte. Tam da bu yüzden klasik GPU’lar yetersiz kalıyor, ek yardımcılara muhtaçlık duyuluyor. Ray Tracing için bilgisayarınızın artta ne kadar büyük hesaplarla uğraştığını siz düşünün.
Bu nedenle çeşitli imgeleri işlerken ışınları izlemek gayesiyle yahut ek yardımcıları kullanabilmek için Türkçemize “ivme” olarak giren “acceleration structures” teknikleri kullanılıyor. İşte DXR (DirectX Ray Tracing) bu ivmeleme tekniklerinin kurallarını belirleyip onları alt ve üst düzey olarak ayıran şey.
BLAS ve TLAS Yapıları
Alt düzeyde yer alan ivmeleme yapıları (Bottom level acceleration structures /BLAS), ortam oluşturma gayesiyle kullanılan birtakım haller ve unsurlarla alakalı datalar içeriyor. Olağanda BLAS’ın her seferinde ayarlanması birazcık vakit almakta lakin bir ışının rastgele bir obje ile etkileşime girip girmediğinin denetimi için daha süratli bir teknik sağlanıyor diyebiliriz.
Şayet her yeni kare için farklı başka BLAS’lar oluşturulup kullanılacaksa, bu bir oldukça uzun sürüp manzaranın işlenmesini aksatabileceğinden, üst seviye ivme yapılarından TLAS devreye giriyor. Bu ivme yapısı biçimlere ilişkin tüm geometrik bilgileri içermek yerine birtakım BLAS’ları referans olarak alıyor ve BLAS’da yer alan objelerin nasıl şekillendirilebileceği bilgisiyle bir arada, objenin saydamlık ve opaklık üzere tipik özelliklerini de içeriyor.
Bundan yola çıkarak TLAS’ın hazır hale getirilmesinin BLAS’a nazaran çok daha süratli olduğunu ama çok kullanımın da performansı etkileyeceğini söyleyebiliriz. DXR ise (DirectX RayTracing) hızlandırma yapılarını oluşturmak gayesiyle kullanılacak tekniğe ve metodolojiye çoklukla karışmaz. API’nin talimatlarının yorumlanıp uygulanması donanım ile şoföre bırakılıyor diyebiliriz.
NVIDIA ve AMD üzere donanım üreticileri ise sınırlayıcı ünite hiyerarşileri (BVH) denilen yapıları kullanıyor ve bunları GPU’lar aracılığıyla yönetilecek biçimde ayarlamaya ihtimam gösteriyor. Zira grafik işlemciler bu üslup yapıları tetiklemek için özel birtakım devreler içerdiğinden; BVH geçişi ismi verilen, bir ışının muhakkak bir objeye yaklaşıp yaklaşmadığının belirlenmesi süreci bir epey hızlanıyor.
Bu fikrin ardında yatan asıl şey objelerin ünitelerinin, objelere ilişkin kamera perspektifine nazaran ayarlanması. Bu sayede bir ışınla kesişebilecek birinci ünite kıymeti daha fazla denetime tabi tutulur, başkaları ise otomatik olarak gözardı edilir. Test algoritması son düzeye ulaşana kadar bu usul ardışık ünite katmanlarını denetim etmeye devam eder.

İvmeleme yapıları, BLAS ve TLAS. – Görsel Kaynağı: TechSpot
Gölgelendiriciler (Shader) ve Tipleri
DXR’ın manzara sürece yapısı nedeniyle BLAS/TLAS’ın oluşturulması ve çabucak akabinde bir karede yer alan her bir piksel için ışın oluşturulması için birtakım gölgelendiriciler (shader) gerekiyor. Bu gölgelendiriciler, ışınların bir yüzeye çarpıp çarpmadığını anlayabilmek için birtakım hızlandırıcı/ivmeleyici (acceleration) yapılarını kullanıyor. İşte Ray Tracing sürece yeteneğine sahip ekran kartlarında bu sürecin hızlandırılması için donanımsal ek yapılar bulunuyor.
Bu stil ışınların objelerle olan ilkel etkileşim (ray-primitive intersection) denetimi ise büsbütün kodlanmış kimi komutlara bağlı. Bu durumda aşağıdaki gölgelendiricilerden birkaçı yahut daha fazlası çalıştırılabilmekte:
- Hit shader
- Any-hit shader
- Closest-hit-shader
- Miss shader
Bu gölgelendiricilerden birincisi ve sonuncusu pek açık ve anlaşılır. Şayet ışınlardan biri bir ilkele isabet eder yahut ıskalarsa, gölgelendirici öbür belli bir rengi döndürerek farklı bir ışını aktif hale getirir. Birden çok ışının yansıyabileceği, örneğin camlar ve sular üzere objeler kelam konusu olduğunda “any-hit shader” hayli kullanışlı olabilir. “Closest-hit shader” ise isminden da anlaşılabileceği üzere, hangi ilkelin gönderilen ışına en yakın olduğuna bağlı olarak muhakkak bir süreci aksiyona geçirir. Örneğin rastgele bir gölgenin rengini belirlemek maksadıyla kullanılabilir.
Daha gerçekçi sonuçlar elde edilmek isteniyorsa; ışın oluşturma, kesişim/çarpışma denetimi ve renk çözme döngüleri daima tekrar tekrar kullanılabilir. Ancak şunu da unutmamalısınız ki, milyonlarca ışının kullanıldığı oyunlarda performansının tabana vurması da mümkün.

Işın izleme ve gölgelendiriciler kullanılarak imajı işlenmiş Minecraft.
DXR Dayanaklı Oyunlardaki Hibrit Yaklaşım
Üstte bahsettiğimiz performansı etkileyen sebeplerden ötürü, birçok DXR takviyeli uygulama ve oyun hibrit bir yaklaşıma sahip. Evvel bir sahneyi oluşturmak gayesiyle bildiğimiz klasik Direct3D’yi ve Microsoft’un dediği üzere grafik ve süreç veriyolları kullanılıyor. Dokular, aydınlatmalar ve efektler uygulanıyor. En son basamakta ise yansımalar ve gölgeler üzere birtakım özel iş yükü gerektiren durumlarda ise DXR’a başvuruluyor.
Bir öteki manzara sürece yaklaşımı ise performansın tabana vurmasını engellemek için sahneye yansıyan ışın sayısını azaltmak. Bu daha çok bir piksel için bir ışın kullanılması yerine, piksel blokları başına birer ışının kullanılmasıyla uygulanan bir teknik. Bir diğer performans kaybını tedbire yolu ise yalnızca birincil ışını kullanıp ışının geri sekmesini takip etmemek ve manzarayı bu biçimde işlemek. En son söylediğimizin ne kadar düzgün bir ışın izleme tekniği olduğu elbette tartışılır.
Bütün bu yaklaşımların en büyük dezavantajı ise varsayım edebileceğiniz üzere imajda dokuların bozulmaya uğraması ve işlenen imajda netliği etkileyen “gürültü” varlığı diyebiliriz. Bunu engellemek için piyasada kullanılan “denoising” yani “gürültü arındırma” ismi verilen birçok sistem mevcut. Ekran kartı tarafında çoklukla tamamlanan kare örneği tekrardan işlenir, gölgelendirilir ve filtrelenir.
Günümüzde en yeni konsollar ve ekran kartlarının neredeyse hepsi ışın izleme özelliğini destekleyecek biçimde üretilmeye başlandı. Buna nazaran Microsoft’un gölgelendiricilerin ve ışınların nasıl yönetildiğine dair daha fazla esneklik ve denetim sağlamak ismine DXR’ı geliştirmeye ve genişletmeye devam edeceğini söyleyebiliriz.
DXR API’sine gelen birinci güncelleme 2020 yılında DXR Tier 1.1 başlığı altında yayınlandı. Bu güncelleme öteki DirectX sürümlerinin birçoğunda olduğu üzere yeni donanıma gereksinim duymayıp yalnızca şoför güncellemeyi gerektirmekte. Öte yandan ışın izleme kalitesi hala daha istenilen düzeyde değil ve GPU’ların içinde bu iş için adanmış çekirdeklere daha da fazla yer verilmesi gerekiyor.
Kaynak: Technopat