
2026/10/23 3:44
高校時代にゼロから作成したオープンワールドの 3D ゲームです。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Project Hedra は、高校生の学習課題として OpenGL の学習を目的に着想された大規模なオープンワールド RPG です。当初は教育プロジェクトと見なされていましたが、約 10 万行のコードを有する高度で完成度の高いゲームおよびエンジンへと進化しました。このゲームは、Marching Cubes を用いた手抜き生成のボキセル世界を含む豊かな生態系を特徴とし、レアリティが設定された 100 種以上のアイテム、クエスト、ボス、動的な構造物、そして専門的なスキルツリーを備えた独自のクラスシステムを採用しています。また、複数の次元、NPC パートナー、ペット、漁業やクラフト、取引などの経済メカニクスもサポートします。技術的には、エンジンがフラクタルおよびオクルージョンカリングによる最適化が行われている現代の OpenGL レンダリング技術を採用しており、スクリーンスペース反射、環境遮蔽(Ambient Occlusion)、ブルーム効果、シャドウ、そしてさまざまなアンチアライアシング手法を実装しています。Linux および Windows 両方のプラットフォームでの性能を確保するために、ゴミ収集を最小限に抑えるための独自 C# フレームワーク、エンティティ・コンポーネント・システム(ECS)アーキテクチャ、およびデータ管理を効率化するための CLI Asset Builder ツールが採用されています。Python スクリプティングへの対応、Steam 統合、そしてオープンなモジュール設計を支える Hedra は、機関の支援なしで自己研鑽した開発者がゼロから複雑なゲームエコシステムを構築できることを示しています。
本文
Hedra プロジェクト:オープンワールドローポリゴン RPG とゲームエンジン
Hedra は野心的なオープンワールドローポリゴン RPG です。プレイヤーは職業を選択し、無限に生成される Procedural(手続的)ワールド を探索します。異なるスキルを解き放ち、プロシージャルなクエストを完了しましょう。
- スクリーンショット:追加の画像をご覧いただけます。
- プロジェクト概要と詳細機能については、以下のセクションをご参照ください。
開発背景と歴史
- 始まり:高校時代(当時約 15 歳)、OpenGL の仕組みを学ぶために開始されました。
- 進化:当初は小さなスケールから始まり、数年以内にフルバッチな 3D ゲームおよびゲームエンジンへと発展しました。
- コード規模:コードベースには約10 万行のコードが含まれています。
- 対応 OS:LinuxおよびWindowsにおいて第 1 クラスのサポートを提供しています。
ゲームの特徴
百万行に及ぶ膨大なコードは徒労ではありません。このゲームには多数の機能が搭載されています。
- ワールド:美しい Procedural で生成された無限の世界
- コンテンツ:クエスト、ボス戦、異なる次元への出入り
- アイテム・経済:100 以上のアイテム(レアリティシステム完備)、商取引、NPC との相互作用
- スキル:N+ 種類のスキルを持つツリーシステム、4 つの職業 × 2 つの専門化(スペシャリゼーション)
- 活動:釣りができる、クラフト作成が可能
- システム:同伴者・ペットシステム、美しいサウンドトラック、ナビゲーション機能とマップ
- その他:動的に生成される構造物配置など多数の要素
エンジンの技術的特徴
現代的な OpenGL を活用したフルバッチなレンダラーと、多機能なツールキットを備えています。
グラフィックスとレンダリング
- フルバッチレンダリング:現代の OpenGL 仕様対応
- メッシュ処理:スキinned メッシュ、スタティックメッシュ、Marching Cubes アルゴリズムによるダイナミックメッシング
- ポストプロセッシング:スクリーンスペースレフレクション、アンビエントオクルージョン、ブルーム、FXAA、MSAA
- 最適化技術:フラクムカリング、オクルージョンカリング、ランタイム LOD 用のメッシュ簡素化
- 特殊機能:スカイボックス、シャドウ描画、3D テイルレンダリング、パーティクルシステム(OpenGL オブジェクトインスタンス化利用)
サウンドとスクリプト
- サウンド:OpenAL を使用したサウンドシステム
- スクリプト:Python スクリプティングサポート(IronPython)
- データ管理:モジュールシステムによるデータ指向オブジェクトの読み込み、アセット圧縮(高速読み込み・サイズ削減用)
アーキテクチャとテスト
- CI/CD:Steam ベータブランチへの自動デプロイ機能を備えた継続的インテグレーション
- ローカライゼーション:多言語対応サポート
- ステeam 連携:フルな Steam インテグレーション
- UI システム:生 OpenGL から記述されたフルバッチ UI(ダップダウン、ボタンなど)
- テストフレームワーク:1,000 件以上のテストケース、ゲームコンポーネントのモックリング対応
メモリ管理とパフォーマンス
- 独自アロケーター:C# の基本データ構造(List など)およびアロケーターの独自実装。
- スタック割り当てリストを採用し、ランタイムでの自動ヒープ割当を最小限に抑えることでGC(ガベージコレクション)回避を図っています。
- その他:Bullet 物理学との統合、チャンクシステムによる無限ワールド対応、.PLY ファイルパーサーなど
コード構造とアーキテクチャ
プロジェクト構成
このゲームは、モッド API のアップデートを強制し、MOD 制作へのアクセスを促すように設計されています。
:ほぼ全てのゲーム要素を含みます。Hedra- AI ロジック、コンポーネント、ワールド生成、モジュールシステム、オブジェクト配置など多岐にわたる機能を実装しています。
:エンジンの核となる部分を構成し、ワールドに対するすべての抽象化を定義します。Hedra.Engine- レンダリング、サウンド、基本的なシステム、ウィンドウ管理、ゲームループ、プラットフォーム機能を扱います。
:エンジンで使用されるコアプリミティブです。Framework- ヒープおよびスタックアロケーター、List および配列の独自実装、ネイティブポインタへのラッパーなどを含みます。
:テストスイートを提供します。HedraTests
アセットビルダー
- ゲームのアセットを便利なバイナリファイルに圧縮するためのコマンドラインツールです。
- 画像、モデル、サウンドファイル、シェーダーなどを単一のバイナリファイルに統合し、高速なデータ検索のために設計された構造で保存します。
サーバー機能
- かつて Hedra はマルチプレイヤーをサポートしていました。
- UDP ホールパンチングを行い、クライアント間で P2P 通信を行う仕組みでしたが、このサーバーがその役割を担っていました。
- エンジンコードにもいくつかのネットワーキングに関する痕跡が残っています。
興味深い部分と事実
コードのハイライト
:WorldRenderer.cs
を使用し、水をテキストエンタル、インスタンス化されたオブジェクトに分けて描画します。 всего3 回の描画コールで整个世界をレンダリングします(データバッファ構成に依存しますが、設計時は 3 回が目標)。glMultiDrawElements
:ワールドの中核となるコンポーネントです。詳細は Maxilevi の技術ブログ を参照してください。Block.cs
:IronPython を使用した Python モッドスクリプトであり、C# API に直接アクセス可能です。Fishing.py
:独自のアロケーターを用いた配列プリミティブの実装です。ヒープベースとスタックベース(NativeArray.cs
)の両方を提供しており、GC 回避を目指しています。stackalloc
ゲームの世界観と仕様
- 完全プロシージャル生成:ワールドは完全に Procedural に生成されており、ワールドセーブファイルは存在しません。プレイヤーのコンテンツとワールドシードのみが保存され、残りの部分はランタイムで生成されます。
- ボキセル技術:ワールドはボキセルベースですが、離散的なボキセルから暗黙的な連続表面を抽出するためのMarching Cubesアルゴリズムが適用されています。
- 名前の由来:ゲーム名「Hedra」は、最初に実装した Isosurface 抽出アルゴリズム(Marching Tetrahedra)で使用された形状である四面体(Tetrahedra)に由来します。
- モデルフォーマット:
および.PLY
モデルのみをサポートしています。.DAE- これらの形式は明文化されたテキスト形式であり、テクスチャを含まないためです。
- テキストを読み込んでインタラクティブな画像を生成する大量のコードが書かれていますが、非常にクールだと考えます。
ビルド方法
ビルドプロセスは比較的簡単です。以下の手順に従ってください。
- サブモジュールをすべてチェックアウトします。
git submodule update --init --recursive - ビルド依存関係のスクリプトを実行します。
./build.sh dependencies # OS に合わせてコマンドを変更する必要がある可能性があります - C# ソリューションをコンパイルします。
dotnet build -c Release
詳細な Linux および Windows におけるビルド手順については、GitHub Actions ワークフローを確認してください。