2 poin oleh GN⁺ 2025-05-19 | 1 komentar | Bagikan ke WhatsApp
  • Artikel ini menjelaskan teknik pencahayaan berbasis palet dan normal mapping yang diterapkan dalam proses pengembangan demo Nintendo 64
  • Alih-alih langsung menerapkan lighting ke tekstur secara instan, artikel ini memperkenalkan cara memberi efek pencahayaan ke seluruh tekstur hanya dengan mengubah paletnya
  • Berbagai teknik optimasi digunakan, seperti kompresi palet diffuse/normal dan normal mapping ruang objek
  • Metode ini efisien hanya untuk pencahayaan terarah, dan memiliki kekurangan seperti diskontinuitas shading
  • Dalam demo tersebut, berbagai elemen seperti pantulan cahaya/cahaya langsung/cahaya lingkungan digabungkan secara kreatif untuk menampilkan visual yang mengesankan dalam keterbatasan N64

Pengantar dan tujuan

  • Artikel ini merupakan kelanjutan dari thread yang dimulai di Bluesky, dan membagikan teknik lighting lanjutan yang digunakan dalam demo untuk Nintendo 64 (Revision 2025)
  • Demo ini mencakup berbagai efek seperti normal mapping dengan pantulan cahaya dan pencahayaan pantulan real-time, dengan musik digubah oleh noby dan gitar dimainkan oleh Moloko

Kemungkinan normal mapping di Nintendo 64

  • Dengan merujuk pada eksperimen para pengembang homebrew seperti WadeTyhon dan Spooky Iluha, penulis memverifikasi kemungkinan implementasi normal mapping di N64
  • Metode dasarnya adalah menghitung pencahayaan langsung pada tekstur di CPU saat runtime
  • Tanpa dukungan hardware, shading kustom memang bisa dijalankan di CPU, tetapi masalah penurunan performa cukup besar

Shading berbasis palet

  • Alih-alih menerapkan shading ruang tekstur secara langsung, cukup memperbarui data palet dari tekstur berpalet agar seluruh tekstur merefleksikan perubahan kecerahan secara real-time
  • Karena N64 umum menggunakan tekstur berpalet, metode ini bisa diterapkan cukup luas
  • Hanya dengan memperbarui palet, efek seolah pencahayaan sungguhan diterapkan pada tiap texel langsung muncul
  • Palet asli diganti dengan palet yang sudah diberi shading, lalu tekstur berpalet yang ada dipetakan ke objek sebagai tekstur biasa
  • Bahkan jika hanya menerapkan lighting diffuse (dot(N,L)), hasilnya sudah terlihat sangat baik

Normal mapping ruang objek

  • Secara umum, normal mapping dilakukan di ruang tangen, yang cocok untuk mendukung tekstur berulang dan koreksi permukaan yang alami
  • Normal map ruang objek menyimpan normal permukaan yang akurat di setiap texel, sehingga perhitungannya lebih sederhana, tetapi sulit dimanfaatkan untuk tekstur berulang
  • Bahkan jika normal map resolusi tinggi dikompresi menjadi palet 32 warna, karakteristiknya tetap bisa dipertahankan mirip dengan aslinya

Desain palet bersama untuk diffuse dan normal

  • Objek memiliki tekstur diffuse (basecolor * ao) dan normal map
  • Kedua tekstur disusun agar berbagi indeks palet yang sama, yang dihasilkan dengan algoritme klastering K-means
  • Clustering dilakukan dengan memperlakukan gambar sebagai citra 6 kanal
  • Dalam contoh, diffuse RGB + normal map dikompresi menjadi palet 16 warna, sehingga data gambar hanya perlu menyimpan 4bpp
  • Saat shading, informasi normal dan warna permukaan untuk tiap warna palet diambil melalui indeks untuk menghasilkan warna RGB baru
  • Metode ini hanya benar-benar mendukung directional light, dan sulit mengimplementasikan bayangan hanya dengan palet

