holodepth

Three.js · Görüntü sonrası · İşlem sırası

Pass sırası: görsel mantığın hiyerarşisi

Post-processing bir mutfağa benzetilirse, malzemeleri tencereye koyma sıranız tabaktaki tadı belirler. Zincirdeki her geçiş, bir önceki adımın ürettiği pikselleri tek kullanımlık hammaddedir; bir aşamada bilgi kaybı veya yanlış sıkıştırma olduysa sonraki tüm «usta eller» aynı hatayı taşımak zorunda kalır — çünkü geriye dönük olarak üç boyutlu sahneyi yeniden keşfetme şansınız yoktur, yalnızca eldeki tampon vardır.

Bu sayfa özellikle «hangi efekt kimden önce?» sorusunu kurallara bağlar. Pass zinciri düğümleri ve ping–pong mantığını anlatır; aynı dizideki sıra bölümü ise buranın ön habercisidir. Burada ise görsel ve matematiksel gerekçeyle birlikte tipik bir Holodepth iş akışı ve sıklıkla yapılan hatalar tablosu bulunur — böylece iki içerik üst üste binmez, tamamlayıcı okunur.

A. Neden sıralama bu kadar kritik?

Her pass, soyut olarak bir görüntü üzerinde fonksiyon bileşimi gibidir: önceki tampondaki renk ve yardımcı kanallar, fonksiyonun tanım kümesidir. Bazı işlemler bilgi yok edicidir: tek kanala düşüren bir siyah–beyaz geçiş, renk doygunluğu için gerekli üç kanalı matematiksel olarak çökerttiği için doygunluk düğmesi artık «boşa bağlıdır». Bu bir yazılım hatası değil; sıranın doğasıdır — yanlış sırada doğru matematik yapılıyor olabilirsiniz, sonuç yine mantıksızdır.

Öte yandan bazı işlemler görünüşte değiştirirken bilgi kanalı korurlar; gerçek risk, birbirini iptal eden iki küresel operatörü yanlış sırada uygulamaktır: örneğin aşırı agresif bir ton sıkıştırması, bir sonraki parlama geçişine aktarılacak parlaklık başını önce budayıverir. Bu yüzden sırayı ezberlemek yetmez; her geçişin bir öncekilerden hangi sinyali beklediğini cümleyle yazmak gerekir.

İdeal post-processing iş akışı (özet protokol)

Aşağıdaki sıra «tek doğru evrensel düzen» iddiasında değildir; fakat çoğu LDR çıktılı, EffectComposer tarzı zincir için güvenli bir başlangıç çekidir. HDR ara tamponlu iş akışlarında bloom ile tone mapping arasında tartışmalı varyasyonlar olabilir — kritik olan, ekibin hangi uzayda neyin parlaklık sayılacağına tek kararda oturmasıdır (Pass zinciri · sıra tartışması ile paralel düşünün).

1. Sahne render’ı (Base Pass)

Zincirin başıdır: kamera, ışıklar, gölgeler ve dokular ham görüntüyü üretir — üzerine müdahale edeceğiniz tabanın fotoğrafı gibidir. Burada üretilmeyen veri (ör. doğru derinlik tamponu), bir sonraki ekran-içi adım için bazen asla geri getirilemez; sadece bir üst çözünürlükte sahneyi yeniden çizmek gibi pahalı çözümler kalır.

2. Geometrik ve derinlik bazlı efektler (AO, DoF)

Tamamen bulanmış bir görüntü üzerinde köşe tespiti veya tutarlı derinlik kararı kurmak zordur; bu yüzden kökleşmiş yaklaşım, sahneyi okunabilir kılından sonra — ama henüz ağır renk finaline gelmeden — «uzayı yeniden okuyan» efektleri getirmektir.

  • Ambient Occlusion (SAO / SSAO): Köşe ve birbirini sıkan yüzey aralıklarında yapay gölgelenme ekler; tamamen ekran uzayından çalıştığı için kalibre edilmeli — detaylar için SAO geçişi özetini bağlayın.
  • Depth of Field: Derinlik maskesi ile seçilen düzlem dışını bulanıklaştırır; sıranın başına yakın tutmak, parlama ve renk düzeltmesinin yanlış yüzeye tatlanmasını azaltır.

3. Işık yayılımı ve atmosfer (Bloom)

Parlaklık seçimi için görüntüde henüz anlamlı bir parlama başı (luminance) olmalıdır. Bloom, seçilen pikselleri çok katmanlı yayılımla ana görüntünün üstüne — çoğu kurulumda additive karışımla — ekler. Ardından gelecek ton sıkıştırması, bazı iş akışlarında bu hâlen «yüksek enerjili» tampondadır; bu yüzden bloom’un gücü ile tone mapping kararı birlikte tasarlanmalıdır.

4. Renk ve ışık düzeltme (Color Grading · Tone Mapping)

Bloom’un yarattığı sıçramalı parlaklıklar ve sahne HDR verisi burada disipline edilir: tone mapping, monitörün gösterebildiği LDR aralığına sıkıştırma hissiyatını kurar; color grading ise atmosferi son darbesiyle tayin eder. Bu blok çoğu projede «final gölge ustası»dır — sıranın gerisinde gelen işler bunun çıktısına yapışır.

5. Kenar yumuşatma ve doku (Anti-Aliasing, grain)

