- Bu yazı, Nintendo 64 demo geliştirme sürecinde uygulanan palet tabanlı aydınlatma ve normal mapping tekniklerini açıklıyor
- Aydınlatmayı doğrudan dokuya anında yansıtmak yerine, yalnızca paleti değiştirerek tüm dokuya aydınlatma etkisi vermenin bir yolunu tanıtıyor
- Diffuse/normal palet sıkıştırması ve nesne uzayı normal mapping gibi çeşitli optimizasyon tekniklerinden yararlanıyor
- Bu yöntem yalnızca yönlü aydınlatma için verimli ve gölgelendirme süreksizlikleri gibi dezavantajlara sahip
- Demoda yansımalı ışık/doğrudan ışık/ortam ışığı gibi birden çok öğe yaratıcı biçimde birleştirilerek N64 sınırları içinde etkileyici görseller elde ediliyor
Giriş ve hedefler
- Bu yazı, Bluesky'da başlayan thread dizisinin devamı olarak, Nintendo 64 için yapılan bir demoda (Revision 2025) kullanılan gelişmiş aydınlatma tekniğini paylaşıyor
- Demoda yansımalı ışık uygulanmış normal mapping, gerçek zamanlı yansıma aydınlatması gibi çeşitli efektler yer alıyor; müzik noby tarafından bestelenmiş, gitarı ise Moloko çalmış
Nintendo 64'te normal mapping olasılığı
- WadeTyhon ve Spooky Iluha gibi homebrew geliştiricilerinin deneylerinden yararlanılarak N64'te normal mapping uygulamanın mümkün olup olmadığı doğrulanıyor
- Temel yöntem, çalışma anında CPU üzerinde doğrudan dokuya aydınlatma hesaplamak
- Donanım desteği olmadan CPU ile özel shading kodu çalıştırmak mümkün olsa da, ciddi hız kaybı sorunu var
Palet tabanlı shading
- Doku uzayında shading'i doğrudan uygulamak yerine, paletli dokunun yalnızca palet verisini güncelleyerek tüm dokunun gerçek zamanlı parlaklık değişimlerini yansıtması sağlanıyor
- N64'te paletli doku kullanımı yaygın olduğundan bu yöntem de sıkça kullanılabilir
- Yalnızca paleti güncellemek bile, her texel'e gerçekten aydınlatma uygulanmış gibi bir etkiyi anında ortaya çıkarıyor
- Orijinal palet, shading uygulanmış bir paletle değiştirilip mevcut paletli doku nesneye normal doku olarak eşleniyor
- Yalnızca diffuse (
dot(N,L)) aydınlatma uygulansa bile oldukça etkileyici sonuçlar veriyor
Nesne uzayı normal mapping
- Genelde normal mapping tangent uzayında yapılır; bu da tekrar eden dokuları desteklemek ve yüzeyi doğal biçimde düzeltmek için uygundur
- Nesne uzayı normal map'leri her texel için tam yüzey normalini taşıdığı için hesaplamayı basitleştirir, ancak tekrar eden dokuları kullanmak zordur
- Yüksek çözünürlüklü normal map'ler 32 renkli palete sıkıştırılsa bile orijinale benzer özelliklerini koruyabilir
Diffuse ve normalin ortak paletle tasarlanması
- Nesne, diffuse dokuya (
basecolor * ao) ve bir normal map'e sahip - Her iki doku da K-means kümeleme algoritması ile üretilen aynı palet indekslerini paylaşacak şekilde düzenleniyor
- Görüntü, 6 kanallı bir görüntü olarak ele alınıp kümeleme uygulanıyor
- Örnekte RGB diffuse + normal map, 16 renkli bir palete sıkıştırılıyor; böylece görüntü verisinde yalnızca 4bpp saklamak yetiyor
- Shading sırasında her palet rengi için normal ve yüzey rengi bilgisi indeks üzerinden alınarak yeni RGB renkleri üretiliyor
- Bu yöntem yalnızca yönlü ışığı düzgün biçimde destekleyebiliyor; yalnızca paletle gölge üretmek zor
Baked yönlü ortam ışığı / güneş ışığı
-
Binalarda gerçekçi aydınlatma üretmek amacıyla, vertex color'ın RGB ve alfa kanalları sırasıyla ortam ışığı ve güneş ışığı için kullanılıyor
-
Ortam ışığı (ambient), yönsel şiddet (gri tonlamalı irradiance map) ve renk (RGB, doygunluğu artırılmış) olarak ayrılıyor
-
Güneş ışığı (direct), vertex alfa kanalında taşınıyor
-
Temel aydınlatma formülü aşağıdaki gibi
ambient = vertex_rgb * grey_irradiance_map(N) direct = vertex_alpha * sun_color * dot(N, sun_dir) color = diffuse_texture * (ambient + direct) -
Bu terimlerin her biri birleşerek nihai rengi oluşturuyor
-
Yönlü ortam ışığı güçlü bir doğal ışık etkisi veriyor ve palet tabanlı olmasına rağmen yüksek kaliteli bir doku hissi yaratıyor
-
Basitleştirmek için environment map'te eşit dikdörtgensel izdüşüm (equirectangular projection) kullanılıyor
Tekrarlayan dokular kullanan büyük modellerin shading'i
- İlk algoritma tek bir nesne içindi; büyük kale mesh'inde tekrar eden dokular kullanıldığından sorun ortaya çıkıyor
- Çözüm olarak Blender kullanılıp mesh, her yüzey yönü/malzeme türüne göre alt mesh'lere ayrılıyor
- Bilgisayar, her grup için poligon normallerini kullanarak bir world-to-model matrisi hesaplıyor (yaklaşık tangent uzayı)
- Her grup tek bir paleti paylaşıyor; böylece genel olarak ortalama bir aydınlatma kalitesi korunuyor
- Tangent uzayı çalışma anında enterpole edilmediği için yüzleri belirgin, kırpılmış gibi duran bir aydınlatma dezavantajı ortaya çıkıyor
Specular (yansımalı) shading
- Birden fazla yüzey noktası aynı palet rengini paylaştığından, doğru point light / specular shading yapmak mümkün değil
- Palet uzayı tekniği, yalnızca yönlü diffuse aydınlatma için verimli
- Yine de küresel bir nesne varsayılarak, her nokta
p = radius * normalile yaklaşık hesaplanıp specular yansıma etkisi zorlanarak uygulanıyor - Sonuç biraz süreksiz olsa da, oynanış sırasında pratikte oldukça doğal hissedilebiliyor
Sınırlamalar ve gelecek
-
Demoda gölgelendirme süreksizlikleri, yalnızca siyah-beyaz doku desteği, point light desteğinin olmaması gibi sınırlamalar olabildiğince gizlenmiş
-
elaborate preprocessing(karmaşık ön işleme) zorunlu -
Gölgelendirme süreksizlikleri olmadan hem ambient hem direct aydınlatmayı destekleyen bir yöntem hâlâ zor bir problem
-
Deney sonuçları, yeni olasılıkların ve fikirlerin ne kadar ilgi çekici olduğunu vurguluyor
-
PAL uyumlu N64 ROM dosyası da paylaşılmış. Ancak kararsız ve sık sık çöküyor
Diğer
- Yazar bir kitap yazmayı da düşünüyor; ilgileniyorsanız buradan haber alabilirsiniz
1 yorum
Hacker News görüşleri
N64'te "gerçekçi" grafikler görmek gerçekten etkileyici bir deneyim gibi geliyor; bu demonun PS2 için çıkan "ICO"yu hatırlattığı hissi veriyor. N64 grafik donanımını soyutlayan ve modern primitive, lighting, shading, baked lighting araçları sunan bir SDK yapmanın mümkün olup olmayacağı merak ediliyor. N64 donanımının kendi nesline özgü benzersiz bir yapıya sahip olduğundan bahsediliyor ve ayrıntılı donanım bilgisi için bir bağlantı paylaşılıyor
N64'ün SGI tarafından tasarlandığı ve SGI'ın 3D grafikler üzerinde ne kadar büyük etkisi olduğundan söz ediliyor. N64'ün aslında neslin en standart donanımlarından birine sahip olabileceği tahmin ediliyor. Hatta bir OpenGL kütüphanesi olmaması şaşırtıcı olurdu görüşü dile getiriliyor. Dezavantaj olarak, konsolu CPU eklenmiş bir grafik kartı gibi düşünmek gerektiği ve grafik sisteminin doğrudan açığa çıktığı belirtiliyor. Grafik çipi mimarileri birbiriyle uyumlu değil; üreticiler de bu iç yapıları paylaşmaktan kaçınıp yalnızca API'ler (OpenGL, DirectX vb.) sunuyor, bu da yaratıcı tasarıma izin verirken donanıma doğrudan erişimi çok zorlaştırıyor. Ek bilgi olarak OpenGL'in SGI'dan çıktığı ve nvidia'nın da SGI kökenli kişilerce kurulduğu hatırlatılıyor
"Shadow of the Colossus..." deniliyor ve ilgili bir YouTube bağlantısı paylaşılıyor
N64 grafik hilelerini ele alan asıl yazının "Gelecek bu mu?" sorusuyla bitmesi çok hoşlarına gidiyor
Oyun mühendislerinin kısıtlı donanım üzerinde yaratıcı çözümler üretme dehasına hayranlık ifade ediliyor
Kısıtlar olduğunda en üst düzey yaratıcılığın ortaya çıktığı ilkesi paylaşılıyor. pico8, Animal Well ve birçok etkileyici oyunun sırrının da bu olduğu söyleniyor. Bu hafta sonu kendi yaptığı 2d-pixel-art-game-maker-maker mimarisini ciddi biçimde iyileştirecek bir fikir bulduğu, bu yüzden çıkışın yine bir ay ertelenecek gibi göründüğü hayıflanarak anlatılıyor
Burada tanıtılan şeyin N64'ün altın çağından kalma bir çalışma değil, yakın dönemde yapılmış yeni bir iş olduğu belirtiliyor
Bunun o dönemin N64 geliştiricilerinden değil, 2025 itibarıyla demoscene ile ilişkili yeni tekniklerden biri olduğu özellikle not düşülüyor
Daha hızlı sistemlere sahip olmanın bugün güzel olduğu, ama eski oyunlarda sınırları aşmanın keyfi ve bunu gerçekten başardığında gelen tatminin çok özel olduğu hatırlanıyor. Hacker News okurlarının 'raster interrupts' ve 'racing the beam' kavramlarına aşina olabileceği söylenerek, Atari 800'de bu tekniklerle imkânsız görünen şeylerin mümkün kılındığı bir anı anlatılıyor. Atari 2600 oyunlarının da bu çılgın yöntemlerden büyük ölçüde etkilendiğinin ancak yakın zamanda fark edildiği söyleniyor ve YouTube kaynakları paylaşılıyor. Donanım ilerlemesi burada dursa bile, önümüzdeki onlarca yıl boyunca yeni ve ilginç hileler keşfetmeye devam edebileceğimizden emin olunduğu ifade ediliyor
90'larda shareware oyunlarında palet tabanlı lighting tekniği kullandıklarını hatırlayan bir yorum var. VGA 256 renk paletinin, her renk için kademeli aydınlık-karanlık geçişleri olacak şekilde düzenlendiği; böylece sadece renk indekslerini artırıp azaltarak kolayca parlaklık efekti verilebildiği anlatılıyor
Demoscene ve bu tür çalışmaların hayranlık uyandırıcı düzeyde olduğu, ancak çoğunlukla basit ve boş sahnelere kayma eğiliminde göründüğü gözlemleniyor. Bu tekniklerin genelde arka planlarda ya da sınırlı oyun işlevlerinde işe yarayacağı düşünülüyor. FastDoom veya Mario-64 optimizasyon projeleri gibi, eski donanımda performansı ciddi biçimde artırıp üstüne içerik ve özellik ekleyen girişimlerin çok daha etkileyici olduğu savunuluyor. Demoscene ile bu daha tamamlanmış projeler arasında bir bağ olup olmadığı da merak ediliyor
PS1 ve PS2 döneminin optimizasyon tekniklerinin özlendiği söyleniyor. Çoğunun emülasyonla 1080p ya da 4k ve üstüne yükseltilse bile hâlâ harika göründüğü düşünülüyor. Halo 2'nin 4k grafiğinin yeterli olduğu görüşü paylaşılıyor; GT3'te gerçekten yapılmış bir 'ısı dalgası' efekti örnek verilerek, bunu PS3'te PS2 kadar hızlı yapamayacaklarını söyleyen yapımcı yorumu aktarılıyor. Bugünkü UE5 tarzı gerçekçi ısı dalgası yerine, performansa büyük yük bindirmeyen hile tabanlı yöntemin daha iyi olduğu düşünülüyor. RTX yüzünden kare hızının düşmesindense eski hilelerin tercih edileceği açıkça belirtiliyor. 299MHz MIPS CPU üzerinde Shadow of the Colossus, GoW2, FFXII, GT4, Black, Valkyrie Profile 2, Rouge Galaxy, Burnout 3, Jak and Daxter, Ratchet gibi inanılmaz oyunların çalıştığı; ayrıca GameCube tarafında RE4, Metroid, Zelda gibi örneklerin bulunduğu hatırlatılıyor. Sonunda, geleneksel oyun geliştiricilerinin becerisine duyulan hayranlık ve saygı vurgulanıyor
GoW2 videosunun PCSX2 emülatörüyle kaydedildiği ve yükseltme ile başka görsel iyileştirmeler içermiş olabileceği belirtiliyor. Yine de GoW2'nin PS2 üzerinde muazzam bir başarı olduğu düşünülüyor
PS2 için buna katılındığı, ancak PS1'in performansının o kadar da iyi olmadığı görüşü paylaşılıyor. PSX performansının Pentium 90~100 civarında olduğu, ama MMX Pentium'a 3DFX eklendiğinde N64'e yaklaşabildiği ya da onu geçebildiği söyleniyor. Düşük saat hızında yüksek performans veren MIPS CPU örnekleri olarak PSP, SGI Irix ve PS2 anılıyor. PS2'nin GPU'sunun R4k CPU'dan ayrı olduğu açıklanıyor; ayrıca PS2'ye yapılan Deus Ex portunun PC sürümüne göre zayıf kaldığı ve Unreal Engine'i tam anlamıyla kaldıramadığı yönünde kişisel deneyim aktarılıyor. PS2'nin etkileyici özel efektler gösterebildiği, ancak Deus Ex gibi portlarda harita boyutlarının çok küçük olduğu bilgisi de ekleniyor
Halo 3 grafiklerinin modern oyunların çoğundan daha iyi göründüğünü düşünen bir yorum da var. Blur, bloom, çimen ve yaprakların savrulma efektleri gibi sonradan eklenen birçok etkinin aslında daha kötü bir görsel deneyim yarattığı savunuluyor. Hızlı FPS türünde küçük poligon sayısı farklarının pek önem taşımadığı, doku çözünürlüğünün de zaten yeterli olduğu düşünülüyor. Gerçekte hissedilen tek şeyin donanım gereksinimi olduğu, kişisel deneyim üzerinden anlatılıyor