holodepth

Three.js · Görüntü sonrası · Bloom

Bloom: ışığın fiziksel sızıntısı

Gerçek dünyada göz veya kamera, çok parlak bir kaynağa baktığında mercek ve ortamda dağılım yüzünden ışık sınırları «taşmış» gibi görünür — buna light bleeding veya glow denir. Gerçek zamanlı grafikte bloom, bu optik izlenimi taklit ederek parlak bölgelerin etrafına yumuşak bir enerji alanı örer; sahneye derinlik ve inandırıcılık katmanın en ucuz yollarından biridir — fakat kolayca da abartılabilir.

Bloom’un mesleği yalnızca «parlak yapmak» değildir; LDR ekranda sınırlı bir parlaklık tavanı varken, kullanıcıya «bu nesne gerçekten çok güçlü bir ışık kaynağı» hissi vermenin yolu çoğu zaman bu yayılmadır. Bu sayfa algoritmanın omurgasını ve ayar dilini kurar; zincirdeki yeri için Pass sırası · Bloom aşaması ve altyapı için Render target · EffectComposer ile birlikte okunmalıdır — tekrar etmek yerine tamamlar.

İki temel görevi ayırmak faydalıdır: ısı / enerji hissi (neon, sci-fi) ve özgün parlaklık illüzyonu (küçük bir ampulün «güneş gibi» okunması). İkisi de aynı matematiğe dayanır; fakat sanat yönetimi ve eşik seçimi tamamen farklıdır.

Bloom algoritması nasıl çalışır?

Tipik bir post-processing bloom’u üç küçük fabrikadan oluşur; gerçek motorlarda bu adımlar önbellek dostu varyantlarla (ayrılabilir bulanıklaştırma, çok ölçekli özet tamponlar) zenginleşir. Üç adımın özü şudur: ayıkla → yay → geri ekle.

A. Thresholding (eşikleme)

Sahne rengi taranır; belirli bir parlaklık eşiğinin üzerinde kalan pikseller «parlama adayı» olarak işaretlenir, geri kalanı bu kanalda bastırılır — böylece beyaz duvar veya orta gri yüzeyler her karede neon gibi davranmaz. Eşik düşük seçilirse dünya sürekli «ışık sızıntısı» içinde kalır; çok yüksek seçilirse bloom fiilen uyur. Üretimde eşik, genelde sahnenin emissive ve ışık yoğunluğu kalibrasyonu ile birlikte ayarlanır.

B. Blurring (bulanıklaştırma)

Aday parlaklık maskesi Gaussian benzeri bir çekirdek ile yumuşatılır; pratikte çoğu zaman önce yatay, sonra dikey geçiş — yani ayrılabilir bulanıklaştırma — ile maliyet düşürülür. Çözünürlük düşürülerek (downsampling) yapılan özet tamponlar hem hız hem de daha geniş «ışı halesi» verir; ölçek seçimi yanlışsa halo ya çok kaba ya da titrek görünür. Ping–pong tampon mantığı için Render target · Efekt zinciri bölümündeki açıklama ile bağ kurabilirsiniz.

C. Additive blending (toplamsal karıştırma)

Bulanık parlama katmanı, orijinal sahne renklerinin üzerine genelde eklenerek birleştirilir — taban rengi tamamen değiştirmeden üzerine enerji katar. Karışım katsayıları ve renk uzayı burada kritiktir; ton sıkıştırması bloom’dan önce veya sonra geldiğinde sonuç bambaşka görünür (bkz. Pass sırası · hatalı sıra tablosu).

Three.js dünyasında hazır yol olarak sıkça anılan UnrealBloomPass bu üç adımın üretim dostu bir paketlenmesidir — detaylı geçiş ailesi özeti Render target · geçiş örnekleri içinde yer alır.

Kullanım alanları: enerjiyi görünür kılmak

Bloom’u sahneye «genel parlama» olarak değil, nerede enerji biriktiğini anlatan bir imza olarak düşünmek işe yarar. Aşağıdaki üç alan, bu imzanın en sık görülen taşıyıcılarıdır; her birinde amaç aynı — izleyiciye «burada ısı / güç / ışık var» dedirtmek — fakat yanlış dozda aynı araç okuma düzenini bozar.

  • Neon ve fütüristik arayüzler. Çizgi, panel ve kablolama genelde sahneyi bölen grafik öğeleridir; bloom ile bu çizgilerin ta kendisi ışık kaynağıymış gibi okunur — böylece arayüz «ışıklı şema» veya siberpunk estetiğine yaklaşır. Tehlike şudur: kenarların tamamını aynı şiddette parlatmak, gözün önce nereye bakacağını kaybettirir; başlık, düğme ve tehlike göstergesi birbirinin üzerine çıkar. Çözüm, parlatan yüzeyleri seçerek daraltmak ve eşik ile yalnızca gerçekten parlak kanalları ayırmaktır — böylece vurgu bilinçli kalır, «her şey neon» kaosu oluşmaz.
  • Emissive yüzeyler. Ekran camı, tüp, holografik panel veya plazma kılıç gibi nesneler gerçekte yüzeyden dışarıya foton salar; tam parlama (lens içindeki dağılım) lens/optik düzeyindedir, fakat emissive materyalin «içten yanma» hissi önce yüksek parlaklıkla kurulur. Bloom burada, tabandaki emissive rengin çevreye yumuşak bir enerji taşıması olarak okunur — yani yalnızca «parlak materyal» değil, kaynağın çevreye taşıdığı ışık halası hissidir. Materyal karanlıksa bloom mucize etmez; önce emissive veya parlak tabanın doğru tonlanması gerekir.
  • Atmosferik ışık. Pencereden sızan güneş, sis içindeki projektör veya volumetrik ışınlar ile birlikte düşünüldüğünde bloom, yüksek frekanslı detay yerine düşük frekanslı bir ışı örtüsü ekler: uzak düzlemleri hafifçe yıkar, sıcak–soğuk okumayı güçlendirir, sahneye «boğulmuş ışık» derinliği katar. Bunun sınırı nettir: gerçekten hacim içinde yayılan ışın (toz, ortam yoğunluğu, ışın–march) bloom ile ikame edilemez; bloom yalnızca ekrandaki parlak bölgelerin etrafa yumuşak yayılmasıdır. Tamamlayıcı olmadan post ile «hacim çalmak» denince genelde düz bir sis ve bulanık kontrast elde edilir — derinlik için genelde god rays, sis geçişleri veya gerçek volumetrik çözümlerle desteklenmelidir.