Cahaya lingkungan/cahaya matahari terarah yang di-bake

  • Untuk mewujudkan pencahayaan realistis pada bangunan, RGB dan kanal alfa dari vertex color masing-masing digunakan untuk cahaya lingkungan dan cahaya matahari

  • Ambient dipisahkan menjadi intensitas terarah (environment map grayscale) dan warna (RGB, dengan saturasi diperkuat)

  • Cahaya matahari langsung diteruskan melalui alfa vertex

  • Rumus pencahayaan dasarnya adalah sebagai berikut

    ambient = vertex_rgb      * grey_irradiance_map(N) 
    direct  = vertex_alpha    * sun_color * dot(N, sun_dir)
    color   = diffuse_texture * (ambient + direct)
    
  • Masing-masing komponen digabungkan untuk membentuk warna akhir

  • Cahaya lingkungan terarah menghasilkan efek cahaya alami yang kaya, dan meski berbasis palet tetap mampu menghadirkan tekstur berkualitas tinggi

  • Untuk penyederhanaan, environment map menggunakan proyeksi equirectangular

Shading model besar dengan tekstur berulang

  • Algoritme awal ditujukan untuk satu objek, dan mesh kastel besar menimbulkan masalah karena penggunaan tekstur berulang
  • Untuk mengatasinya, Blender digunakan untuk memisahkan mesh menjadi submesh berdasarkan arah permukaan/material
  • Komputer menghitung matriks world-to-model untuk tiap grup menggunakan normal poligon (ruang tangen aproksimasi)
  • Tiap grup berbagi satu palet, sehingga secara keseluruhan kualitas lighting rata-rata tetap terjaga
  • Karena ruang tangen tidak diinterpolasi saat runtime, muncul kelemahan berupa lighting yang tampak faceted

Shading specular

  • Karena banyak titik permukaan berbagi warna palet yang sama, shading point light/specular yang akurat tidak memungkinkan
  • Teknik ruang palet efisien hanya untuk pencahayaan diffuse terarah
  • Namun dengan mengasumsikan objek berbentuk bola, efek pantulan specular dipaksakan dengan mendekati tiap titik sebagai p = radius * normal
  • Hasilnya memang agak diskontinu, tetapi dalam permainan nyata tetap bisa terasa cukup alami

Batasan dan masa depan

  • Dalam demo tersebut, keterbatasan seperti diskontinuitas shading, dukungan hanya untuk tekstur hitam-putih, dan tidak adanya dukungan point light disamarkan semaksimal mungkin

  • Preprocessing yang rumit merupakan syarat penting

  • Cara untuk mendukung pencahayaan ambient/direct sekaligus tanpa diskontinuitas shading masih menjadi tantangan

  • Hasil eksperimen ini menekankan adanya kemungkinan dan ide-ide baru yang menarik

  • File ROM N64 kompatibel PAL juga telah dirilis. Namun, file ini tidak stabil dan sering crash

Lain-lain

  • Penulis juga sedang mempertimbangkan untuk menulis buku, dan jika tertarik, Anda dapat menerima kabar terbaru di sini

