
2026/10/24 1:38
ソニック・ザ・ヒーローズ06(2025年版)の逸した機会
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
「Marathon Recompiled」の分析により、『Sonic Heroes』(ソニック06)が高品質なグラフィックスを意図的に無効化して、オリジナルハードウェアでの動作性能を維持したことが明らかになりました。高度な機能は保持されていましたが未使用にされていました。証拠として、城の町(Castle Town)におけるカットされたジオメトリやシェーダー使用制限が見られます。ゲームは主に低品質な「Billboard02」シェーダー(ほとんどがレベル 00)に依存しており、これは頂点ごとのライティングのみを提供し、カスケードシャドウマップ(CSM)を持たず、オブジェクト当たり2つを超えるポイントライトを欠いています。この制限は「Flame Core」や「Dusty Desert」といったステージで超えられ、その結果として半ランダムなあるいは消えたライトが発生しています。シャドウマッピングにおけるエプシロン値の欠如によりシャドウアクネが頻発しており、オブジェクト設定が失敗すると影は不鮮明になります。リアルタイムプランarLayout反射はシングルプレイヤーでは良好に動作しますが、マルチプレイヤーではマルチプレイヤースクリプトに「RenderReflection()」呼び出しがなく、分割画面レンダリングにはシングルプレイヤーグラフには存在しない特殊なフレームバッファ処理が必要となるため、静的キューブマップに置き換えられています。これらの意図的な犠牲は、クラッチタイムとフレームレート課題に駆動され、安定性を美しさよりも優先しましたが、このプロジェクトによるレンダリングエンジンへの深い調査により、ライティングの回復、視覚的なバグの修正、性能制約のために元々切り捨てられた品質の解放など、標的型パッチを実現可能にしています。これにより、レガシーコンソールゲームを今日において大幅に向上させることができることが示されています。
本文
『ソニックカラーズ』マラソン・リコンパイルによる技術解析と復元可能性
『ソニックカラーズ』の核心的システム、特にレンダリング部分への掘り下げは本記事の主要テーマです。各エリアの間には描写の質に著しい差があります。
- クリシスシティ: 反射やパーティクルエフェクト、ドラマチックなライティングが施された高品質な表現。
- キャッスルタウン: 平坦で憂鬱な表現。
1. カットコンテンツの正体と背景
ゲーム内には「消された機能」が残っており、これらは単に無効化されているだけです。
- 存在するが有効化されない機能: ベータ版映像から確認できる多くのエフェクトや複雑なジオメトリは、リコンパイル版で利用可能です。
- 「キングダムバレー」にはフル・バンプマップが使われていた。
- 「キャッスルタウン」には開発途中のより複雑な地形が存在していた。
- 理由: ハードウェア上の目標フレームレート達成が困難であり、発売直前の開発者による**過重労働(Crunch)**による結果です。
2. シェーダーの制限とバリエーション
ゲーム全体で多数使用されるシェーダーは、機能レベルによって分類されます。最も多用されているのは基本機能のみを持つ「Billboard02」であり、これが退屈な見た目になった主因です。
シェーダー機能比較表
| バリエーション | ライティング | CSM (シャドウマップ) | ポイントライト | ダブルテクスチャブレンド | 評価 |
|---|---|---|---|---|---|
| 00 | なし | いいえ | いいえ | いいえ | 最悪 |
| 01 | Vertex | いいえ | はい | いいえ | |
| 02 | Vertex | いいえ | いいえ | いいえ | 最も多用 (標準) |
| 03 | Vertex | いいえ | はい | いいえ | |
| 04 | Pixel | いいえ | いいえ | いいえ | |
| 05 | Pixel | はい | いいえ | いいえ | |
| 06 | Pixel | はい | いいえ | はい | |
| 07 | Pixel | はい | はい | はい | 最高級 (未実装) |
- 現状の問題: ゲームの大部分は顶点レベルのライティング (Vertex Lighting) だけで描画されており、CSM やポイントライトに対応していません。
- 交換の難しさ: シェーダー単体の入れ替えは不可行です。
- シェーダーの入出力(I/O)レイアウトが異なる。
- テクスチャ参照が
ファイル内定義されており、マップへの参照やシャドウ適用ロジックが分離しているため、単純な置き換えで機能しません。.xno
3. シャドウマップ (CSM) の問題点
シャドウ技術自体も開発末期の簡略化(ハック)の対象となりました。
- カスケード設定の問題:
とGenerateCSMLevels
で定義される最大 4 つのカスケードが、多くのエリアで縮小されています(例: Levels=3, Objects=2)。これによりシャドウの描画距離が短くなります。GenerateCSMObjects
- シャドウアクニ (Shadow Acne):
- サンプルにわずかなエプシロン値を付与する処理が行われておらず、耳部分などの周辺部で深刻なアーティファクトが発生しています。
- 不明瞭なシャドウ:
- スノーボードやストーリーカットシーンのスカートなどにシャドウが正しく適用されない不具合があります。これらには複雑なフック実装が必要であり、パッチ修正が困難です。
4. ポイントライトの制限と破綻
ソニック・チームは理論上柔軟なライティングシステムを持っていましたが、開発期限による無理が生じました。
- 過度な最適化:
- オブジェクトあたりのポイントライト数を2 つに物理的に制限しました。
- 「キングダムバレー」などはこれを遵守していますが、「フレイムコア」や「ダスティデザート」などは 8 個以上のライトを試みています。
- 結果:
- レンダラーが混乱し、ライト表示が半分以上ランダムに消える現象が発生しました。
- オブジェクト照明を顶点レベルに変更した際、ポイントライトの寄与領域が大きく変化しており、制限に従うステージでも機能しない状態になっています。
- リコンパイル版での改善:
- 壊す最適化(バグ)を除去することで安定化しましたが、2 つという制限は残っています。
- ライティング計算がシェーダーバイトコード内で展開されているため、特定と修正には多大な労力が必要です。
5. プレイナーな反射 (Cubemap Reflection) の現状
リアルタイム・プランナー・リフレクションシステム自体は高機能でしたが、マルチプレイヤー向けに簡略化されすぎています。
- シングルプレイヤー: 粗い解像度制限(フレームバッファの 1/4)虽有りませんが、容易にパッチ可能です。
- マルチプレイヤー:
- コスト削減のためにリアルタイム反射が一括削除され、代わりに粗悪な静的なキューブマップが使われています。
- これにより「キングダムバレー」などの風景は憂鬱な沼地のような雰囲気へと変貌しました。
- 実装の矛盾:
- ゲームは Lua スクリプトでレンダリンググラフを構築しており、シングル (
) とマルチ (render_gamemode.lua
) で独立したスクリプトが存在します。render_gamemode_multi.lua - マルチプレイヤー版では
呼び出しが完全に欠落しています。RenderReflection() - シングル版のコードを単にコピーしても動作しません。マルチレンダラーは**画面分割(Split Screen)**用の特別なフレームバッファ処理を持っており、反射機能を追加するとこの環境下で正しく動作しないためです。
- ゲームは Lua スクリプトでレンダリンググラフを構築しており、シングル (
6. 今後の展望とまとめ
リコンパイル・プロジェクトを通じて以下のような学習成果を得ることができました。
- ゲームのバックエンド動作メカニズムの理解深化。
- 今後の改善やパッチ貢献への基盤作り。
- キャラクターシェーダーの狂乱やオクルージョンカリング (OC) の欠如などの未解決問題も存在します。
『ソニックカラーズ』は開発期限を無理やり詰められた悲劇的なゲームですが、技術的な可能性はまだ残されています。このふざけたゲームを楽しみ、20 周年を祝いたいです。