Kritik parametreler: ayarın dozu

Parametre adları motor ve eklentiye göre değişir (intensity, size, luminance threshold vb.); fakat davranış üç soruya indirgenir: parlamayı ne kadar görünür kılacağız, haloyu ne kadar geniş açacağız, hangi parlaklıktan sonrasını blooma hiç sokmayacağız? Bu üç ayar birbirini tutar: eşik yanlışken şiddeti düşürmek genelde «soluk sahne» üretir; şiddet doğruyken yarıçap yanlışsa ya lazer gibi ince ya da çamur gibi geniş kalır.

  • Strength / şiddet. Halo katmanının ekrandaki görünür ağırlığıdır: düşük değerlerde parlama «fısıltı», yüksek değerde ana görüntüye basan ikinci bir ışık kaynağı gibi davranır. Abartıldığında orta tonlar yıkanır, gölgeler sıkışır, sahne tek renkli bir «beyaz sis»e yaklaşır — bu genelde tek parametreyle toparlanmaz; eşik hangi piksellerin blooma girdiğini daraltır, ton sıkıştırması (tone mapping) ise parlak başın zaten kesilip kesilmediğini belirler (sıra için ideal akış). Mobilde düşük bit derinliği ve agresif tonlama ile birlikte şiddet kolayca taşar; önce parlaklık bütçesini düşünmek daha güvenli bir yoldur.
  • Radius / yarıçap. Bulanık katmanın ne kadar «yayılarak» komşu piksellere taşınacağını kontrol eder: geniş yarıçap daha sinematik, yumuşak ve «ısı tabakası»na yakın; dar yarıçap ise neon çizgi veya keskin lazer çizgisi hissi verir. Önemli ayrıntı: yarıçap büyüdükçe örneklenmiş bulanık tamponlar (özellikle düşük çözünürlükte downsample kullanılıyorsa) detayı eritir; bazen halo tek renkli düz bir lekeye düşer — bu durumda sorun yalnız «çok bloom» değil, yayılım çözünürlüğünün taşıdığı bilginin tükenmesidir. Gerekirse bulanık piramidin katman sayısı veya ölçek ile oynamak, salt yarıçap çevirmekten daha temiz sonuç verir.
  • Threshold / eşik. Hangi parlaklığın «parlayıcı» kabul edilip blooma gireceğini seçer; böylece çoğu diffüz yüzey maskede siyah kalır ve yalnızca gerçekten üst parlaklık dilimindeki bölgeler yayılır — istenmeyen duvar, kağıt veya gri zeminin parlamasını kesmenin ilk filtresidir. Sınır: sahne renkleri veya görüntüleme zinciri kalibrasyonsuzsa gri yüzeyler parlaklıkta yükselip emissive gibi seçilebilir; eşik tek başına bunu düzeltmez. Bu yüzden eşik, materyal ayarı ve exposure ile birlikte düşünülür; gerektiğinde yalnızca belirli nesnelere emissive parlaklık vermek, global eşiği zorlamaktan daha kontrollüdür.

Performans ve «overbloom» tehlikesi

Bloom çoğu zaman çok geçişli bulanıklaştırma içerdiği için post-processing tuzağıdır: küçük görünen her ek tampon turu, özellikle yüksek çözünürlük ve düşük güçlü GPU’larda hissedilir. Render target · Performans bölümündeki piksel maliyeti cetveli ile birlikte düşünün.

Görsel tarafta ise overbloom riski vardır: her yüzey parlarsa göz yorulur, materyal okuması ve kompozisyon hiyerarşisi kaybolur. Bloom’u «varsayılan açık» bırakmak yerine yalnızca gerçekten ışık üreten kanallara yakın tutmak; gerektiğinde sahneyi düşük parlaklıkta tutup emissive ile seçici vurgulamak daha sürdürülebilir bir ürün verir.

Holodepth teknik notu

Bloom debug üç soruya indirgenir: (1) Eşik gerçekten doğru kanalı mı seçiyor? (2) Ton sıkıştırması parlama başını önce mi kesiyor? (3) AA bloom’dan önce mi sonra mı? Yanlış sıra, parametreleri saatlerce çevirseniz de düzeltmez — sırayı Pass sırası · ideal akış ile hizalayın.