Klasik 3D video oyunlarında gölge teknikleri
(30fps.net)- 3D oyunlarda gölgeler gerçek hayattaki gibi kendiliğinden oluşmaz; sınırlı performans içinde inandırıcı görünecek şekilde tasarlanan görsel efektlerdir
- İlk dönem 3D oyunlar gölgeleri 2D görüntüler, ayak altındaki blob shadow, çalışma zamanında üretilen gölge dokuları ve düzleme yansıtılan geometri gibi basit ama hızlı tekniklerle ele aldı
- Sahneler karmaşıklaştıkça projeksiyon dokuları, shadow map ve stencil shadow kullanılmaya başlandı; ancak çözünürlük artefaktları, yanlış yüzey projeksiyonları ve tahmin edilmesi zor çalışma maliyetleri gibi kısıtlar da beraberinde geldi
- Statik seviye aydınlatması büyük gölgeleri vertex color ve lightmap ile sakladı; modern oyunlar da Cascaded Shadow Maps, light probes ve capsule shadows gibi geleneksel tekniklerin türevlerini kullanmayı sürdürüyor
- Ray tracing gölgeleri daha doğal bir yön olsa da Alan Wake 2 gibi karmaşık sahnelerde örnekleme ve denoiser’a dayanıyor; bu yüzden trade-off’lar hâlâ ekranın karakterini belirliyor
Oyun gölgeleri gerçeklikten farklı üretilir
- Gerçekte gölge, ışığın engellenmesinin sonucudur; tek bir ışık kaynağı uzaktaysa birden fazla gölge üst üste gelse bile daha karanlık olmaz
- 3D video oyunlarında gölgeler doğal olarak var olmadığı için geliştiricinin performans ile görsel inandırıcılık arasında doğrudan tasarım yapması gerekir
- Metal Gear Solid’deki blob shadow gibi, oyun içinde gölgelerin üst üste geldikçe daha koyulaşması türünden ifadeler de mümkündür
Ekranın üzerine doğrudan çizilen 2D gölgeler
- En basit yöntem, karakteri çizmeden önce ekrana önce 2D gölge görüntüsü çizmektir
- Winter Gold ve MDK, ölçekleme içermeyen animasyonlu 2D gölge görüntüleri kullandı
- Karakterin diğer her şeyin önünde olduğu sahnelerde bu basit yöntem de iyi çalışır
Blob shadow: ayak altındaki koyu daire
- 3D’de en basit yaklaşım, karakterin altına koyu bir disk çizme yöntemidir
- Super Mario 64 karakterler için blob shadow kullanır; Nintendo 64’ün donanımsal decal özelliğiyle gölgeyi fiilen yalnızca zemin düzleminde görünecek şekilde kırpar
- blob shadow duruma göre animasyonlandırılabilir
- Super Mario 64’te karakter zıpladığında gölge küçülür
- Metal Gear Solid’de gölgenin biçimi değişir
- Gölgenin uçurumun dışına taşması sorunu, blob quad’ı decal gibi projekte ederek de ele alınabilir
Render texture tabanlı düzlem gölgeleri
- Blob basit bir dokuysa, karakter çalışma zamanında yukarıdan render edilip gölge dokusu olarak kullanılabilir
- Crash Bandicoot: Warped, çalışma zamanı gölge dokusuyla iyi sonuçlar verir
- Soldier of Fortune da aynı yöntemi kullanır, ancak gölge çözünürlüğü düşük olduğu için sonuç daha zayıftır
- Bu yöntem, ışığın bakış açısından depth map oluşturan shadow mapping ile farklıdır
- Burada siyah/beyaz görüntü doku olarak kullanılır
- Kavramsal olarak 1 bitlik bir shadow map’e yakındır
Geometriyle yapılan düzlem gölgeleri
- Sezgisel yöntem, gölge düşüren nesneyi ışığın ters yönünde bir düzleme yassılaştırarak projekte etmek ve aynı nesneyi siyah renkle bir kez daha render etmektir
- Bu gölge genellikle opak tutulur; böylece nesnenin bazı kısımlarının üst üste çizilmesi sorunu gizlenir
- Düz zeminlerde iyi uyar, ancak karmaşık arazilerde doğruluğu düşer
- F-19 Stealth Fighter, pistin üzerine uçak gölgesi çizer
- GLQuake tabanlı oyunlarda da düzlem gölgeleri görülebilir
- Kingpin: Life of Crime siyah düzlem gölgelerini sorunsuz biçimde kullanır
- Half-Life alpha 0.52’de saydamlık sorunu ortaya çıkar
Arazi üzerindeki düzlem gölgeleri
- David Braben’in Virus’u, uzay gemisinin arazi üzerine yukarıdan bakılmış bir gölge düşürmesini sağlar
- Interstate ’76, düzlem gölgeyi zeminin eğimine göre yatırır ve uzatır
- Gölge bazen zeminin içinden geçer
- Genel olarak oldukça inandırıcıdır
- Yazılım render ekranında hafif saydam bir gölge görünürken, donanım hızlandırmalı ekranda tamamen siyah bir gölge belirir
- Interstate ’76 köprü gibi büyük nesnelerin gölgesini projekte etmeyi de denedi, ancak sonuç tam anlamıyla başarılı olmadı
Projeksiyon dokulu drop shadow
- Projeksiyon dokusu yöntemi, yukarıda oluşturulan gölge dokusunu bir düzleme değil, çeşitli biçimlerdeki yüzeylere projekte eder
- Kavramsal olarak Bat-Signal’ı gökyüzünden aşağıya tutmaya benzer
- Toy Story 3: The Video Game bu yöntemin bir örneğidir; gölge başka gölgelerle çakıştığında daha koyulaşır
- Çok keskin gölgeler üretebilir, ancak yüzey koşullarına duyarlıdır
- Dikey yüzeylerde garip görünebilir
- Bazı durumlarda tavanda da belirebilir
- Sonic Adventure 2: Battle’ın oynanış görüntülerinde bu tür örnekler görülebilir
- Nesnelerin içinden geçip görünebildiği için özel durumlara daha uygundur
- Ağaç gölgelerinde de iyi çalışabilir
Shadow map: fiili standart yöntem
- shadow map, oyunun ışığın bakış açısından bir derinlik görüntüsü çizip dünyayı render ederken gölgeyi belirlemek için bu görüntüyü okuduğu yöntemdir
- Genel render kodu yeniden kullanılabildiği için uygulanması görece kolaydır
- Sınırlı çözünürlük, “Peter Panning” ve “shadow acne” gibi iyi bilinen artefaktlar üretir
- Kameraya yakın yüzeylere daha fazla shadow map alanı ayırmayı hedefleyen çeşitli teknikler önerilmiştir
- İyi görünen sonuçlar için genellikle tuning gerekir
Stencil shadow: keskin ama maliyetli yöntem
- stencil shadow her yüzeye keskin gölgeler çizebilir ve shadow map ile taklit edilmesi zor bir film-noir hissi yaratır
- Başlıca örnek, karanlık odalarıyla ünlü Doom 3’tür
- Bu yöntem, görünmeyen geometri olan shadow volume ile dünyayı ışık alan bölgeler ve gölge bölgeleri olarak ayırır
- Oyun, aydınlatmayı yalnızca shadow volume içinde olmayan piksellere uygular
- Çalışması için dünyanın birkaç kez çizilmesi gerekir
- Önce tüm dünya ambient lighting ile çizilir
- Her light için shadow volume çizilir, ardından dünya yeniden çizilerek yalnızca gölge dışındaki piksellerin etkilenmesi sağlanır
- front face ve back face için farklı stencil operation ayarlanır
- Mümkün olan en erken ticari örneklerden biri Severance: Blade of Darkness’tır; 2001’de iyi gölgeler göstermiştir
- Bugün yaygın kullanılmamasının nedenlerinden biri çalışma maliyetinin tahmin edilmesinin zor olmasıdır
- Maliyet, shadow volume’ün ekranda ne kadar büyük göründüğüne bağlı olarak çok değişir
- Optimize edilmiş algoritmaların patentleri vardı
- Doom 3 konusunda Id Software’in bir tür anlaşmaya vardığını düşündüren ilgili bir bağlantı vardır
Yumuşak stencil shadow
- stencil shadow’ın mutlaka keskin olması gerekmez
- Silent Hill 2, PlayStation 2’de stencil shadow çizdikten sonra blur uygulayarak yumuşak gölgeler gerçekleştirdi
- Konsoldaki sonuç neredeyse kusursuz görünür
Basitleştirilmiş karakter gölgeleri
- Ekranda görünen modelden daha basit bir modelin gölge düşürmesi sağlanabilir
- Nintendo 64’teki Zelda’da Link’in yalnızca ayakları gölge düşürür; diğer kısımları düşürmez
- Hyperblade, fütüristik bir hokey arenasında oyuncuların basit animasyonlu biçimde düzlem gölgeleri düşürdüğü özgün bir yöntem kullanır
Statik seviye aydınlatması içindeki gölgeler
- vertex color ve lightmap, oyun seviyelerinin aydınlatmasını saklayan tekniklerdir ve birçok oyunda büyük ölçekli gölgeleri göstermenin tek yolu olarak kullanılmıştır
-
Vertex color
- Ico, eski usul per-vertex lighting ile bile incelikli gölgeler üretilebileceğini gösterir
- low-poly haritalarda keskin gölgeler de vertex color ile ifade edilebilir
- Tony Hawk Pro Skater 2, bu basit yöntemle bile etkileyici sonuçlar verir
-
Lightmap
- lightmap, seviye aydınlatmasını ve gölgeleri saklamanın klasik yöntemidir
- Her vertex’te renk saklamak yerine, yalnızca aydınlatmayı ifade eden ikinci bir doku seti kullanır
- Bölgelere göre farklı çözünürlük kullanılabildiğinden, gölgeler gereken yerlerde daha doğru hale getirilebilir
- vertex color’dan daha fazla bellek kullanır
- Quake, lightmap’i popülerleştiren oyun olarak kabul edilir
Modern oyunlarda kullanılmaya devam eden geleneksel teknikler
- Modern oyunlar da duruma göre geleneksel gölge tekniklerini kullanmayı sürdürür
- shadow mapping’in bir türevi olan Cascaded Shadow Maps, geniş alanları hızlıca kapsamak için kullanılır
- lightmap, light probes gibi başka tekniklerle birlikte kullanılabilir
- Call of Duty de lightmap kullanır
- İlgili örnekler Hemispherical Lighting Insights slaytlarında yer alır
- Basitleştirilmiş karakter modeli fikri de devam eder
- The Last of Us, uzatılmış kürelerle yumuşak karakter gölgeleri oluşturur
- Unreal Engine karakterler için capsule shadows desteği sunar
- Projeksiyon gölgeleri de hâlâ kullanılır
- Hot Wheels Track Attack, shadow mesh’i doku olarak render edip yarış pistine projekte eder
- Geliştirici blogundaki açıklama ve oynanış videosunda görülebilir
Ray tracing gölgeleri de kusursuz değildir
- Fiziksel olarak doğru aydınlatmayı simüle etmeye çalışan oyunlarda, ışığın olmadığı yerde gölgeler doğal olarak ortaya çıkar
- shadow map’ten farklı olarak küçük geometri detayları da doğru gölgeler düşürebilir
- Büyük lambalar doğal olarak yumuşak gölgeler oluşturur, dolaylı ışık ise karanlık köşeleri aydınlatabilir
- Bu hedefi gerçeğe dönüştürmek için ray tracing algoritmalarına ve donanımına çok fazla zaman ve maliyet yatırıldı
- Gerçek modern oyun sahneleri çok karmaşık olduğu için simülasyonun yaklaştırılması gerekir
- Alan Wake 2’nin ray-traced shadows özelliğinde her piksel yalnızca rastgele seçilmiş tek bir light’tan aydınlatma alır
- Sonuç denoiser’a gönderilir; denoiser gürültülü görüntüyü akıllıca yumuşatır
- Ray tracing gölgeleri de kusursuz değildir; seçilen trade-off’lara göre kendine özgü bir görünüm oluşur
Gölgesizliği seçmek
- Bazı oyunlar gölgelerden daha çok başka unsurlara öncelik verebilir
- Gölge uygulamamak da açık bir tercih olabilir
1 yorum
Hacker News yorumları
Bu bir optik yanılsama ya da sanatsal bir atmosfer değil; gökyüzü mavi olduğu için, açık bir günde gölgeler gökten yansıyan ışıkla aydınlandığından mavi görünür
Bir arabanın altına bakarsanız, gökyüzünün göründüğü kısımlarda belirgin mavi gölgeler olduğunu; gövdenin gökyüzü ışığını da kapattığı yerlere gidildikçe bunun gerçek siyaha yaklaştığını görebilirsiniz
Bu belirgin mavi güneş gölgesini yumuşak, siyah AO gökyüzü gölgesi ile karıştırırsanız düşük maliyetle oldukça hoş gölgeler elde edebilirsiniz
İyi bir grafik render motoru böyle bir işlem yapar. Gölgelerin gökyüzü renginden hafif bir tona sahip olması gerekir
Bu yüzden eski No Man's Sky ekran görüntülerinden bazıları gözüme batmıştı. Gökyüzünün yeşil, gölgelerin ise mor olduğu bir sahne görmüş gibiyim
Klasik blob shadow gibi, zıpladıktan sonra nereye ineceğinizi kestirmenizi sağlıyor; aynı zamanda düzgün bir gölgenin görsel kalitesini de koruyor
Yanlış hatırlamıyorsam karanlık ortamlarda gölgeyi zeminden daha parlak yaparak görünür kalmasını da sağlıyorlar
Bu durumda oyuncu modeli yüklenip kaldırılırken gölge belirip kaybolacağı için, oyuncunun bedenini göremediğiniz sürece gölgesini de göremiyorsunuz
Valorant, giriş seviyesi donanımlarda bile çok yüksek kare hızları almak için render işlemini kasıtlı olarak aşırı basit tuttu. Dinamik gölgeler olmadığı gibi dinamik aydınlatma da hiç yok; alfa saydamlığı da hiçbir yerde yok
Normalde saydam çizilecek duman gibi şeyler bile tamamen opak çizilebilecek şekilde stilize edildi, çünkü bu daha hızlı. Hileden bağımsız olarak, performans nedeniyle dinamik gölgelerin zaten çıkarılmış olma ihtimali yüksek
Ray tracing teknikleri benimsendikçe alan ışıkları ve yumuşak gölgelerin standart hale geleceğini düşünüyorum. Donanımınız yeterliyse Quake 2 RTX’e bakın; geleceğin nasıl görüneceğini görmek açısından değer
Son olarak bu blogu grafik kaynakları listeme ekledim: https://github.com/aaron9000/c-game-resources
https://www.youtube.com/watch?v=7BvtML5dIuI
PowerVR PCX1, shadow volume’ları donanımda destekliyordu ve standart stencil gölgelerden daha verimli uygulanmıştı. Sahneyi birden çok kez çizmek yerine, temelde görünür pikselleri belirlemek için donanımda çip içi derinlik/stencil tamponuna yalnızca derinlik içeren bir ön geçiş yapıyor; ardından hangi piksellerin gölge içinde olduğunu anlamak için shadow volume’ları test ediyor ve sonra doku örnekleme ile shading’i gerçekleştiriyordu
Işık parlaklığı shadow volume sonucuna göre ayarlanıyor, yalnızca görünür pikseller shading’den geçirildiği için overdraw gereksiz doku fetch bant genişliği harcamıyordu
PCX1’in ardılı temelinde olan Dreamcast’te de shadow volume kullanan çok sayıda oyun vardı. Dreamcast uygulaması daha esnekti; volume’lar yalnızca ışığı değil, kullanılacak dokuyu, UV mapping’i, hatta saydam poligonların blending denklemini bile değiştirebiliyordu
DC’de yumuşak gölgeler de denemiştim (https://imgur.com/a/DyaqzZD son kısım), ama daha standart stencil yöntemine geri dönüp gölgeleri birkaç kez yeniden çizdiği için fill-rate yükü epey yüksek
İki lamba üç kişiyi aydınlatırsa 6 gölge oluşur. Altı gölgenin tamamının çakıştığı yer “siyah” olur ya da yalnızca ortam ışığı alır
Gölgelerin daha az çakıştığı başka yerlerde aydınlık şiddeti gradyanı oluşur
Hem A ışık kaynağının gölgesinin içinde hem de B ışık kaynağının gölgesinin içindeyseniz ışığı nereden alacaksınız? Yalnızca ortam ışığından; o da yoksa siyah olur
“Tek bir ışık kaynağı olduğu ve oldukça uzakta bulunduğu için, gölge basitçe ışığın yokluğudur” koşulu eklenmiş
O gölge, bu oyuna muazzam bir hız hissi veren başka bir küçük unsurdu
https://imgur.com/a/hOgxr7a
https://www.mobygames.com/game/6233/f29-retaliator/
Hâlâ hatırladığım an, gece bir ara sokakta araba çaldığım zamandı. Oyuncu karakteri tam arabaya binerken bir polis köşeyi döndü; arabayı çaldığımı “görüp” silahını çekerken aynı anda farlar yandı ve hareket eden polisin devasa gölgesi yakındaki duvara düştü
MGS’de gölgelerin üst üste binmesi tamamen yanlış değil. Çünkü ortam ışığı, saçılma ve başka küresel aydınlatma olguları var
“Mirror’s Edge (2008, PC) temelde Lightmaps: The Game’dir” sözü komik ama doğru. O zaman da etkileyici bir oyundu, bugün bakınca da öyle
O dönemde haksız yere küçümsendiğini düşünüyorum. Belki de rakiplerinden daha kısa olduğu içindi