holodepth

Three.js · Işık ve materyaller · Gölge girişi

Gölge: Fizik, geometri ve algoritma arasındaki köprü

Sahneye gölge eklemek yalnızca süs değil — mekânsal ve ışıksal bir ipucu katmanıdır.

Bir sahnede gölge eklemek sadece görsel bir “süs” değildir. Gölge, insan beynine objelerin sahnedeki konumu, birbirlerine olan uzaklıkları ve ışık kaynağının karakteri hakkında en kritik bilgileri veren mekânsal bir veri seti gibidir.

Devam: Shadow map nedir?, Gölge türleri tablosu, BasicShadowMap.

Fiziksel dünyada gölge: ışığın engellenmesi

Fizik dünyasında gölge, bir nesnenin ışık ışınlarının yolunu kesmesiyle oluşan ışıksızlık alanıdır.

Gerçek dünya karmaşıklığı: Gerçekte ışık yalnızca doğrusal gitmez; atmosferdeki partiküllere çarpar, yüzeylerden sekerek dağılır ve kırılır. Bu yüzden doğada “tam siyah” gölge bulmak zordur; gölgeler çoğu zaman çevre yansımalarıyla beslenir.

Işık kaynağının boyutu: Kaynak noktasal değilse (örneğin Güneş veya geniş bir softbox), gölge tipik olarak iki ana bölgeden oluşur:

  • Umbra (tam gölge): Işığın tamamen kesildiği en karanlık merkez.
  • Penumbra (yarı gölge): Işığın yalnızca bir kısmının engellendiği, kenara doğru yumuşayan geçiş bölgesi.

Dolaylı ışık: gölge neden “tam siyah” değildir

Yukarıdaki umbra / penumbra ayrımı noktasal olmayan kaynaklar için geçerlidir; ayrıca gerçek ortamlarda sekme ve dolaylı aydınlanma (duvardan, zeminden, gökyüzünden gelen dolgu) umbrayı bile tam siyaha kilitlemez. Gerçek zamanlı shadow map hattında ise bu dolaylı terimler çoğu zaman ayrıca modellenmez — bu yüzden sahne “fizikten daha keskin” veya “fizikten daha düz” görünebilir; sonraki sayfalarda harita çözünürlüğü, filtre ve bias bu farkı yönetir.

Programlama dünyasında gölge: “hileli” gerçeklik

Bilgisayar grafiklerinde (Three.js dahil) fizik dünyasını yüzde yüz simüle etmek imkânsıza yakındır; bu yüzden Shadow Mapping gibi matematiksel kısayollar kullanılır.

Fark nedir? Gerçek dünyada gölge kendiliğinden oluşur. Programlamada ise gölge, GPU’ya ek yük getiren bilinçli bir hesaplamadır: ışığın bakış açısından sahnenin bir “derinlik fotoğrafı” alınır; kamera her piksel için bu haritayla kıyaslayarak “ışık burayı görüyor mu?” sorusuna yaklaşık bir yanıt üretir.

Ek render geçişleri (maliyet sezgisı)

Basit shadow map akışında, gölge veren her ışık için sahne tipik olarak ışığın bakış açısından bir kez daha (veya nokta ışığında küp harita için birden fazla kez) çizilir; kamera geçişine eklenen bu iş, kare süresini doğrudan yer. Kabaca hatırlatma: yönsel ışıkta tek yön yaygındır; nokta ışığında ise aynı fikir çoğu zaman altı yüz ile ölçeklenir — ayrıntılı tablo ve türler için gölge türleri ve ışığa özel gölgeler sayfalarına geç.

Three.js’te üç kanca

Bu giriş seviyesinde API’yi kilitlemek yeter: renderer.shadowMap.enabled = true (ve tip renderer.shadowMap.type), ışıkta castShadow = true, gölge almasını istediğin mesh’lerde receiveShadow = true (gölge atan ve alın rolleri ayrıdır). Özel durumlar ve ince ayar Shadow map ile performans sayfalarında derinleşir.

Geometri ve matematik ilişkisi

Gölge üretmek, çoğu zaman saf bir Öklid geometrisi ve projeksiyon problemidir.

  • Projeksiyon (izdüşüm): Bir objenin gölgesi, o objenin ışık doğrultusunda düşüm düzlemindeki izdüşümüyle ilişkilidir.
  • Üçgen benzerliği: Gölgenin boyu ve keskinliği; ışık, nesne ve yüzey arasındaki mesafe ve açı düzenine bağlıdır.
  • Derinlik karşılaştırması: Kabaca, bir noktanın ışığa göre derinliği (zpiksel), aynı ışın üzerinde haritada kayıtlı en yakın yüzey derinliğinden (zharita) büyükse nokta gölgede kalır (zpiksel > zharita). Uygulamada bias ve filtreleme bu ikili kararı yumuşatır veya bozulmalara açar — ayrıntı için Shadow map sayfasına geç.

Ayrık harita, sürekli dünya

Harita sonuçta sınırlı çözünürlükte bir doku; dünya ise sürekli. Bu geçiş bölgesinde alias (merdiven / pürüz), acne (yüzeye yapışık gürültü) ve peter panning (gölgenin yüzeyden kopması) gibi klasik artefaktlar doğar — hepsi “yanlış derinlik karşılaştırması” ailesinin üyesidir. İlk müdahale rehberi için Bias & shadow acne sayfasına bak; harita pikselleri ve filtre seçimi için Shadow map.

Gölge neden bu kadar önemli? (Görsel algı)

Gölge olmadan bir 3B sahne, nesnelerin havada süzüldüğü ve derinlik hissinin zayıfladığı düzlem hissi verebilir.

  • Zemin ilişkisi: Gölge, objeyi zemine “çiviler”; gölge yoksa nesnenin zeminde mi yoksa havada mı olduğunu okumak zorlaşır.
  • Form: Bir kürenin üzerine düşen kendi gölgesi (self-shadow), onun yalnızca bir daire değil hacimli bir cisim olduğunu anlamamıza yardım eder.
  • Işığın karakteri: Keskin gölgeler sert güneş ışığını; yumuşak gölgeler bulutlu havayı veya yayılmış stüdyo ışığını çağrıştırır.

Kalite, maliyet ve “gölgeyi kapat” kararı

İzleyici için gölge çoğu zaman ücretsiz görünür; GPU için değildir. Mobil veya WebXR’da “her şeyi gölgele” yerine, gölgeyi taşıyan ışık sayısını, harita çözünürlüğünü ve mesafe içi LOD’u bilinçli seçmek üretim sırasında aynı algıyı daha ucuz maliyetle korur — aksi halde kare süresi dalgalanır ve sahne “titriyor” hissi verir. Strateji özeti: Gölge performansı.

HoloDepth notu

Felsefi not

Programlamada gölge, “ışığın yokluğu” değil, bilginin varlığıdır. GPU bir yerin gölgede olduğunu anlamak için o nokta hakkında yoğun matematiksel iş yapar. Yani dijital dünyada “karanlık”, aydınlıktan çoğu zaman daha fazla iş gerektirir — doğru ayar ve doğru algoritma seçimi bu yüzden üretimde kritiktir.

Holodepth omurgasında bu giriş, fizik → harita algoritması → üretim ayarı zincirinin başıdır: ışık türlerinde gölge taşımayan seçenekler (ör. RectAreaLight) ile harita taşıyanlar arasındaki boşluğu bilerek planlama yaparsın — rect’ten sonra buraya geldiysen, sıradaki adım ışık türüne göre gölge kamerası; ardından shadow map mekaniği sayfasına geçmek omurgayı tamamlar.