1 komentar

 
GN⁺ 2025-05-19
Komentar Hacker News
  • Ada kesan bahwa melihat grafis yang “realistis” di N64 benar-benar pengalaman yang sangat mengesankan, dan demo ini memberi nuansa yang mengingatkan pada "ICO" di PS2. Ada juga rasa penasaran apakah memungkinkan membuat SDK yang mengabstraksikan hardware grafis N64 dan menyediakan primitive, lighting, shading, baked lighting, dan tool modern lainnya. Disebutkan pula bahwa hardware N64 punya struktur unik khas generasinya, disertai tautan ke informasi hardware yang detail

    • Disebutkan bahwa N64 dirancang oleh SGI, serta betapa besar pengaruh SGI terhadap grafis 3D. Ada dugaan bahwa justru N64 mungkin memiliki hardware paling standar di generasinya. Bahkan akan cukup mengejutkan jika tidak ada library OpenGL untuknya. Kekurangannya, konsol ini harus dipandang seperti kartu grafis yang diberi tambahan CPU, dan sistem grafisnya terekspos secara langsung. Arsitektur chip grafis tidak saling kompatibel, para vendor menghindari membuka struktur internal seperti ini dan hanya menyediakan API (OpenGL, DirectX, dan sebagainya) agar desain kreatif tetap dimungkinkan, tetapi akses langsung ke hardware menjadi sangat sulit. Sebagai tambahan, dijelaskan bahwa OpenGL berasal dari SGI, dan nvidia juga didirikan oleh orang-orang eks-SGI

    • Disebutkan "Shadow of the Colossus..." sambil membagikan tautan YouTube terkait

  • Ada ungkapan kagum bahwa artikel utama tentang trik grafis N64 ini berakhir dengan pertanyaan “Apakah ini masa depan?”

    • Dijelaskan bahwa pengembangan indie N64 sedang sangat bergairah akhir-akhir ini. Puluhan game populer sudah didekompilasi dan dibuka sebagai source code, sehingga port ke PC jadi lebih mudah, dan berbagai mod yang berjalan di hardware asli juga terus dibuat. Ditekankan juga adanya fan remake Zelda dan contoh game lengkap baru dengan dungeon serta cerita baru, optimalisasi teknis yang sangat aktif di komunitas Mario 64, pengembangan engine mandiri dan sekuel buatan sosok bernama Kaze, serta rekomendasi materi video deep dive teknis. Disebutkan pula berbagai demo liar seperti Portal, kisah perhatian hukum dari Valve, serta bagaimana karya Rare yang tidak pernah dirilis seperti Dinosaur Planet bocor, lalu didekompilasi dan dipulihkan, kemudian hidup kembali di skena indie, semuanya diperkenalkan dengan sangat hidup bersama tautan-tautan detail
  • Ada ungkapan kekaguman pada kejeniusannya para engineer game yang mampu menciptakan solusi kreatif di atas hardware yang terbatas

    • Dibagikan prinsip bahwa kreativitas terbaik justru muncul saat ada batasan. Itulah rahasia di balik pico8, Animal Well, dan berbagai game mengesankan lainnya. Ada juga curahan bahwa akhir pekan ini muncul ide untuk sangat memperbaiki arsitektur 2d-pixel-art-game-maker-maker buatan sendiri, sehingga rilisnya tampaknya akan mundur satu bulan lagi

    • Disampaikan bahwa yang diperkenalkan kali ini bukan karya dari masa kejayaan N64 dulu, melainkan karya baru yang dibuat belakangan ini

    • Ditegaskan bahwa ini bukan karya developer N64 pada zamannya, melainkan teknologi baru terkait demoscene menurut standar tahun 2025

  • Ada nostalgia bahwa sekarang memang menyenangkan memiliki sistem yang lebih cepat, tetapi keseruan menembus batasan game lama dan kepuasan saat berhasil melakukannya dengan benar terasa istimewa. Dijelaskan bahwa pengguna Hacker News mungkin akrab dengan konsep 'raster interrupts' dan 'racing the beam', lalu dibagikan kisah tentang bagaimana teknik seperti itu di Atari 800 memungkinkan hal-hal yang tadinya mustahil. Ada juga pengakuan bahwa baru belakangan ini diketahui game Atari 2600 sangat dipengaruhi pendekatan segila itu, lengkap dengan materi YouTube. Bahkan jika kemajuan hardware berhenti total sekalipun, ada keyakinan kita masih bisa terus menemukan trik-trik baru yang menarik selama puluhan tahun

  • Ada yang mengenang pernah memakai teknik lighting berbasis palet pada game shareware mereka di era 90-an. Palet VGA 256 warna diatur agar tiap warna memiliki perubahan terang-gelap bertahap, sehingga cukup dengan menambah atau mengurangi indeks warna untuk menghasilkan efek pencahayaan dengan mudah

  • Ada pengamatan bahwa demoscene dan karya-karya seperti ini memang mengagumkan, tetapi sering cenderung berfokus pada scene yang sederhana dan kosong. Ada analisis bahwa teknik semacam ini biasanya hanya cocok untuk latar belakang atau fitur game yang terbatas. Pendapatnya, upaya seperti FastDoom atau proyek optimalisasi Mario-64 yang benar-benar mendorong performa hardware lama jauh lebih tinggi sambil justru menambah konten dan fitur terasa jauh lebih mengesankan. Ada juga pemikiran bahwa mungkin ada keterkaitan antara demoscene dan proyek-proyek yang lebih matang seperti itu

  • Ada kerinduan pada teknik optimalisasi dari era PS1 dan PS2. Meski sekarang kebanyakan dijalankan lewat emulasi dan di-upscale ke 1080p atau bahkan 4k ke atas, hasilnya tetap terlihat keren. Ada pendapat bahwa grafis Halo 2 dalam 4k sudah lebih dari cukup, serta contoh demo efek 'gelombang panas' yang benar-benar dibuat di GT3, sambil mengutip komentar pembuatnya bahwa di PS3 hal itu tidak bisa diwujudkan secepat di PS2. Bukan efek panas realistis ala engine UE5 sekarang, melainkan trik yang tidak membebani performa terlalu besar, dan justru itu dianggap lebih baik. Daripada mengalami penurunan frame karena RTX, menurutnya trik lama lebih layak dipilih. Disebutkan pula bahwa pada CPU MIPS 299MHz, game-game luar biasa seperti Shadow of the Colossus, GoW2, FFXII, GT4, Black, Valkyrie Profile 2, Rouge Galaxy, Burnout 3, Jak and Daxter, Ratchet, dan lain-lain bisa berjalan, serta RE4, Metroid, dan Zelda di GameCube. Ditutup dengan rasa kagum dan hormat pada kemampuan para developer game tradisional

    • Ditunjukkan bahwa video GoW2 itu diambil dari emulator PCSX2, jadi kemungkinan besar sudah memakai upscale dan berbagai efek peningkatan lain. Meski begitu, GoW2 di PS2 tetap dianggap pencapaian yang luar biasa

    • Untuk PS2 ada yang setuju, tetapi untuk PS1 ada pendapat bahwa performanya biasa saja. Menurutnya performa PSX setara Pentium 90~100, tetapi Pentium MMX dengan 3DFX bisa menyamai atau melampaui N64. Disebutkan PSP, SGI Irix, dan PS2 sebagai contoh CPU MIPS yang mampu memberi performa luar biasa pada clock rendah. Dijelaskan pula bahwa GPU PS2 terpisah dari CPU R4k, lalu dibagikan pengalaman nyata bahwa port Deus Ex ke PS2 terasa kalah dibanding versi PC dan tidak mampu menangani Unreal Engine secara penuh. Jadi, meski PS2 menunjukkan efek-efek khusus yang luar biasa, pada port seperti Deus Ex ukuran map-nya sangat kecil

    • Ada keyakinan bahwa grafis Halo 3 terlihat lebih bagus daripada game modern. Efek seperti blur, bloom, serta rumput dan dedaunan yang terpental-pental dianggap justru memberi pengalaman visual yang kurang baik. Dalam genre FPS berkecepatan tinggi, jumlah poligon yang sangat detail terasa tidak terlalu berarti, dan resolusi tekstur pun rasanya cukup-cukup saja. Pada akhirnya, yang benar-benar terasa menurut pengalaman pribadinya hanyalah kebutuhan hardware yang makin berat