概要
Project Hedra は、 オープンワールドかつロー・ポリ なRPGで、 クラス選択・スキル解放・無限生成ワールド探索 が特徴。 自作ゲームエンジン を用い、 Linux/Windows両対応 で開発。 プロシージャル生成 や 多彩な機能 を搭載。 C#とPythonによる拡張性、 モッディングサポート も充実。 独自の技術要素 や開発経緯も興味深いプロジェクト。
Project Hedra: 野心的なオープンワールドRPG
- Project Hedra は、 ロー・ポリゴンスタイル のオープンワールドRPG作品
- クラス選択、 無限に生成されるワールド 探索、 スキル解放、 プロシージャルクエスト の体験
- 高校時代 (15歳頃)に OpenGL学習目的 で開発開始
- 数年で フル機能の3Dゲームエンジンとゲーム へ拡張
- 約10万行のコードベース、 Linux/Windows両対応
ゲームの主な特徴
- 美しいプロシージャル生成ワールド
- クエスト や ボス戦
- 100種類以上のアイテム とレアリティシステム
- スキルツリー と N+スキル
- 4つのクラス、各2つのスペシャリゼーション
- 自動生成される構造物
- 釣り・クラフティング など生活要素
- トレード・NPC交流
- 仲間やペット の同行
- サウンドトラック・マップ・多次元空間
- その他多数の機能
エンジンの主な特徴
- 最新OpenGL対応レンダラー
- スキンメッシュ・アニメーション・Collada(.dae)パーサ
- 静的メッシュ・スクリーンスペースリフレクション/アンビエントオクルージョン
- Bloom, FXAA, MSAA対応
- モッディングサポート・CIによるSteam自動デプロイ
- ローカライズ・OpenALサウンド・Pythonスクリプト対応
- モジュールシステム・Steam統合・自作UIシステム
- 動的シェーダーリロード・カリング・LOD・スカイボックス・シャドウ
- 3Dトレイル・パーティクル・BulletPhysics統合
- チャンクシステムによる無限ワールド
- .plyパース・MarchingCubesによる動的メッシング
- C#独自プリミティブ/アロケータ実装
- 1000以上のテストケース・統合テストフレームワーク
- アセット圧縮・エンティティコンポーネントシステム
- その他多数
興味深い技術要素
- WorldRenderer.cs :わずか3回のドローコールで全世界を描画(glMultiDrawElements利用)
- Block.cs :ワールドのコアコンポーネント(詳細はhttps://maxilevi.com/blog/procedural-meshing-hedra)
- Fishing.py :IronPythonで書かれた釣りモッドスクリプト、C# APIと直接連携
- NativeArray.cs :カスタムアロケータによる配列プリミティブ。ヒープ・スタック両対応。GC負荷低減を狙う
面白い事実
- ワールドデータは完全プロシージャル生成、セーブはプレイヤー情報とシードのみ
- ボクセルベースワールド + Marching Cubes で滑らかなサーフェス抽出
- Hedra の名前は Tetrahedra 由来、Marching Tetrahedraアルゴリズム利用
- .PLY/.DAEモデルのみ対応、どちらもテキスト形式・テクスチャなし。テキスト→インタラクティブ画像生成
- スクリーンショットは今後追加予定
コード構成とアーキテクチャ
- ゲーム本体はエンジンへのMod として設計。Mod APIの維持を促進
- Hedra :AI、ワールド生成、モジュール、オブジェクト配置等を担当
- Hedra.Engine :レンダリング・サウンド・ウィンドウ・ゲームループ等、基盤機能
- Framework :ヒープ・スタックアロケータ、自作リスト/配列、ネイティブポインタラッパ等
- HedraTests :テストスイート
- Asset Builder :画像・モデル・サウンド・シェーダ等を1つのバイナリに圧縮、データ取得高速化
- Server :かつてP2Pマルチプレイ用UDPホールパンチングサーバ。エンジンコードにネットワーク残骸あり
ビルド方法
- サブモジュール全取得
- 依存スクリプト実行
- C#ソリューションをコンパイル
- GitHub Actionsワークフロー参照でLinux/Windows両方に対応
このゲームは高校の時にOpenGLを学ぶために始めたんだけど、気づいたらスコープクリープが進んで、最終的にはアニメーションやレンダリング効果、ダイナミックな地形などを持つフル3Dゲームとエンジンになっちゃった。コードは約10万行で、LinuxとWindowsのネイティブサポートもあるよ。みんなにシェアしたいと思ったんだ!AIコーディングが普及した今、まるで別の時代の遺物みたいに感じる。今手で10万行も書くなんて考えられないよね!