概要
Catlantean 3D は、90年代初期の技術制約を再現しつつ現代の開発環境で制作中の FPSゲーム。 320x240解像度・256色パレット など厳しい制限下で、資産制作や描画技法を工夫。 パレット管理・コローマップ・アセット制作 の詳細な解説。 BlenderやPython を活用した効率的なスプライト生成。 開発中の工夫や課題 についても言及。
Catlantean 3D開発の挑戦
- Catlantean 3D は、 趣味プロジェクト として1年以上かけて開発中
- Steamで来年リリース予定
- 90年代FPS の技術的制約を再現しつつ、現代的なコンパイラや抽象化レイヤーを利用
- 自作エンジン・自作アセット のみ使用
- 手描きレンダリング・手動サウンドミキシング
- 320x240ピクセル・256色パレット という厳格なグラフィック制限
- ゲームロジックは固定小数点演算 でプラットフォーム間の挙動を保証
- プラットフォーム抽象化レイヤー は最小限の機能(フレームバッファ・入力・オーディオバッファ・ファイルI/O)
- AIの簡易化や手抜き無し
- 完成度の高い「遊べるゲーム」 を目標、単なる技術デモではない
パレットレンダリングとVGAグラフィック
- VGA Mode 13h (320x200, 256色)は90年代PCゲームの象徴的なグラフィックモード
- 1ピクセル=1バイト でパレットのインデックスを指定
- 現代のゲーム資産制作 では無数の色を使えるが、 256色制限 下では色選びが極めて重要
- DoomやDuke Nukem のような作品はこの制限を活かした好例
- Catlantean 3D では VGA Mode-X(320x240) を採用
- 4:3ディスプレイ でピクセルが正方形になるため
- 資産制作 では制限を意識した慎重な色選択が必要
パレット設計
- 768バイト (256色×RGB各1バイト)のパレットを手作業で調整
- 透明色・白・黒 をそれぞれ1色ずつ確保
- 血の表現用の赤系、カギや扉用の緑・青系
- 舞台設定(Catlantis=古代エジプト風パロディ)用の黄色・茶系
- 技術施設用のグレー系、単調さ回避のベージュ系
- テクスチャ制作時に都度追加・調整
- パレットは試行錯誤を繰り返しながら進化
コローマップとライティング
- Catlantean 3D は伝統的な レイキャスター方式 を採用
- DDAアルゴリズム で壁当たり判定・テクスチャサンプリング
- 床・天井は水平方向のスキャンラインで描画
- ライティング表現 が重要ポイント
- 距離に応じて色を暗く することで奥行き感を演出
- パレットレンダリング では色自体はインデックスなので、 暗い色を高速に引く工夫 が必要
- コローマップ という2次元配列を事前計算
- 各色ごとに32段階の暗さバリエーション
- Oklab色空間 で人間の知覚に近い色距離を計算
- 暗くするほど暖色側に色相シフト (ピクセルアートの定番テクニック)
- 描画時はO(1)で暗い色を取得
- 壁は縦1列ごと、床は横1列ごと、スプライトは1体ごと に計算すればよい
- Doom等の名作でも類似手法
アセット制作フロー
- Catlantean 3Dのテクスチャ・スプライト は3種類
- プリレンダースプライト :Blenderで3Dモデル制作→アニメーション→Pythonスクリプトでテクスチャ化
- 手描きスプライト・テクスチャ
- プロシージャル生成テクスチャ :手描き素材をPythonスクリプトで合成
- プリレンダースプライト のメリット
- アニメーションの再調整が容易 (モデル修正→一括レンダリング)
- Blenderのノードやコンポジット機能 でコントラスト・エッジを最適化
- Pythonスクリプトでパレット化・TEX形式に変換
- Oklabで最も近い色を自動選択
- 敵キャラスプライト は8方向×各アニメーションフレームを自動レンダリング
- ノード構成は冗長でも再利用性重視でそのまま残す方針
資産制作の工夫と今後
- Blender・Python API の活用で 省力化とクオリティ両立
- パレット制限下での色設計やライティング表現 に独自ノウハウ
- 「制約があるからこそ生まれる美しさ」 を追求
- 今後もパレットやアセットは随時改良予定
- ワークインプログレス であり、今後大きく変更される可能性も示唆
まとめ
- Catlantean 3D は、 懐かしさと現代的な工夫 が融合したFPS
- 厳しい技術制約 を逆手に取り、 美しさや遊びやすさ を追求
- パレット管理・レンダリング・資産制作 における具体的なノウハウを共有
- 今後の進捗や改良にも期待