Önce özete göz atDersin sonundaki özet, okumaya başlamadan önce yol haritası olarak.
- RGB render ışığı ve yüzeyleri üç sayıyla temsil eder ve etkileşimlerini kanal kanal çarpar; bu, tayfların dalga boyu dalga boyu çarpımının bir yaklaşımıdır ve ışık ya da yüzey tayfı dar tepeler içerdiğinde yanılır. Spektral render ışığı dalga boyunun fonksiyonu olarak hesaplar ve dağılmayı, metamerizmi ve dar bantlı ışıkları doğru üretir.
- Bir prizmada her dalga boyu farklı açıyla kırılır: 60 derecelik bir N-BK7 prizmada sapma 450 nm'de 39,40°, 700 nm'de 38,32°'dir. RGB render bu sürekli yelpaze yerine beyaz bir ışın ya da üç ayrık şerit üretir.
- Spektral render'ın iki bedeli, RGB verisinden tayf üretme ihtiyacı ve fazladan hesaptır; yukarı örnekleme ve kahraman dalga boyu gibi örnekleme yöntemleri bu bedelleri azaltır. Örnekte kehribar bir LED altında RGB çarpımı dört teni ΔE00 7,5 ile 15,5 arasında yanlış üretir.
Kısa cevap
Bilgisayar grafiğinde ışık çoğu zaman üç sayıyla, kırmızı, yeşil ve mavi değerleriyle hesaplanır; bir yüzeyin ışıkla etkileşimi de bu üç sayının kanal kanal çarpılmasıyla bulunur. Bu yöntem hızlıdır ve gündelik sahnelerin çoğunda yeterince doğrudur, ama gerçekte ışık bir tayftır ve bir prizmada her dalga boyu farklı açıyla kırılır: üç sayıyla çalışan bir render, bu yüzden bir prizmanın sürekli gökkuşağını üretemez, en fazla birkaç ayrık renk şeridi ya da hiç ayrışmamış beyaz bir ışın verir. Spektral render ışığı dalga boyu dalga boyu hesaplar; dağılmayı, metamerizmi ve dar bantlı ışıklar altında renklerin nasıl değiştiğini doğru üretir, ama sahnedeki her rengin bir tayfa çevrilmesini ve daha fazla hesabı gerektirir.
Üç sayıyla ışık
Bir render motoru, bir sahnedeki ışığın kaynaklardan çıkıp yüzeylere çarparak kameraya nasıl ulaştığını hesaplar. HS-01, renk dönüşümlerini koda dökmeyi anlatmıştı; bu ders o dönüşümlerin arkasındaki daha temel bir seçimi ele alıyor: ışığın kendisi nasıl temsil edilecek?
Bu yöntemin cazibesi açıktır. Dokular zaten RGB olarak saklanır, ekran RGB gösterir ve üç sayıyı çarpmak çok ucuzdur. Ama bu kolaylık, gerçekte olan bir şeyi gizler.
Fizikte bir yüzeyden yansıyan ışığın tayfı, gelen ışığın tayfının yüzeyin yansıtım tayfıyla her dalga boyunda çarpılmasıyla bulunur; göz ya da kamera ancak bundan sonra bu tayfı üç sayıya indirir. RGB render bu sırayı tersine çevirir: önce ışığı ve yüzeyi ayrı ayrı üç sayıya indirir, sonra bu sayıları çarpar. İki işlem aynı sonucu ancak belirli koşullarda verir: ışık tayfı düzgün ve beyaza yakınsa, ya da yüzeyin tayfı düzgünse. Işık ya da yüzey tayfı dar tepeler içerdiğinde iki yol birbirinden ayrılır.
Tayfla hesaplamak
Mallett ve Yuksel spektral render'ın üstünlüğünü ve onu sınırlayan pratik sorunu birlikte özetler.
Spektral render'ın getirdiği farklar üç başlıkta toplanır: dağılma, metamerizm ve dar bantlı ışıklar.
Dağılma. BI-06 gökkuşağını ve dağılmayı, yani kırılma indisinin dalga boyuna göre değişmesini anlatmıştı. Bir cam prizmada kısa dalga boyları uzun dalga boylarından daha çok kırılır ve beyaz ışık bir renk yelpazesine açılır. Bunu hesaplamak için her ışığın dalga boyu bilinmelidir; üç sayıyla temsil edilen bir ışığın dalga boyu yoktur.
Metamerizm. BI-15 metamerizmi, yani tayfları farklı iki yüzeyin bir ışıkta aynı, başka bir ışıkta farklı görünmesini anlatmıştı. RGB render'da iki yüzey aynı RGB değerine sahipse, her ışıkta aynı kalır; çünkü onları ayıracak tayf bilgisi yoktur. Spektral render bu ayrımı doğal olarak üretir. Bunu bir hesapla görmek için en açık ten örneğinin tayfına, gün ışığında gözün hiç göremediği bir dalgalanma, yani bir «metamerik siyah» ekledik: yeni tayfın D65 altındaki rengi ilkiyle birebir aynıdır, fark 0,00 birimdir. Aynı iki tayf, üç dar tepeli FL11 floresanı altında 6,7, kehribar LED altında 1,8 birim ayrılır. RGB render iki yüzeye de aynı sRGB değerini verdiği için, hangi ışık kullanılırsa kullanılsın onları hep aynı gösterir; mağaza ışığında iki kumaşın, ya da iki fondöten tonunun birbirinden ayrılması, ancak tayfları taşıyan bir hesapla öngörülebilir.
Dar bantlı ışıklar. Sodyum lambalar, LED'ler ya da floresan tüpler gibi tayfı dar tepeler içeren ışıklar altında yüzeylerin rengi, RGB çarpımının öngördüğünden belirgin biçimde farklı olabilir. Bunu aşağıdaki örnekte ölçeceğiz. Bir ışık kaynağının tayfı, BI-16'nın tayfsal güç dağılımı dediği eğridir; spektral bir motor ışık kaynaklarını da bu eğrilerle tanımlar. Gün ışığı ve akkor lamba gibi kaynakların eğrileri görünür aralık boyunca yumuşakça değişir, bu yüzden RGB'ye indirgendiklerinde az bilgi kaybolur. LED'lerin ve boşalmalı lambaların eğrileri ise dar tepelerden ve aralarındaki boşluklardan oluşur; üç sayıya indirgendiklerinde, hangi dalga boylarında ışık olmadığı bilgisi kaybolur ve yüzeyin o boşluklara denk gelen yansıtımı hesaba hiç girmez.
Kartın sorusu: prizma
Kartın sorusu, RGB render'ın bir prizmanın gökkuşağını neden doğru üretemediğidir. Cevabı sayılarla görmek için yaygın bir optik camı, N-BK7'yi alalım. Schott'un katalog verisinden alınan Sellmeier katsayılarıyla bu camın kırılma indisini dalga boyuna göre hesapladık; 589,3 nanometrede hesaplanan 1,51673 değeri, camın katalogdaki kırılma indisiyle örtüşür.
Tepe açısı 60 derece olan bir N-BK7 prizmasında, en küçük sapma koşulunda ışığın sapma açısı dalga boyuna göre şöyledir:
| Dalga boyu | Kırılma indisi | Sapma açısı |
|---|---|---|
| 450 nm | 1,52532 | 39,40° |
| 550 nm | 1,51852 | 38,80° |
| 589,3 nm | 1,51673 | 38,64° |
| 650 nm | 1,51452 | 38,45° |
| 700 nm | 1,51306 | 38,32° |
Mavi ışık kırmızıdan yaklaşık bir derece daha fazla sapar ve aradaki her dalga boyu bu iki açı arasında kendi yerine düşer. Göz bu sürekli dağılımı, her dalga boyunun kendi rengiyle sıralandığı kesintisiz bir renk yelpazesi olarak görür.
RGB render bu yelpazeyi iki yoldan biriyle bozar. Birincisi, ışığa tek bir kırılma indisi verilir; o zaman prizma ışığı büker ama ayrıştırmaz ve prizmadan beyaz bir ışın çıkar. İkincisi, her kanala temsilî bir dalga boyu ve ona karşılık gelen bir kırılma indisi verilir; o zaman prizmadan üç ayrık ışın, bir kırmızı, bir yeşil ve bir mavi şerit çıkar. Aradaki sarılar, camgöbekleri ve turuncular oluşmaz, çünkü onları oluşturacak dalga boyları hiç hesaplanmamıştır. Üstelik ekrandaki sarı, kırmızı ve yeşil kanalların karışımıdır; ama prizmada kırmızı ve yeşil şeritler farklı yerlere düştüğü için sarı bir bölge de oluşmaz. Gökkuşağının sürekliliği, ışığın birçok dalga boyu için ayrı ayrı izlenmesini gerektirir.
RGB'den tayfa: yukarı örnekleme
Spektral render'ın en büyük pratik engeli verinin kendisidir. Sahnedeki dokular, boyalar ve malzemeler çoğu zaman yalnız RGB olarak bilinir. Onları spektral bir motorda kullanmak için her RGB değerinden bir yansıtım tayfı üretmek gerekir.
Bu sorunun tek bir cevabı yoktur, çünkü aynı üç sayıyı veren sonsuz sayıda tayf vardır; bu, metamerizmin tersten görünüşüdür. Yöntemler bu yüzden bir tayf seçerken bir ölçüte dayanır. Smits 1999'da, yansıtım tayflarını birkaç düzgün temel tayfın birleşimiyle kuran erken ve yaygın kullanılan bir yöntem önerdi. Yirmi yıl sonra iki farklı çözüm aynı yıl yayımlandı.
Mallett ve Yuksel, herhangi bir sRGB yansıtım tayfının, her biri BT.709 ana renklerinden birine karşılık gelen üç ayrı tayfın doğrusal birleşimi olarak kurulabileceğini ilk kez gösterdi; yöntemleri, girilen sRGB değerini D65 ışığı altında birebir yeniden üretir. Jakob ve Hanika ise tayfları düşük boyutlu, parametrik bir modelle temsil etti.
Yukarı örneklemenin bir sınırı vardır: ürettiği tayf, rengin gerçek tayfı değildir, yalnız aynı rengi veren makul bir tayftır. D65 altında birebir doğru olan bir tayf, başka bir ışık altında gerçek yüzeyin rengini vermeyebilir. Gerçek bir malzemenin davranışını doğru üretmek için tayfı ölçülmüş olmalıdır.
Işığı dalga boylarıyla izlemek
Spektral render'ın ikinci maliyeti hesaptır. Bir yol izleme motoru, kameradan çıkan milyonlarca ışın yolunu rastgele örnekler; spektral bir motor bu yolların her birini ayrıca dalga boylarıyla da örnekler.
Tek bir dalga boyuyla izlenen bir yol, renk gürültüsü üretir; çünkü her yol tayfın yalnız bir noktasını görür. Wilkie ve arkadaşları 2014'te bu gürültüyü azaltan bir yöntem önerdi.
İki yöntem birbirini tamamlar. Jakob ve Hanika, parametrik tayf modellerinin aynı anda birçok dalga boyunu işleyen render sistemlerinde verimli biçimde vektörleştirilebildiğini belirtir; kahraman dalga boyu yöntemi de tam olarak böyle bir sistemdir, çünkü her yol birkaç dalga boyunu birlikte taşır. Dokulardan tayf okumak ucuzlaştıkça, her yolda birden fazla dalga boyu izlemenin maliyeti de düşer. Kahraman dalga boyu yönteminin inceliği, prizma sorununu da çözmesidir: kırılma yönü kahraman dalga boyuna göre seçildiği için, her yol cam içinde gerçekten bir dalga boyunun izlediği yolu izler; çok sayıda yol toplanınca sürekli bir yelpaze ortaya çıkar.
Nerede kullanılır?
Spektral render yalnız bir araştırma konusu değildir. Fascione ve arkadaşları 2018'de, görsel efekt yapımı için geliştirilmiş Manuka adlı render mimarisini tanıttı ve spektral ışık taşınımını mimarinin temel özelliklerinden biri olarak tanımladı.
Kartın andığı iki kullanım alanı, film ve ürün görselleştirme, aynı gerekçeyi paylaşır. Görsel efektte bilgisayarla üretilmiş bir nesne, gerçek bir çekimde gerçek ışıklarla aydınlatılmış nesnelerin yanında durur; ışık tayfı dar tepeler içerdiğinde RGB çarpımının hatası birleştirmede görünür olur. Ürün görselleştirmede ise bir kumaşın, bir boyanın ya da bir cildin mağaza ışığında nasıl görüneceği sorulur; bu soru, BI-15'in mağaza ile ev arasındaki renk değişimi sorusunun ta kendisidir. Bu alanlarda spektral render'ın maliyeti, yanlış rengin maliyetinden düşüktür. Gündelik oyunlarda ve arayüzlerde ise ışıklar çoğu zaman düzgün tayflı varsayılır ve RGB render'ın hızı ağır basar.
Örnek — dar bantlı ışıkta dört ten
RGB çarpımının hatasını dört ten örneğinde ölçelim. Her tenin sRGB değerinden, Mallett ve Yuksel'in yöntemiyle bir yansıtım tayfı ürettik. Sonra her teni iki ışık altında iki yoldan render ettik. Spektral yolda ten tayfı ile ışık tayfı dalga boyu dalga boyu çarpıldı ve sonuç renge çevrildi. RGB yolunda ışığın rengi sRGB değerlerine indirildi ve tenin sRGB değerleriyle kanal kanal çarpıldı. İki sonucun CIEDE2000 farkı şöyledir:
| Ten | Floresan FL11 (üç dar tepeli) | Kehribar LED (590 nm, dar bant) |
|---|---|---|
| F1C7A9 | 1,4 | 12,3 |
| C68863 | 2,0 | 15,5 |
| 8D5524 | 2,9 | 14,5 |
| 4A2C1D | 1,3 | 7,5 |
Üç dar tepeli bir floresan tüp altında RGB çarpımının hatası küçüktür; tüpün üç tepesi, sRGB'nin üç kanalına görece iyi düşer. Tek bir dar bantta ışık yayan kehribar bir LED altında ise hata 7,5 ile 15,5 birime çıkar. Bu ışığın rengi sRGB'nin gamının dışındadır: sRGB değerlerine indirildiğinde mavi kanalı eksiye düşer ve RGB çarpımı, var olmayan bir ışıkla hesap yapar. Hata tenden tene de değişir: orta tonlu tenlerde en büyük, en koyu tende en küçüktür, çünkü en koyu ten az ışık yansıtır ve mutlak farklar da küçülür. Dar bantlı ışıklar altında bir ten sahnesini doğru üretmek, bu yüzden spektral render gerektirir.
Yukarı örnekleme yönteminin seçimi sonucu ne kadar değiştirir? Aynı dört teni bir de Smits'in 1999 yöntemiyle tayfa çevirdik ve iki yöntemin tayflarını aynı ışıklar altında karşılaştırdık.
| Ten | Gün ışığı (D65) | Floresan FL11 | Kehribar LED |
|---|---|---|---|
| F1C7A9 | 0,9 | 0,8 | 1,0 |
| C68863 | 1,1 | 1,0 | 1,6 |
| 8D5524 | 1,6 | 1,2 | 1,8 |
| 4A2C1D | 0,7 | 0,8 | 1,3 |
İki yöntem gün ışığında bile tam aynı rengi vermez, çünkü Smits'in yöntemi, Mallett ve Yuksel'inkinin aksine, girilen rengi birebir geri üretmeyi garanti etmez. Ama iki yöntemin farkı, kehribar LED altında bile 1,0 ile 1,8 birim arasında kalır. Bu, RGB çarpımının aynı ışık altındaki 7,5 ile 15,5 birimlik hatasının yanında küçüktür. Bu ten tonları gibi düzgün tayflı renklerde asıl kazanç, hangi yukarı örnekleme yönteminin seçildiğinden çok, hesabın tayfla yapılmasından gelir.
Bu hesabın bir sınırı vardır ve bu sınır dersin kendi konusudur. Ten tayfları gerçek ölçümler değil, sRGB değerlerinden yukarı örneklenmiş düzgün tayflardır. Gerçek deri tayfında, DO-08'de gördüğümüz kan pigmentinin soğurma tepeleri gibi ayrıntılar vardır ve bunlar tek bir renkte parlayan bir lambanın ışığında sonucu daha da değiştirebilir. Spektral render'ın bütün gücü, ancak sahnedeki malzemelerin tayfları ölçüldüğünde ortaya çıkar.
Sık yapılan yanlış
Yaygın yanlış"RGB render ile spektral render arasındaki fark yalnız bilimsel bir inceliktir; gözle görülmez."
Dar bantlı ışıklar altında fark büyüktür: örnekte kehribar bir LED altında dört tenin RGB ve spektral render'ları arasındaki fark ΔE00 7,5 ile 15,5 arasındaydı; prizmada ise RGB render sürekli yelpaze yerine üç ayrık şerit ya da beyaz bir ışın üretir.
Yaygın yanlış"Bir RGB değerinden üretilen tayf, o rengin gerçek tayfıdır."
Aynı üç sayıyı veren sonsuz sayıda tayf vardır; yukarı örnekleme bunlardan makul birini seçer. D65 altında birebir doğru olan bu tayf, başka bir ışık altında gerçek yüzeyin rengini vermeyebilir; gerçek davranış için tayfın ölçülmesi gerekir.
Özet
- RGB render ışığı ve yüzeyleri üç sayıyla temsil eder ve etkileşimlerini kanal kanal çarpar; bu, tayfların dalga boyu dalga boyu çarpımının bir yaklaşımıdır ve ışık ya da yüzey tayfı dar tepeler içerdiğinde yanılır. Spektral render ışığı dalga boyunun fonksiyonu olarak hesaplar ve dağılmayı, metamerizmi ve dar bantlı ışıkları doğru üretir.
- Bir prizmada her dalga boyu farklı açıyla kırılır: 60 derecelik bir N-BK7 prizmada sapma 450 nm'de 39,40°, 700 nm'de 38,32°'dir. RGB render bu sürekli yelpaze yerine beyaz bir ışın ya da üç ayrık şerit üretir.
- Spektral render'ın iki bedeli, RGB verisinden tayf üretme ihtiyacı ve fazladan hesaptır; yukarı örnekleme ve kahraman dalga boyu gibi örnekleme yöntemleri bu bedelleri azaltır. Örnekte kehribar bir LED altında RGB çarpımı dört teni ΔE00 7,5 ile 15,5 arasında yanlış üretir.
Kendini sına
- (Kolay) RGB render ile spektral render arasındaki temel fark nedir?
- (Kolay) Spektral yukarı örnekleme neden tek bir doğru cevap vermez?
- (Orta) RGB render bir prizmanın gökkuşağını neden doğru üretemez?
- (Orta) Kahraman dalga boyu yöntemi hangi sorunu çözer?
- (Zor) Örnekte RGB çarpımının hatası neden floresan tüpte küçük, kehribar LED'de büyüktür?
- (Zor) Örnekteki ten hesabının sınırı nedir ve bu sınır spektral render hakkında ne söyler?
Cevaplar
- RGB render ışığı ve yüzeyleri üç sayıyla temsil eder ve etkileşimlerini kanal kanal çarpar; spektral render ise ışığı ve yüzeyleri dalga boyunun fonksiyonu olarak temsil eder ve etkileşimlerini dalga boyu dalga boyu hesaplar, üç sayıya ancak en sonda indirger. Bkz. "Üç sayıyla ışık" ve "Tayfla hesaplamak".
- Çünkü aynı üç sayıyı veren sonsuz sayıda tayf vardır; yöntemler bunlardan birini, tayfın düzgünlüğü ve enerjinin korunması gibi ek varsayımlarla seçer. Bkz. "RGB'den tayfa: yukarı örnekleme".
- Çünkü prizmada her dalga boyu farklı açıyla kırılır ve gökkuşağı bu sürekli dağılımdan oluşur; RGB render'da ışığın dalga boyu yoktur. Işığa tek bir kırılma indisi verilirse prizmadan beyaz bir ışın, her kanala bir dalga boyu verilirse yalnız üç ayrık şerit çıkar; aradaki renkleri oluşturacak dalga boyları hiç hesaplanmaz. 60 derecelik bir N-BK7 prizmada sapma 450 nm'de 39,40°, 700 nm'de 38,32°'dir ve aradaki her dalga boyu kendi yerine düşer. Bkz. "Kartın sorusu: prizma".
- Tek dalga boyuyla izlenen yolların ürettiği renk gürültüsünü azaltır: her yol, rastgele seçilen bir kahraman dalga boyu ve ondan eşit uzaklıktaki birkaç dalga boyuyla izlenir, böylece bir yolun dalga boyları görünür aralığı eşit biçimde kapsar; yön örneklemesi kahraman dalga boyuna göre yapıldığı için dağılma da doğru üretilir. Bkz. "Işığı dalga boylarıyla izlemek".
- Floresan tüpün üç dar tepesi sRGB'nin üç kanalına görece iyi düşer, bu yüzden üç sayıya indirgeme az bilgi kaybettirir; kehribar LED ise tek bir dar bantta ışık yayar, rengi sRGB gamının dışındadır ve sRGB'ye indirildiğinde mavi kanalı eksiye düşer. RGB çarpımı böylece var olmayan bir ışıkla hesap yapar. Bkz. "Örnek".
- Ten tayfları ölçülmüş değil, sRGB değerlerinden yukarı örneklenmiş düzgün tayflardır; gerçek deri tayfındaki kan pigmentinin soğurma tepeleri gibi ayrıntıları içermez. Bu, spektral render'ın bütün gücünün ancak malzemelerin tayfları ölçüldüğünde ortaya çıktığını gösterir. Bkz. "Örnek".
Kaynaklar
- Smits, B., «An RGB-to-spectrum conversion for reflectances», Journal of Graphics Tools 4(4): 11–22, 1999.
- Wilkie, A., Nawaz, S., Droske, M., Weidlich, A. ve Hanika, J., «Hero wavelength spectral sampling», Computer Graphics Forum 33(4): 123–131, 2014.
- Fascione, L., Hanika, J., Leone, M., Droske, M., Schwarzhaupt, J., Davidovič, T., Weidlich, A. ve Meng, J., «Manuka: a batch-shading architecture for spectral path tracing in movie production», ACM Transactions on Graphics 37(3): 1–18, 2018.
- Jakob, W. ve Hanika, J., «A low-dimensional function space for efficient spectral upsampling», Computer Graphics Forum 38(2): 147–155, 2019.
- Mallett, I. ve Yuksel, C., «Spectral primary decomposition for rendering with sRGB reflectance», Eurographics Symposium on Rendering, 2019.
- Polyanskiy, M. N., refractiveindex.info veri tabanı, «SCHOTT optical glass: N-BK7» (Schott Zemax kataloğu, 2017).
Sonraki adım
HS-03 hesaplamalı rengin bir başka sorusuna geçiyor: kural tabanlı, veri tabanlı ve öğrenen palet üretme yöntemlerini karşılaştırıyor, «güzellik» ölçmenin zorluğunu tartışıyor ve bir palet üretme modelinin neyle eğitileceğini ve bu verinin hangi yanlılığı taşıdığını soruyor. Dağılmanın fiziği BI-06'da, metamerizm BI-15'te, renk dönüşümlerini kodlamak HS-01'de ele alınmıştı.