Anasayfa Makale DirectX Raytracing (DXR) Nedir?

DirectX Raytracing (DXR) Nedir?

directx 12_2

Windows’un ışın izlemeden sorumlu arayüzü DirectX Raytracing’e detaylıca bakıyoruz.

DirectX, Microsoft tarafından sürekli güncellenen bir görüntü API’si. DirectX’in en son sürümü DirectX 12, şimdiye kadar yapılmış en büyük eklemelerden biri. Oldukça inanılmaz bulunan bu teknoloji, 2020’deki güncelleme ile yalnızca popüler bir proje olmaktan çıkıp tam anlamıyla kullanılmak üzere hayatımıza girmiş oldu. DirectX 12 ile birlikte de Ray Tracing gibi yeni teknolojiler oyun dünyasına kazandırıldı.

DirectX RayTracing Nedir?

DirectX RayTracing veya diğer adıyla DXR; Intel, NVIDIA ve AMD ortaklığında geliştirilen bir gerçek zamanlı ışın izleme teknolojisidir. 2018 yılının sonlarında Windows 10 1809 ile beraber geliştiricilere ve kullanıcılara sunuldu. Böylece gerçeğe yakın derecede üç boyutlu görüntüler 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 anlamda Ray Tracing desteği sunan ilk GPU üreticisi oldu. Yine de bu GPU’lar tam anlamıyla abartılı derecede ışın izleme performansı sunmuyordu zira 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 beraber, gerçek zamanlı ışın izleme teknolojisi çok daha başka bir noktaya ulaştı. NVIDIA’nın pazarlama başarısı sayesinde, Turing mimarili yongaların çok daha verimli bir şekilde ışın izleme yapabilmesi sektörde oldukça konuşuldu.

NVIDIA’nın Turing mimarili GPU’larına ait görsel.

AMD cephesinin ise bu süreçte Ray Tracing destekli ekran kartları sunma konusunda pek aceleci davranmadığını söyleyebiliriz. Zira AMD’nin ilk Ray Tracing destekli 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 nesil konsollarda da kullanmış olduğu RDNA 2 mimarisinden güç alıyor.

Daha öncesinde Ray Tracing ile geleneksel ışın izleme teknolojileri arasındaki farkın ne olduğuna detaylı bir şekilde değinmiştik. Bu nedenle bu yazıda DXR’ın (DirectX RayTracing) bu işteki rolünün üstünde duracağız.

DXR’ın Ray Tracing Teknolojisine Etkisi

3D oyun dünyasında yıllardır ışık kaynaklarının ve gölgeye bağlı olarak nesnelerin parlaklığının ve renklerinin nasıl değişeceğini belirlemek için birtakım teknikler kullanılıyor. Fakat bu, gerçek hayatta olduğu gibi kolayca ve nizami bir şekilde yapılamıyor. Bu nedenle oyunlarda/işlenen görüntülerde ışığın yüzeylerle olan etkileşimini düzgün bir şekilde ayarlamak için bazı ufak hileler kullanılıyor.

Ray Tracing (ışın izleme) teknolojisinde, bir ışık ışınının yolu izlenerek hangi nesnelere temas ettiği ve nesneleri ne şekilde 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şın izleme (Ray Tracing) diyagramı

Işınlar bildiğiniz gibi birtakım nesneler yardımıyla yansıtılabilir, emilebilir, kırılmaya uğrayabilir veya içlerinden geçebilir. Işınların bu özelliğinden dolayı söz konusu oyun sahnelerinde ışınlar etrafta sekebilir, aynı zamanda nesneleri de halen etkilemeye devam edebilirler. Bu sayede ışınlar halen takip edilmeye devam edilir, görüntünün 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 görüntü işlemek donanımsal anlamda pek zor değil. Fakat gerçekten tam anlamıyla bir ışın izleme yapabilmek ve buna dayalı bir şekilde görüntü 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 görüntü 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 göre ışın izlemenin ve görüntü işlemenin yapılması gerekmekte. Tam da bu yüzden klasik GPU’lar yetersiz kalıyor, ek yardımcılara ihtiyaç duyuluyor. Ray Tracing için bilgisayarınızın arkada ne kadar büyük hesaplarla uğraştığını siz düşünün.

Bu nedenle çeşitli görüntüleri işlerken ışınları izlemek amacıyla veya 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 seviye olarak ayıran şey.

BLAS ve TLAS Yapıları

Alt seviyede yer alan ivmeleme yapıları (Bottom level acceleration structures /BLAS), ortam oluşturma amacıyla kullanılan birtakım şekiller ve ilkelerle alakalı veriler içeriyor. Normalde BLAS’ın her seferinde ayarlanması birazcık zaman almakta fakat bir ışının herhangi bir nesne ile etkileşime girip girmediğinin kontrolü için daha hızlı bir teknik sağlanıyor diyebiliriz.

Eğer her yeni kare için ayrı ayrı BLAS’lar oluşturulup kullanılacaksa, bu bir hayli uzun sürüp görüntünün işlenmesini aksatabileceğinden, üst düzey ivme yapılarından TLAS devreye giriyor. Bu ivme yapısı şekillere ait tüm geometrik bilgileri içermek yerine birtakım BLAS’ları referans olarak alıyor ve BLAS’da yer alan nesnelerin nasıl şekillendirilebileceği bilgisiyle beraber, nesnenin saydamlık ve opaklık gibi tipik özelliklerini de içeriyor.

