本文へNintendo 64のパレットライティングテクニック
元記事: 原文(30fps.net) 概要
- Nintendo 64向けデモで 焼き込みライティング と ノーマルマッピング を実装
- パレットテクスチャ の動的更新による高速なシェーディング手法を提案
- オブジェクト空間ノーマルマップ と 方向性アンビエント の独自技法を解説
- スペキュラー表現 や大規模メッシュ対応の工夫も紹介
- 技術的制約と今後の課題についても 考察 を提示
Nintendo 64でのノーマルマッピングと焼き込みライティング技術
プロジェクト概要
- Revision 2025向けに Nintendo 64デモ を制作
- ノーマルマッピング と リアルタイムスペキュラーシェーディング を実装すること
- サウンドはnoby作曲、Molokoがギター演奏(SoundCloudリンク) 提供
- 本記事では 方向性アンビエント と ノーマルマッピング の独自手法について解説すること
N64でのノーマルマッピングの可能性
- N64でのノーマルマッピングは WadeTyhon や Spooky Iluha など先行事例を確認
- 自身も エンボスバンプマッピング の試行経験あり
- 本手法は ランタイムでテクスチャに直接ライティングを計算 する方式
- 専用ハードウェア不要 でCPU上で任意のシェーディングコード実行可能
- 反面、 処理速度が非常に遅い ことが課題
パレットテクスチャのシェーディング最適化
- N64では パレットテクスチャ が一般的
- シェーディング時に パレットのみ動的更新 すれば各テクセルのライティングを計算したのと同等の効果を得られる
- オリジナルパレットを シェーディング済みパレット に置換し、通常のテクスチャとして適用すること
- 単純な diffuse “dot(N,L)” だけでも十分な見栄えを実現
- 線形空間でのシェーディングも一部で実施(デモ最終版では未採用)
オブジェクト空間ノーマルマッピング
- 一般的な タンジェント空間ノーマルマップ ではなく オブジェクト空間ノーマルマップ を採用
- オブジェクト空間では 各テクセルが絶対的な法線 を表現
- 計算が簡単で テクスチャから色を読むだけ で済むが、 各面にユニークなテクセル が必要
- diffuseテクスチャ(basecolor * AO) と ノーマルマップ は同一パレットインデックスを共有
- scikit-learnのK-meansクラスタリング で6チャンネル画像としてパレット生成
- シェーディング時は各パレットカラーごとにforループで処理し、 新しいRGB値を生成 すること
- この手法は 方向性ライト に限定され、 影や複雑な光源表現は困難
焼き込みライティングと方向性アンビエント
- 建物モデルに リアルなライティング を焼き込むことを目指す
- 頂点カラーRGB にアンビエント、 アルファ にダイレクトサンライトを格納
- アンビエントは 方向性強度(グレースケール環境マップ) と カラー(彩度強調RGB) に分離
- サンライトは 頂点アルファ で可視性を伝達
- シェーディング式:
- ambient = vertex_rgb * grey_irradiance_map(N)
- direct = vertex_alpha * sun_color * dot(N, sun_dir)
- color = diffuse_texture * (ambient + direct)
- 方向性アンビエント により、粗い焼き込みでもテクスチャディテールが映える
- 環境マップ にはequirectangular投影を使用し、PolyhavenのHDRIを活用
- シェーディングは ロード時に事前計算 することで複雑なサンプリングも許容
繰り返しテクスチャを持つ大規模モデルへの対応
- 元々は 単一オブジェクト向け アルゴリズムだったが、デモ用の大規模メッシュ(城)に適用
- Blenderで手動グループ化 し、サブメッシュごとにオブジェクト空間ノーマルマップを共有
- 各グループごとに world-to-model行列 を計算し、概ねタンジェント空間を近似
- 各グループがパレットを共有 するため、ライティング精度は平均的になる
- タンジェント空間の補間はランタイムで行わないため、 面ごとにライティングの段差が出る (最大の短所)
スペキュラー表現の試行
- パレットスペース方式 ではスペキュラーや点光源の正確な表現が困難
- diffuse方向性ライト に限定される理由は「to camera」ベクトルVが使えないため
- それでも 球体近似 でスペキュラーハイライトを疑似的に表現
- 多数の面が同一パレットインデックスを共有するため、 スペキュラーがファセット状 になるが、見た目は十分にごまかせた
- デモでは多くの人を「騙す」ことに成功し、一定の成果と評価
技術的制約と今後の展望
- シェーディングの不連続性、 グレースケールテクスチャ限定、 点光源非対応 など制約多数
- 高度なプリプロセス が必須でリアルタイム性は低い
- Spooky Iluhaの技術のように シェーディング不連続性を解消 しつつ、アンビエントとダイレクトライト両対応を目指したい
- 将来的な改善や新技法の模索 がこの趣味の醍醐味
公開と今後
- PAL対応N64 ROM を公開(ただし頻繁にクラッシュするため注意)
- 書籍執筆も検討中、興味があればサインアップを推奨
提供: ハクソク · 要約更新:
AIによる日本語要約です。内容は原文とあわせてご確認ください。
Hacker Newsの議論を読む
ゲームエンジニアたちの天才ぶりには本当に驚かされるよ。彼らは多くの制約に対処しながら、想像力豊かで素晴らしい解決策を生み出したんだ。