FXAA / SMAA gibi kenar yumuşatıcılar, özellikle bloom’un halo kenarında yeniden beliren merdivenleri temizlemek için sıklıkla zincirin sonlarında kullanılır — seçim maliyetleri için yine Render target · AA geçişleri ile ilişkilendirin. Çok hafif bir film greni bazen «dijital cilayı» kırmak için en sona bırakılır; çünkü gren girişi agresifse daha önceki küçük geometrik ipuçlarını maskeleyebilir.

Yanlış sıralamanın doğurduğu sonuçlar

Tablo özündeki üç örneği büyütür: aynı shader parametreleriyle sırayı değiştirdiğinizde «bir şey bozuldu ama ne?» hissini kök nedene indirirsiniz. Üçüncü sütun, sonra yapılacak teşhis turunun ilk merdivenidir.

Teknik tablo: sıra hatası → görünür sonuç

Hatalı sıra Tipik sonuç Neden?
AABloom Tırtıklı veya «kestirilmiş» ışık parlamaları Yumuşatılmış kenarlardan sonra bloom genişleyerek yeniden keskin mikro örtüşmeler üretir.
Tone MapBloom Sönük ve cansız parlama Ton sıkıştırması parlaklık başını budayınca bloom’un yakalayacağı yüksek enerji azalır.
Doygunluk → B&W Gözle görülür bir etki yokmuş gibi davranış B&W geçişi renk kanallarını indirdiği için doygunluk vidası boşa dönmüş olur.

Gerçek sahnede üç hatayı üst üste yapmak bile mümkündür; debug sırasında zinciri tek tek kapatıp sıraları yer değiştirmek, bazen bir grafik ayarından daha hızlı «sessiz» nedeni gösterir.

Genel kural: ortada ağır işler, sonda finalizasyon

Bu dörtlüyü bir «iş güvenliği tulumları» sırası gibi düşünün: önce sahayı ölçer, sonra bilerek deformasyon yaparsınız; ardından çıktıyı gösterge standardına sıkıştırır, en sonda lens üzerindeki son parmak izlerini silersiniz. Aşağıdaki maddeler hem sıralama tartışmasını kısaltır hem de debug sırasında hangi kulvara düştüğünüzü etiketler.

  • Analiz: Bu fazda sorulan soru «Elimde güvenilir girdi var mı?»dur. İlk render geçişi gerçekten derinlik tamponunu üretti mi — yüzey bazında doğru mu, clipping yüzünden kopuk mu? Normal veya yardımcı tamponlar (ör. seçici materyal ID maskesi) planladıysanız aynı karede uyumlu mu? Çünkü sonradan gelecek ekran-içi efektler, üç boyutlu sahneyi yeniden hatırlamıyor; yalnızca bu tamponlardan çıkarım yapıyor. Burayı atlarsanız bir sonraki faz «kusursuz ama yanlış zeminde» çalışır.
  • Efekt: Burada görüntü kasıtlı olarak kaydırılır: yayılım, parlama dağılımı, glitch blokları, seçilmiş bölgelerde bulanıklık. Ortak özellikleri şudur: çıktı hâlâ «dramatik» olabilir; henüz nihai LDR gösterge uzayına kilitlenmiş olmak zorunda değildir — bazı efektler hatta özellikle geniş dinamik aralıkta daha doğru hissiyat verir. Bu yüzden efekt fazında sık yapılan hata, aşırı erken ton sıkıştırmasıyla parlama başını budayıp sonra bloom’a şikâyet etmektir.
  • Düzeltme: Artık «ne yapmak istediğiniz» değil, «monitörün ve ürünün kabul edeceği dil» öne çıkar: tone mapping patlayan beyazları ve gömülü gölgeleri izlenebilir bir aralığa iter; renk derecelendirme ise LUT / eğri ile duyguyu mühürler. Bu blok genelde «final şapkası»dır — bundan sonra yapılacak işler, çoğu zaman yalnızca hafif düzeltme veya artefakt giderme olmalıdır; aksi halde renk uzayı iki kez resetlenmiş gibi hissiyat oluşur.
  • Temizlik: Üretim hattının sonunda genelde «yumuşat ve sakla» kalır: FXAA / SMAA raster grid kaynaklı merdivenleri törpüler; çok hafif gren dijital plastiği kırar; bazı pipeline’larda son bir mikro keskinleştirme (abartılmadan) dokunun matlığını geri getirir. Bu adımlar erken alınırsa, daha sonra eklenecek geniş halasyon veya renk maskeleme tekrar kenarı öne çıkarır — bu yüzden çoğu zaman zincirin dibinde dururlar.

Bu dörtlü, ekip içi tasarım yorumlarında ortak dil oluşturur: tartışmayı «Bloom şişirdi mi?» yerine «Bloom doğru sırada mı, ton mapping bunu hangi uzayda tüketti?» düzlemine taşır.

Holodepth teknik notu

Bir kod tabanında sıra görünmez olmasın: zinciri README’ye dökmek şık değil ama bir diyagram veya numaralı liste zamanla daha ucuzdur. Üç mobil ve üç masaüstü profilde beklenen pass tur sayısını da yanlarına yazın — böylece optimizasyon sözleşmesi ile sıra sözleşmesi birbirinin yerini tutmaz.