Bundan yola çıkarak TLAS’ın hazır hale getirilmesinin BLAS’a göre çok daha hızlı olduğunu fakat aşırı kullanımın da performansı etkileyeceğini söyleyebiliriz. DXR ise (DirectX RayTracing) hızlandırma yapılarını oluşturmak amacıyla kullanılacak tekniğe ve metodolojiye genellikle karışmaz. API’nin talimatlarının yorumlanıp uygulanması donanım ile sürücüye bırakılıyor diyebiliriz.

NVIDIA ve AMD gibi donanım üreticileri ise sınırlayıcı birim hiyerarşileri (BVH) denilen yapıları kullanıyor ve bunları GPU’lar aracılığıyla yönetilecek şekilde ayarlamaya özen gösteriyor. Çünkü grafik işlemciler bu tarz yapıları tetiklemek için özel birtakım devreler içerdiğinden; BVH geçişi adı verilen, bir ışının belli bir nesneye yaklaşıp yaklaşmadığının belirlenmesi süreci bir hayli hızlanıyor.

Bu fikrin arkasında yatan asıl şey nesnelerin birimlerinin, nesnelere ait kamera perspektifine göre ayarlanması. Bu sayede bir ışınla kesişebilecek ilk birim değeri daha fazla kontrole tabi tutulur, diğerleri ise otomatik olarak gözardı edilir. Test algoritması son seviyeye ulaşana kadar bu tarz ardışık birim katmanlarını kontrol etmeye devam eder.

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

Gölgelendiriciler (Shader) ve Türleri

DXR’ın görüntü işleme yapısı nedeniyle BLAS/TLAS’ın oluşturulması ve hemen ardından 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 işleme yeteneğine sahip ekran kartlarında bu işlemin hızlandırılması için donanımsal ek yapılar bulunuyor.

Bu tarz ışınların nesnelerle olan ilkel etkileşim (ray-primitive intersection) kontrolü ise tamamen kodlanmış bazı komutlara bağlı. Bu durumda aşağıdaki gölgelendiricilerden birkaçı veya daha fazlası çalıştırılabilmekte:

  • Hit shader
  • Any-hit shader
  • Closest-hit-shader
  • Miss shader

Bu gölgelendiricilerden ilki ve sonuncusu gayet açık ve anlaşılır. Eğer ışınlardan biri bir ilkele isabet eder veya ıskalarsa, gölgelendirici başka belirli bir rengi döndürerek farklı bir ışını etkin hale getirir. Birden çok ışının yansıyabileceği, örneğin camlar ve sular gibi nesneler söz konusu olduğunda “any-hit shader” oldukça kullanışlı olabilir. “Closest-hit shader” ise adından da anlaşılabileceği gibi, hangi ilkelin gönderilen ışına en yakın olduğuna bağlı olarak belirli bir süreci eyleme geçirir. Örneğin herhangi bir gölgenin rengini belirlemek amacıyla kullanılabilir.

Daha gerçekçi sonuçlar elde edilmek isteniyorsa; ışın oluşturma, kesişim/çarpışma kontrolü ve renk çözme döngüleri sürekli tekrar tekrar kullanılabilir. Fakat şunu da unutmamalısınız ki, milyonlarca ışının kullanıldığı oyunlarda performansının dibe vurması da olası.

DXR Minecraft
Işın izleme ve gölgelendiriciler kullanılarak görüntüsü işlenmiş Minecraft.

DXR Destekli Oyunlardaki Hibrit Yaklaşım

Yukarıda bahsettiğimiz performansı etkileyen sebeplerden dolayı, birçok DXR destekli uygulama ve oyun hibrit bir yaklaşıma sahip. Önce bir sahneyi oluşturmak amacıyla bildiğimiz klasik Direct3D’yi ve Microsoft’un dediği gibi grafik ve işlem veriyolları kullanılıyor. Dokular, aydınlatmalar ve efektler uygulanıyor. En son aşamada ise yansımalar ve gölgeler gibi birtakım özel iş yükü gerektiren durumlarda ise DXR’a başvuruluyor.

Bir diğer görüntü işleme yaklaşımı ise performansın dibe 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 başka performans kaybını önleme yolu ise sadece birincil ışını kullanıp ışının geri sekmesini takip etmemek ve görüntüyü bu şekilde işlemek. En son söylediğimizin ne kadar düzgün bir ışın izleme yöntemi olduğu elbette tartışılır.

Bütün bu yaklaşımların en büyük dezavantajı ise tahmin edebileceğiniz gibi görüntüde dokuların bozulmaya uğraması ve işlenen görüntüde netliği etkileyen “gürültü” varlığı diyebiliriz. Bunu engellemek için piyasada kullanılan “denoising” yani “gürültü arındırma” adı verilen birçok yöntem mevcut. Ekran kartı tarafında genellikle 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 şekilde üretilmeye başlandı. Buna göre Microsoft’un gölgelendiricilerin ve ışınların nasıl yönetildiğine dair daha fazla esneklik ve kontrol sağlamak adına DXR’ı geliştirmeye ve genişletmeye devam edeceğini söyleyebiliriz.

DXR API’sine gelen ilk güncelleme 2020 yılında DXR Tier 1.1 başlığı altında yayınlandı. Bu güncelleme diğer DirectX sürümlerinin birçoğunda olduğu gibi yeni donanıma ihtiyaç duymayıp sadece sürücü güncellemeyi gerektirmekte. Öte yandan ışın izleme kalitesi halen daha istenilen seviyede değil ve GPU’ların içinde bu iş için adanmış çekirdeklere daha da fazla yer verilmesi gerekiyor.

https://www.technopat.net/