Spektral Ray Tracing Tekniğine Giriş
(larswander.com)- Spektral ray tracing, yalnızca RGB değerleri taşıyan ışınlar yerine dalga boyu ve fazı da ele alarak piksel başına spektral güç dağılımı (SPD) üreten bir yöntemdir
- Tipik ray tracing, performans için kameradan ışık kaynağı yönüne doğru geriye izleme yapar ve ışınları RGB vektörü taşıyan parçacıklar gibi basitleştirir
- İnsan gözü, kısa, orta ve uzun dalga boylarına duyarlı üç tür koni hücresinin tepkileriyle renk oluşturur; aynı renk farklı SPD'lerden ortaya çıkabilir
- Dağılım veya ince film girişimi gibi dalga boyunun ışığın yolunu ve rengini etkilediği sahnelerde yalnızca RGB yaklaşımı yetersiz kalabilir
- JavaScript ve GLSL ile yapılmış bağımlılıksız spektral ray tracer, ışığın kurallarını bilinçli olarak değiştiren bilgisayar sanatında gerçek dışı renkler ve hareketler üretmek için bir araç olarak kullanılır
Kodla yapılan kamera ve ray tracing
- Bilgisayar sanatında sahne ve kamera tamamen kodla oluşturulur; render sonucu RGB değerleri dizisine dönüştürülür
- Ray tracing, sanal nesneler arasında ışınları sektirerek simüle edilmiş kamera ile ışık kaynağı arasından geçen ışığın yollarını modeller
- Performans nedeniyle gerçek ışık hareketini aynen izlemek yerine çeşitli basitleştirmeler kullanılır
- Işık kaynaklarından çıkan ışınların çoğu kameraya ulaşmadığı için, ışık kaynağından başlamak yerine kamera bakış açısından geriye doğru izleme yapılır
- Bu geriye izleme, ışık iletim yasalarının zaman yönüne göre simetrik olduğu T-symmetry varsayımı altında fiziksel olarak geçerlidir
- Daha büyük basitleştirme, ışınları dalga olarak değil RGB renk vektörü taşıyan parçacıklar gibi ele almaktır
- Işığın dalga doğasını yok sayar, ancak birçok sahnede fiziksel olarak makul sonuçlar üretir
- İnsan gözünde kısa, orta ve uzun dalga boylarına duyarlı üç tür renk algılayıcı hücre bulunması bu yaklaşımı mümkün kılar
Göz RGB'ye değil spektruma tepki verir
- Gerçek dünyadaki ışık genellikle tek bir dalga boyundan değil, birden çok dalga boyunun karıştığı spektral güç dağılımından (SPD) oluşur
- Bir insanın gördüğü tek bir renge sayısız SPD karşılık gelebilir; bu olguya metamerism denir
- Örneğin sarı, yaklaşık 580 nm civarındaki tek bir dalga boyu olarak da görülebilir
- Bilgisayar monitörleri gibi yalnızca RGB kullanan cihazlarda ise sarı, kırmızı ve yeşil ışığın birleşimiyle de yeniden üretilebilir
- Macenta gibi tek bir dalga boyuyla oluşturulamayan spektral olmayan renkler de vardır
- Macenta spektrum üzerinde tek bir konumda yer almaz
- Düşük ve yüksek dalga boylarının, yani mavi ve kırmızı ışığın birleşimi gerekir
- SPD'yi renge dönüştürme süreci matematiksel olarak ele alınabilir
- Fizik, fizyoloji ve öznel renk deneyimi arasında nicel bir bağlantı vardır
- Bu bağlantı, 1931'de oluşturulan CIE 1931 color spaces içinde yer alır
- Doğrudan uygulamak için Physically Based Rendering'in renk bölümü incelenebilir
Dalga boyunun sonucu değiştirdiği sahneler
- Ray tracing'de her zaman tüm spektrumu veya tekil ışınların dalga boyunu hesaba katmak gerekmez
- Ancak bazı sahnelerde ışığın dalga doğası doğrudan yolunu etkiler ve bunun sonucunda görünen renk de değişir
- Tipik örneklerden biri dağılımdır
- Işığın izlediği yol, dalga boyuna göre farklı şekilde bükülür
- Prizmanın beyaz ışığı bileşen frekanslarına ayırması buna karşılık gelir
- Bir diğer örnek **ince film girişimi (thin film interference)**dir
- Sabun köpüklerinde görülen gökkuşağı benzeri desenleri açıklar
- Sabun sınırının üst ve alt katmanlarından yansıyan ışıklar yapıcı ve yıkıcı girişim oluşturur
- Bu süreç spektrumu tekil dalga boylarına ayırmaktan çok, spektrumun bazı bölümlerinin katkısını artırır veya azaltır
- Sonuç olarak camgöbeği, teal, macenta ve kahverengi gibi spektral olmayan renkler sıkça oluşur
Spektral ray tracing neyi ele alır?
- Spektral ray tracing, ışığın dalga doğasını dikkate alan ray tracing'dir
- Dünyayı yalnızca RGB renklerle hesaplamak yerine, sahnedeki her piksel için spektral güç dağılımı üretir
- Bu bilginin önemli olduğu durumlarda rengi daha iyi tahmin etmek için ışının dalga boyunu ve fazını birlikte kullanır
- Dağılım veya ince film girişimi gibi dalga boyu ve fazın sonuçtaki rengi değiştirdiği durumlarda özellikle yararlıdır
Bilgisayar sanatında kullanım
- Son çalışmalarda, ışığın hareket kurallarını bilinçli olarak bozup gerçeklikten biraz farklı bir evrenin kamerasını kodla oluşturma yaklaşımı kullanılıyor
- Tüm ışık spektrumunun zenginliği ele alınırken, ışık aktarım kuralları gerçek dışı biçimlerde değiştirilebiliyor
- Yayınlanan çıktılar, elle yazılmış bağımlılıksız JavaScript ve GLSL spektral ray tracer ile üretildi
- Örnek çalışmalar şunları içeriyor
- Light Doesn't Bend That Way #1, 2023
- Yansıma açısını dalga boyunun bir fonksiyonu yaparak üretildi
- Bu süreç yalnızca spektral renkler üretiyor gibi görünür
- Untitled, 2023
- FULL_SPECTRUM serisi için üzerinde çalışılan bir eser olup 2023'te Tokyo'da gösterildi
- Untitled, 2023
- Video 3 olarak sunulur
- Bu sistemde eserin hareketlendirilme süreci özellikle önemli ele alınır
- Untitled, 2024
- Light Doesn't Bend That Way #1, 2023
1 yorum
Hacker News yorumları
Kendiniz denemek isterseniz, ücretsiz e-kitap Ray Tracing Gems II 1 güncel API’ler ve donanım hızlandırmalı gerçek zamanlı GPU ray tracing konusunu ele alıyor; spektral rendering bölümü de var.
Özellikle 42. bölüm, “Efficient spectral rendering on the GPU for predictive rendering”, bu konuyla ilgili.
1 https://www.realtimerendering.com/raytracinggems/rtg2/
Çok hızlı bir giriş için Ray Tracing in One Weekend 1 de önerilir; sonrasında daha derine inmek isterseniz Physically Based Rendering [2] iyi bir kaynak.
1 https://raytracing.github.io/
[2] https://pbrt.org/
Ray tracing’i bizzat kurcalayacak zamanım yok ama kitabın ilk kısımlarına göz atınca alias sampling çok zarif ve iyi bir teknik gibi göründü.
Grafiklerden çok daha geniş bir bağlamda faydalı; keşke daha önce bilseydim diye düşündüm.
Spektral ray tracer örnekleri olarak birkaç seçenek var.
Mitsuba, türevlenebilir rendering gibi pek çok havalı özelliği olan açık kaynaklı bir araştırma renderer’ı: https://www.mitsuba-renderer.org/
Maxwell’in doğruluk düzeyleri farklı iki spektral modu var; daha karmaşık olan yöntem optik tarafında sık kullanılıyor: https://maxwellrender.com/
Wētā FX’in Manuka’sı spektral bir renderer ve birçok uzun metrajlı filmde kullanıldı: https://dl.acm.org/doi/10.1145/3182161 ve https://www.wetafx.co.nz/research-and-tech/technology/manuka
İç yapısını görmek istiyorsanız ama büyük ölçekli prodüksiyon araçları fazla karmaşıksa, bu implementasyona bakmanızı öneririm.
Spektral path tracer’ın asgari bileşimine yakın harika bir örnek: https://github.com/TomCrypto/Lambda
Indigo Renderer ve açık kaynaklı LuxRender da var.
https://indigorenderer.com
https://luxcorerender.org
Bence spektral rendering, ray tracing’in kendisinin rendering’in varış noktası değil, daha çok başlangıç noktası olduğuna iyi bir örnek.
Bazen gerçek zamanlı ray tracing ile rendering sorununun çözüldüğü gibi bir hava görüyorum, ama bunun gerçeklerden epey uzak olduğunu düşünüyorum.
Bildiğim kadarıyla çoğu spektral rendering sistemi ince film girişimi veya diğer dalga temelli efektleri işlemiyor; o taraf da başka bir keşif alanı.
Gerçeklikte şaşırtıcı derecede çok ayrıntı var.
Rendering, alttaki fiziksel ilkelere yaklaştıkça oyun motorları giderek dünya simülasyonu motorlarına dönüşecek.
Bugün genellikle ayrı duran çeşitli motor bileşenleri ortak bir noktaya yakınsadıkça, örneğin fizik katmanı ile rendering katmanı arasındaki ayrım azalabilir.
Bu eğilimin şu anda da bir ölçüde gözlemlenip gözlemlenmediğini merak ediyorum.
Hesaplama gücü birkaç mertebe daha arttığında, bugünkü soyutlamalar da 30 yıl önceki son teknolojilere baktığımız gibi, geçmişteki teknik kısıtların şekillendirdiği yapılar olarak görünecek.
Fraktal gibi; daha yakından baktıkça, gördüklerimizi etkileyen daha fazla ayrıntı ortaya çıkıyor.
%100 fiziksel olarak doğru renderinge adım adım yaklaşıyoruz, ama muhtemelen %100’e ulaşamayacak ve sürekli küçük yüzdeler eklemeye devam edeceğiz.
Gerçeklikte şaşırtıcı derecede çok ayrıntı var sözüne ek olarak, az yerde uygulansa da belirli sahnelerde oldukça fark edilir etkiler üreten bir başka şey de ışığın polarizasyonu1.
Harika bir spektral ray tracing motoru olarak LuxRender var: https://luxcorerender.org/
Ancak bu eski sürümler için geçerli; güncel LuxCore renderer’da tam spektral destek yok.
Burada bahsedilen efektlerin dışında da spektral rendering’in başka avantajları var.
Işık izleme yöntemiyle uygulanırsa sonradan ışık kaynaklarının rengini, spektrumunu ve yoğunluğunu değiştirebilirsiniz; birçok sahnede dolaylı aydınlatma da çok daha doğru hale gelir.
Ray tracing uygulamasıyla oynamak istiyorsanız, kendiniz yazmak şaşırtıcı derecede kolaydır
İyi bir ücretsiz kitap (https://raytracing.github.io/books/RayTracingInOneWeekend.ht...) var; Unity’yi biraz biliyorsanız GPU tabanlı öğretici (https://medium.com/@jcowles/gpu-ray-tracing-in-one-weekend-3...) de iyi
Unity sürümünde sahne önizlemesini ve kamera hareketini kolaylaştıran bir GUI olduğu için kurcalaması daha rahat
Sıfırdan yazmak istemiyorsanız bu kaynaklara dayanan çok sayıda uygulama da var, ama kendiniz denemeye kesinlikle değer
Temel uygulamayla oynarken ışınları parçacık gibi hareket ettirip yollarını nesnelere doğru ya da tersine büktürdüm; ayrıca son yansıma açısını hatırlatıp bir sonraki malzeme çarpışmasında kullandırmayı denedim
Sonuçların çoğu pek iyi değildi, ama baktığım nesne hakkında sezgi kazandım; kamerayı biraz oynatıp bakmak da çok yardımcı oluyor
Küçük bir hobi programlama projesi olarak gerçekten eğlenceli
Yöntem şu: bir nesneyle kesişince ışının maksimum uzunluğunu küçük ayarlıyor, o noktadan çevreye birden fazla ışın gönderiyor ve her çarpışmaya yerçekimi denklemlerine benzer bir şey uyguluyorsunuz
Elbette yavaş ve yalnızca yaklaşık, ama kolay; sahnedeki ışığı büken kara delik nesnesi gibi şeyler bile uygulayabilirsiniz
İlk ray tracer’ımı yazdığımda bütün hafta sonumu almamıştı; bir gecede yazdığım yaklaşık dört sayfalık C koduydu
http://canonical.org/~kragen/sw/aspmisc/my-very-first-raytra...
Daha sonra Clojure ve Lua’da ray tracer, JavaScript’te de ray marcher yaptım; çok küçük ve basit olabiliyorlar
Dün gece mentor/TBC’nin Spongy’sine https://www.pouet.net/prod.php?which=53871 baktım; sisli fraktal animasyon ray tracer’ı 65 makine kodu komutundan oluşuyor ve MS-DOS çalıştırılabilir dosyası 128 bayt
Ray tracing görüntüleri o kadar etkileyici ki, bunları üreten algoritma ve veri yapılarının da çok zor olması gerektiği düşüncesi insanı kolayca yıldırabiliyor; oysa 3B vektörleri zaten biliyorsanız aslında oldukça basit
SDF ray marching bana geleneksel Whitted tarzı ray tracer’dan daha basit geliyor; çünkü sahne geometrisiyle kesin kesişimi çözmek için gereken karmaşık matematiğin çoğunu çok basit bir ardışık yaklaşım algoritmasıyla değiştiriyor
Spongy veya Oscar Toledo G.’nin bootsector raytracer’ı https://github.com/nanochess/RayTracer gibi aşırı küçük ray tracer’ları anlamak, biraz daha büyük uygulamalardan çoğu zaman daha zor olabiliyor
Çünkü bu kadar küçük yapmak için çok sayıda numara gerekiyor ve bu numaraları anlamak, sade kodu anlamaktan daha zor
Sonuna kadar gitmek istiyorsanız her ışının yalnızca dalga boyunu değil, polarizasyonunu ve fazını da izlemeniz gerekir
Bu özelliklerin gerçek insan algısını etkilediği durumlar, ince filmler veya kırınım ızgaraları gibi nadir örneklerdir; ama kesinlikle vardır
Matematik ve fiziğin gerçekten işlediğindeki güzelliği görüyorsunuz
Güzellik için eklenen bazı ayarların başka görselleştirme yöntemlerinde de işe yarayıp yaramayacağını merak ediyorum
Apple II’de çok sesli müzik yapmak için kitaptaki kodu elle yazdığım zamanları da hatırlatıyor
Çalıştırdığımda belli ki bir şeyler yanlıştı; ama kaba gürültü yerine tuhaf biçimde güzel bir nota deseni çıktı ve o tesadüfi hata oldukça büyüleyiciydi
Hiperyspektral görüntü gibi, 3 kanalı çok aşan görüntüler yapılabilir diye düşünüyorum
Çocuklara rengi daha iyi öğretmek için spektrumu vurgulama amacıyla bunu bir ara incelemiştim
Örneğin bir görüntüde1 pikselin üzerine fareyle gelince spektrumu gösterip renk ile spektrum arasındaki bağlantıyı güçlendirmek gibi
Ancak hiperspektral görüntüler nadir ve geleneksel olarak kameralar[2] pahalıydı
Peki sentetik hiperspektral görüntülere ne dersiniz?
Çok düşük çözünürlüklü bir tarayıcı renderer’ı, aydınlatma ve malzemelerle etkileşimli olarak oynamaya yetecek kadar hızlı olabilir
Ayrıca renk görme bozukluğu olanların, “katarakt merceği alındıktan sonra UV görebilen” insanların, dikromat primat olmayan memelilerin (fare/köpek) ve tetrakromat zebra balıklarının bakış açıları da uygulanabilir gibi görünüyor
1 http://www.ok.sc.e.titech.ac.jp/res/MSI/MSIdata31.html
[2] Zaman çoğullamalı dar bant aydınlatma kullanan düşük maliyetli multispektral kamera: https://ubicomplab.cs.washington.edu/publications/hypercam/
Görüntünün nihai değeri her ışık kaynağının katkısının dönüştürülmüş halidir; ışık kaynağının spektrumunu bildiğiniz için pikselin spektrumuna da sahip olabilirsiniz
Ancak anlamlı bir dispersiyon ya da ince film etkisiyle karşılaşırsanız her yol için dalga boyunu örneklemeniz gerekir; bu da yöntemi daha yaklaşık hale getirir
Kendi dağıtık ray tracer’ıma kırılmayı eklemeyi düşünüyorum
Olasılıksal bir yöntem, paralel bir yöntem değil https://en.m.wikipedia.org/wiki/Distributed_ray_tracing
Frekansı rastgele örnekleyip rengini hesapladıktan sonra ışın rengini ayarlamak için kullanmak yeterli olur gibi
Saf kırılma renginin parlaklığın 1/3’ü olmasını telafi etmek için sonucu 3 ile çarpmak gerekir
Hatırladığım kadarıyla Rob Cook’un SIGGRAPH makalelerinden birinde geçen bir terim
Daha genel ve birleşik bir kavram olarak yol izlemeye geçmek daha iyi; arama yaparken veya araştırırken ipuçları ve teknikler bulmak da daha kolay
Spektral rendering ile kırılmayı birleştirirken dağılımı örnekleyip frekansı seçmek gerektiği doğru
Genel olarak zorlayıcı olabilir, bu yüzden adım adım üzerine koymak daha iyi
Yansıma için de aynı, ancak her iki durumda da frekansa bağlı malzemeler kullanıp kullanmamak tercihe kalmış
Basitleştirilmiş malzemeler kullansanız bile spektral yöntemi kullanmak için hâlâ nedenler var