Gözünüzü kamaştıran o müthiş bilgisayar grafikleri ve dudak uçuklatan özel efektler… Yıldızlararası savaşlar, uzak galaksilerde geçen destansı sahneler, ejderhalar ve fantastik diyarlar. Hepsi nasıl bu kadar gerçekçi olabiliyor? Arkasında tahmininizden çok daha karmaşık ve büyüleyici bir teknoloji var: Ray Tracing.
Düşünsenize, tüm dünya nüfusunun her saniye bir işlem yaptığını varsayalım. Sadece tek bir sahneyi gerçekçi bir görüntüye dönüştürmek için 12 gün boyunca durmaksızın çalışması gerekirdi! Evet, yanlış duymadınız. Bir zamanlar süper bilgisayarlar dışında imkansız görülen bu işlem, bugün “path tracing” adı verilen gelişmiş bir ray tracing algoritması sayesinde Zootopia, Moana ve Coco gibi filmlerin kalbi haline geldi. Üstelik bu, binlerce bilgisayardan oluşan devasa sunucu çiftlikleri ve aylar süren render süreçleriyle mümkün olabildi. Peki, bu kadar çok hesaplama neden gerekli? Gelin, bu sihrin perdesini aralayalım.
Bir Sahne Nasıl Hayat Bulur? Modellemeden Dokulara
Her şey, bir sanatçının hayal gücüyle başlar ve titiz bir modelleme süreciyle şekillenir. Adalar, kaleler, evler, ağaçlar ve elbette o görkemli ejderhalar… Sanatçılar, aylarca süren bir çalışmayla tüm bu unsurları yaratır. İlginç bir detay mı? Bu pürüzsüz görünen yüzeyler, aslında küçük üçgenlere bölünmüştür. Bir sahne, milyonlarca üçgenden oluşabilir; örneğin, az önceki o fantastik diyar 3,2 milyon üçgenden meydana geliyor!
Modeller hazır olunca sıra dokulara gelir. Bu, sadece bir nesnenin rengini değil, aynı zamanda malzeme özelliklerini de belirler: Pürüzlü mü, pürüzsüz mü, metal mi, cam mı, yoksa su gibi mi görünecek? İşte bu dokular, sahneye kimlik kazandırır. Ardından, modeller dikkatlice yerleştirilir, ışık kaynakları (gökyüzü ve güneş gibi) eklenir, yoğunlukları ve yönleri ayarlanarak günün saati simüle edilir. Son olarak, sanal bir kamera yerleştirilir ve sahne render edilmeye hazırdır.
Işığın Yolculuğu: Path Tracing’in Kalbinde Ne Var?
Path tracing, adından da anlaşılacağı gibi, ışığın sahnelerdeki her yüzeyle nasıl etkileşime girdiğini ve nasıl yansıdığını simüle eder. Böylece binalar üzerindeki yumuşak gölgeler, suyun ışıkla dansı ve parlamalar gibi inanılmaz derecede gerçekçi efektler ortaya çıkar.
Gerçek dünyada ışık, güneşten çıkar, bir yüzeye çarpar (diyelim ki kırmızı bir çatıya), bir kısmı emilir, kırmızı ışık yansır ve renklenerek kameraya ulaşır. Ancak sanal dünyada, sonsuz sayıda ışık ışınını hesaplamak imkansız. İşte bu yüzden path tracing zekice bir yöntem kullanır: Işınları ışık kaynaklarından sahneye göndermek yerine, sanal kameradan sahneye doğru göndeririz. Bu ışınların hangi nesnelere çarptığını ve bu nesnelerin ışık kaynakları tarafından nasıl aydınlandığını hesaplarız.
Sahnenin 2D görüntüsü, sanal kameranın önündeki bir “görüntü düzlemi” tarafından temsil edilir. Bu düzlem, son görüntünün piksel sayısına eşittir; yani 4K bir görüntü, 8,3 milyon piksele sahiptir. Peki, bu piksel başına kaç ışın demek? Örneğin, bir berber dükkanı sahnesi için (8 milyon üçgen ve ada krallığından bile daha karmaşık), 8,3 milyar ışın gönderiliyor; yani piksel başına bin ışın!
Ray tracing, her pikselin diğer tüm piksellerden bağımsız olması sayesinde muazzam paralel bir operasyondur. Bir pikselin binlerce ışını hesaplanırken, yanındaki pikselin ışınları da aynı anda hesaplanabilir.
Gölgenin Peşinde: Doğrudan ve Dolaylı Aydınlatma
İlk ışınlar, yani birincil ışınlar, kameradan çıkar, pikseldeki rastgele bir noktadan geçerek sahneye girer ve bir üçgene çarpar. Çarptığı nesnenin rengi o piksele atanır. Böylece, berber dükkanındaki koltuğa çarpan ışınlar o pikseli kırmızı yapar. Bu, bize nesnelerin temel renklerini verir ama henüz aydınlatmayı sağlamaz, görüntü biraz “düz” kalır.
Asıl sihir, nesnenin ışık kaynakları tarafından nasıl aydınlandığını ve pikselin ne kadar parlak veya karanlık olması gerektiğini hesaplarken başlar. İşte burada doğrudan aydınlatma ve dolaylı aydınlatma devreye girer. İkisinin birleşimi ise küresel aydınlatma olarak adlandırılır.
* Doğrudan Aydınlatma: Birincil ışının çarptığı noktadan her ışık kaynağına doğru gölge ışınları gönderilir. Eğer bir ışık kaynağı ile çarpışma noktası arasında hiçbir nesne yoksa, o nokta doğrudan aydınlanıyor demektir. Işık kaynağının parlaklığı, boyutu, rengi, mesafesi ve yüzeyin yönü gibi faktörler, nesnenin (örneğin berber direğinin) RGB değerleriyle çarpılarak pikselin parlaklığı veya gölgesi belirlenir. Eğer ışınlar engellenirse, o nokta karanlık kalır. Bu ışınlara gölge ışınları denmesinin sebebi de budur!
* Dolaylı Aydınlatma: Peki ya gölgede kalan yüzeyler neden simsiyah olmaz, hala renkleri vardır? İşte bu, dolaylı aydınlatma sayesindedir. Birincil ışının çarptığı noktadan bir ikincil ışın çıkar ve başka bir yüzeye çarpar (örneğin duvara). Bu yeni noktadan tekrar ışık kaynaklarına gölge ışınları gönderilir ve buranın nasıl aydınlandığı hesaplanır. Bu süreç defalarca tekrarlanır, ikincil ışınlar sahnede zıplayarak, ışığın farklı yüzeylerden yansıyarak orijinal noktayı nasıl dolaylı olarak aydınlattığını keşfeder. Bu çoklu zıplamalar ve rastgele gönderilen binlerce ikincil ışın, dolaylı aydınlatma için doğru bir yaklaşıklık sağlar.
İşte bu yüzden “path tracing” deniyor; kamera, sahnedeki farklı noktalar ve ışık kaynakları arasında milyarlarca farklı “yol” bulunuyor. Bir bonus mu? Dolaylı aydınlatma sayesinde renkler bir nesneden diğerine sıçrayabilir. Kırmızı bir balonun yanındaki duvarın hafifçe kırmızımsı bir ton alması gibi!
Malzemenin Gücü: Yansımalar ve Kırılmalar
İkincil ışınların yüzeyden ne yönde sekerek yansıdığı, nesneye atanan malzeme ve doku özelliklerine bağlıdır. Örneğin, pürüzsüz bir yüzey (sıfır pürüzlülük) neredeyse bir ayna gibi davranır; tüm ikincil ışınlar mükemmel bir yansıma yönünde seker. Ancak %100 pürüzlülüğe sahip bir malzeme, ikincil ışınların tamamen rastgele yönlere sıçramasına neden olur ve sonuçta düz, mat bir yüzey oluşur.
Bir nesneye cam malzemesi atandığında ise, camın içinden geçen ek kırılma ışınları (refraction rays) üretilir. Camdaki piksellerin rengi ve parlaklığı, büyük ölçüde bu kırılma ışınlarının yönüne ve çarptıkları nesnelere bağlı olur. Cam ve ayna nesnelerinin yer aldığı sahneler, path tracing‘in gücünü gerçekten gösterir; çoklu ayna yansımalarını ve camdaki doğru kırılmaları görebilirsiniz.
Hesaplanamaz Zorluklar ve Devrim Yaratan Çözümler
Bir görüntüyü oluşturmak için gereken toplam ışın sayısı, piksel başına düşen ışın sayısı, ikincil yansımaların sayısı ve ışık kaynaklarının çarpımıyla bulunur. Animasyonlar genellikle saniyede 24 kare olduğundan, 20 dakikalık bir animasyon katrilyonlarca ışın gerektirir! İşte bu yüzden path tracing, onlarca yıl boyunca TV şovları ve filmler için hesaplama açısından imkansız kabul edildi.
Diğer kritik sorun ise: Milyonlarca üçgen arasından tek bir ışının ilk olarak hangi üçgene çarptığını nasıl bulacağız?
Bu sorun, Sınır Hacmi Hiyerarşisi (Bounding Volume Hierarchy – BVH) adı verilen bir teknikle çözülür. Sahnedeki üçgenler, 3D koordinatları kullanılarak iki ayrı kutuya (sınır hacmi) bölünür. Bu kutular, sahnedeki tüm üçgenlerin yarısını içerir. Bu işlem, üçgenler giderek daha küçük kutu çiftlerine bölünene kadar devam eder. Örneğin, 3 milyon üçgen için 19 bölme işlemi sonucunda, her biri yaklaşık 6 üçgen içeren 525 bin çok küçük kutu oluşur. Bu kutuların kenarları koordinat eksenleriyle hizalı olduğundan, bir ışının hangi kutuya çarptığını hesaplamak çok daha kolay hale gelir. Bu hiyerarşi, bir ikili ağaç gibi çalışır; ışın, her dalda basit bir kutu-ışın kesişim hesaplaması yaparak ilerler ve en sonunda sadece 6 üçgen içeren küçük bir kutuya ulaşır. İşte o zaman, ışın-üçgen kesişim hesaplaması sadece bu 6 üçgen için yapılır. BVH ağaçları ve bu “geçiş” (BVH traversal), milyonlarca hesaplamayı avuç dolusu basit ışın-kutu kesişimine ve ardından sadece 6 ışın-üçgen kesişimine indirger.
Peki, yüz milyarlarca ışın sorununu ne çözdü? Günümüzün inanılmaz güçlü GPU‘ları! Bir grafik kartını açtığınızda, 10496 CUDA çekirdeği ve 82 Ray Tracing (RT) çekirdeği içeren büyük bir mikroçip görürsünüz. CUDA çekirdekleri temel aritmetik işlemleri yaparken, RT çekirdekleri özellikle ray tracing‘i yürütmek için tasarlanmış ve optimize edilmiştir. RT çekirdeklerinin içinde, BVH geçişini nanosaniyeler içinde gerçekleştiren bir BVH geçiş bölümü ve ışının hangi üçgene çarptığını hızla bulan bir ışın-üçgen kesişim bölümü bulunur. Bu çekirdekler paralel olarak çalışır ve işlemleri ardışık olarak sıralar, böylece saniyede milyarlarca ışın işlenebilir ve karmaşık bir sahne sadece birkaç dakikada render edilebilir. İnanılmaz, değil mi? 2000 yılındaki en güçlü süper bilgisayarın (ASCI White) saniyede 12,3 trilyon işlem yapabildiğini düşünün. 2022’de çıkan NVidia 3090 GPU’nun CUDA çekirdekleri ise saniyede 36 trilyon işlem yapıyor! Eskiden sadece yüksek bütçeli filmlere özel olan CGI ve özel efektler, artık masaüstü bilgisayarlarda bile yaratılabiliyor.
Ray Tracing Oyun Dünyasına Nasıl Sızdı?
Ray tracing, video oyunlarında da kendine yer buldu, ancak gerçek zamanlı performans gereksinimleri nedeniyle farklı yöntemler kullanıyor.
1. Kısayollu Path Tracing (Unreal Engine Lumen Renderer gibi): Bu yöntemde, oyun ortamındaki tüm modellerin çok düşük çözünürlüklü bir kopyası oluşturulur. Path tracing, bu düşük çözünürlüklü nesneler için doğrudan ve dolaylı aydınlatmayı belirlemek için kullanılır ve sonuçlar “ışık haritası” olarak kaydedilir. Bu ışık haritası daha sonra yüksek çözünürlüklü nesnelere uygulanarak gerçekçi dolaylı aydınlatma ve gölgeler oluşturulur. Bu, dolaylı aydınlatmayı oldukça iyi yaklaştıran etkili bir tekniktir.
2. Ekran Alanı Ray Tracing (Cyberpunk gibi): Bu tamamen farklı bir yöntemdir ve sahnenin geometrilerini kullanmaz. Bunun yerine, video oyunu grafik renderlama sürecinden üretilen görüntüleri ve verileri kullanır. Oyun grafikleri sürecinde, her nesnenin kameradan ne kadar uzakta olduğunu gösteren bir derinlik haritası ve her pikselin yönünü gösteren bir normal harita gibi ek veriler oluşturulur. Bu veriler birleştirilerek sahnedeki çeşitli nesnelerin basitleştirilmiş X, Y, Z değerleri ve her pikselin hangi yöne baktığı belirlenir. Örneğin, yansıtıcı bir gölün yansımalarını oluşturmak için, bu basitleştirilmiş ekran alanı 3D temsili kullanılarak ışınlar gölün piksellerinden seker ve arkasındaki ağaçlara çarparak yansımayı oluşturur. Ancak bu yöntemin bir sınırlaması var: Yalnızca ekrandaki verileri kullanabilir. Kamera hareket ettiğinde ağaçlar ekrandan çıktığında, yansımada da görünmez olurlar. Ayrıca, kameranın arkasındaki nesnelerin yansımalarını oluşturamaz.
Ray tracing, ışık fiziği, trigonometri, vektörler ve matrislerden bilgisayar bilimi, algoritmalar ve donanıma kadar birçok farklı disiplinin birleşimi aslında. Bu büyüleyici teknolojinin derinliklerine daldıkça, dijital dünyamızın ne denli karmaşık ve yaratıcı süreçlerle inşa edildiğini bir kez daha fark ediyoruz.
—
Sıkça Sorulan Sorular
S: Ray Tracing nedir ve neden önemlidir?
C: Ray Tracing, bilgisayar grafikleri dünyasında ışık ışınlarının sanal bir sahnede nasıl hareket ettiğini ve nesnelerle nasıl etkileşime girdiğini simüle eden bir renderlama tekniğidir. Bu, gölgeler, yansımalar ve kırılmalar gibi ışık efektlerini inanılmaz derecede gerçekçi bir şekilde oluşturmasını sağlar. Filmlerdeki CGI ve özel efektler ile modern video oyunlarında fotogerçekçi görüntüler elde etmek için hayati öneme sahiptir.
S: Path Tracing, Ray Tracing’den ne kadar farklıdır?
C: Path Tracing, aslında bir tür Ray Tracing algoritmasıdır ve ışık yollarını izleyerek global aydınlatmayı çok daha doğru bir şekilde hesaplar. Birincil, ikincil ve gölge ışınlarını kullanarak ışığın bir sahnedeki tüm yüzeylerden yansımasını ve dolaylı aydınlatmayı simüle eder. Bu, daha yüksek kaliteli ve gerçekçi görüntüler üretmesini sağlar, ancak çok daha fazla hesaplama gücü gerektirir.
S: Video oyunlarında Ray Tracing nasıl kullanılır?
C: Video oyunlarında gerçek zamanlı performans kritik olduğundan, Ray Tracing genellikle filmlerdeki kadar tam kapsamlı kullanılmaz. Bunun yerine, kısayollar içeren yöntemler tercih edilir. Örneğin, Unreal Engine Lumen gibi motorlarda, düşük çözünürlüklü sahnelerden elde edilen ışık haritaları yüksek çözünürlüklü nesnelere uygulanır. Cyberpunk gibi oyunlarda ise ekran alanı ray tracing kullanılarak, ekrandaki mevcut verilerden yansımalar gibi efektler oluşturulur, ancak bu yöntemin bazı sınırlamaları vardır, örneğin ekranda olmayan nesneleri yansıtamaz.