DirectX Raytracing (DXR) Nedir?

Adanali

Member
DirectX, Microsoft tarafınca daima güncellenen bir imaj API’si. DirectX’in en son sürümü DirectX 12, şimdiye kadar yapılmış en büyük eklemelerden biri. pek inanılmaz bulunan bu teknoloji, 2020’deki güncelleme ile sadece tanınan bir proje olmaktan çıkıp tam manasıyla kullanılmak üzere ömrümüze girmiş oldu. DirectX 12 ile bir arada de Ray Tracing üzere yeni teknolojiler oyun dünyasına kazandırıldı.

DirectX RayTracing yahut başka 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 birlikte geliştiricilere ve kullanıcılara sunuldu. bu biçimdece gerçeğe yakın derecede 3d imgeler ve dokular oluşturup işleyebilmek mümkün hale geldi.

Her ne kadar üç büyük firma bu teknolojiyi bir arada geliştirmiş olsa da NVIDIA elini biraz daha çabuk tutarak Volta mimarili GPU’lar sayesinde donanımsal manada Ray Tracing dayanağı sunan birinci GPU üreticisi oldu. bir daha de bu GPU’lar tam manasıyla abartılı derecede ışın izleme performansı sunmuyordu çünkü yetersiz kaldıkları biroldukca 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 epeyce daha öteki bir noktaya ulaştı. NVIDIA’nın pazarlama başarısı yardımıyla, Turing mimarili yongaların epey daha verimli bir biçimde ışın izleme yapabilmesi dalda çok 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 daha 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 içindeki farkın ne olduğuna ayrıntılı bir biçimde değinmiştik. Bu niçinle bu yazıda DXR’ın (DirectX RayTracing) bu işteki rolünün üstünde duracağız.

üç boyutlu 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 kolay kolay ve nizami bir biçimde yapılamıyor. Bu niçinle oyunlarda/işlenen imajlarda ışığın yüzeylerle olan etkileşimini düzgün bir biçimde 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 sayesinde yansıtılabilir, emilebilir, kırılmaya uğrayabilir yahut içlerinden geçebilir. Işınların bu özelliğinden dolayı kelam konusu oyun sahnelerinde ışınlar etrafta sekebilir, hem de objeleri de hala etkilemeye devam edebilirler. Bu sayede ışınlar hala takip edilmeye devam edilir, imgenin işlenmesi sağlanır.

Günümüzdeki bilgisayar bileşenlerine bakıldığında bir ışını takip etmek ve elde edilen bilgiye göre imaj işlemek donanımsal manada pek çok kolay. Ama nitekim tam manasıyla bir ışın izleme yapabilmek ve buna dayalı bir biçimde 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 imaj 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 gereksinim 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 niçinle çeşitli imajları 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 emeliyle kullanılan birtakım formlar ve prensiplerle alakalı datalar içeriyor. Olağanda BLAS’ın her seferinde ayarlanması birazcık vakit almakta ama 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 çok uzun sürüp manzaranın işlenmesini aksatabileceğinden, üst seviye ivme yapılarından TLAS devreye giriyor. Bu ivme yapısı hallere ilişkin tüm geometrik ayrıntıları içermek yerine birtakım BLAS’ları referans olarak alıyor ve BLAS’da yer alan objelerin nasıl şekillendirilebileceği bilgisiyle birlikte, objenin saydamlık ve opaklık üzere tipik özelliklerini de içeriyor.

Bundan yola çıkarak TLAS’ın hazır hale getirilmesinin BLAS’a bakılırsa epeyce daha süratli olduğunu lakin çok kullanmasın da performansı etkileyeceğini söyleyebiliriz. DXR ise (DirectX RayTracing) hızlandırma yapılarını oluşturmak maksadıyla kullanılacak tekniğe ve metodolojiye ekseriyetle 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 itina gösteriyor. Zira grafik işlemciler bu biçim yapıları tetiklemek için özel birtakım devreler içerdiğinden; BVH geçişi ismi verilen, bir ışının belirli bir objeye yaklaşıp yaklaşmadığının belirlenmesi süreci bir çok hızlanıyor.

Bu fikrin ardında yatan asıl şey objelerin ünitelerinin, objelere ilişkin kamera perspektifine göre ayarlanması. Bu sayede bir ışınla kesişebilecek birinci ünite bedeli daha fazla denetime tabi tutulur, öbürleri ise otomatik olarak gözardı edilir. Test algoritması son düzeye ulaşana kadar bu şekil ardışık ünite katmanlarını denetim etmeye devam eder.

İvmeleme yapıları, BLAS ve TLAS. – Görsel Kaynağı: TechSpot

Gölgelendiriciler (Shader) ve Çeşitleri

DXR’ın imaj sürece yapısı niçiniyle 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 şekil ışınların objelerle olan ilkel etkileşim (ray-primitive intersection) denetimi ise büsbütün kodlanmış birtakım 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 çok açık ve anlaşılır. Şayet ışınlardan biri bir ilkele isabet eder yahut ıskalarsa, gölgelendirici öteki makul bir rengi döndürerek farklı bir ışını aktif hale getirir. Birden hayli ışının yansıyabileceği, mesela camlar ve sular üzere objeler kelam konusu olduğunda “any-hit shader” çok 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 sureci harekete geçirir. Örneğin rastgele bir gölgenin rengini belirlemek gayesiyle 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 yeniden kullanılabilir. Ama şunu da unutmamalısınız ki, milyonlarca ışının kullanıldığı oyunlarda performansının tabana vurması da muhtemel.

Işın izleme ve gölgelendiriciler kullanılarak imajı işlenmiş Minecraft.

DXR Dayanaklı Oyunlardaki Hibrit Yaklaşım

Üstte bahsetmiş olduğumiz performansı etkileyen sebeplerden dolayı, biroldukça DXR takviyeli uygulama ve oyun hibrit bir yaklaşıma sahip. Evvel bir sahneyi oluşturmak gayesiyle bildiğimiz klasik Directüç boyutlu’yi ve Microsoft’un dediği üzere grafik ve süreç veriyolları kullanılıyor. Dokular, aydınlatmalar ve efektler uygulanıyor. En son kademede ise yansımalar ve gölgeler üzere birtakım özel iş yükü gerektiren durumlarda ise DXR’a başvuruluyor.

Bir başka manzara sürece yaklaşımı ise performansın tabana vurmasını engellemek için sahneye yansıyan ışın sayısını azaltmak. Bu daha hayli bir piksel için bir ışın kullanılması yerine, piksel blokları başına birer ışının kullanılmasıyla uygulanan bir teknik. Bir öteki performans kaybını tedbire yolu ise yalnızca birincil ışını kullanıp ışının geri sekmesini takip etmemek ve manzarayı bu türlü işlemek. En son söylemiş olduğimizin ne kadar düzgün bir ışın izleme yolu olduğu elbette tartışılır.

Bütün bu yaklaşımların en büyük dezavantajı ise kestirim edebileceğiniz üzere imgede dokuların bozulmaya uğraması ve işlenen imgede 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 biroldukca prosedür mevcut. Ekran kartı tarafında çoklukla tamamlanan kare örneği yinedan 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 ortasında bu iş için adanmış çekirdeklere daha da fazla yer verilmesi gerekiyor.