本文へ
ハクソク

世界を動かす技術を、日本語で。

「Hedra」は、高校時代にゼロから作成した3Dオープンワールドゲームです。

元記事: 原文(github.com)

概要

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両方に対応

提供: ハクソク · 要約更新:

AIによる日本語要約です。内容は原文とあわせてご確認ください。

Hacker Newsの議論を読む

Hackerたちの意見

このゲームは高校の時にOpenGLを学ぶために始めたんだけど、気づいたらスコープクリープが進んで、最終的にはアニメーションやレンダリング効果、ダイナミックな地形などを持つフル3Dゲームとエンジンになっちゃった。コードは約10万行で、LinuxとWindowsのネイティブサポートもあるよ。みんなにシェアしたいと思ったんだ!AIコーディングが普及した今、まるで別の時代の遺物みたいに感じる。今手で10万行も書くなんて考えられないよね!

└

シェアしてくれてありがとう。AIなしで作られたゲームを見るのはいいね。

└

これを言うのが失礼に聞こえなければいいけど、「別の時代の遺物」っていう表現は、LLM以前の時代を表すには適してないと思う。私たちは今も昔と同じ時代にいるんだよ。今の開発者は、昔のgitクローンと今のLLMを使うことに意味のある違いがないって気づいてるはず。あなたのようなプロジェクトは、ソースの「トレーニングデータ」に貢献してるんだから。意図を持ってソースを公開しなかった場合だけが盗作なんだ。

└

素晴らしいね、高校のコーディングプロジェクトとしてはかなり良い出来だと思う(ビジュアルも、コードもすごく整理されてる)。ソフトウェア開発者の半分は、こうやって自分のゲームを作り始めたんじゃないかな。もう誰もこんな風にメンタルを鍛えることはないなんて考えると驚きだよ。私はこの趣味プロジェクトを通じて、分析的思考やデバッグ、問題解決をたくさん学んだし、壁にぶつかりながらも情熱を持って取り組んだ。単に「クロード、[ゲーム名]を作って」って言うだけじゃ、同じ経験にはならなかっただろうね。

└

すごくクールだし、シェアしてくれてありがとう!一人でもこんなものを作れるっていうのはインスパイアされるね。そしてもちろん、AIっぽさは全然ない。ちょっと見ただけで、これは本当にオリジナルのアート作品だって感じるよ。多くの人が、あなたのように考えながら手でコーディングすることを学ばなくなるのは悲しいね。「今はAIコーディングの時代、すべてがAIでコーディングされる」っていう考えに対抗し続ける必要があると思う。特に情熱を持ったプロジェクトは、手で丁寧に作り続けて、これを普通のことにしていこう。まだまだAIなしでコーディングしてる人がたくさんいるからね。

└

達成したことに拍手を送りたいし、もっと一般的な選択肢の代わりにC#を選んだことには特に評価ポイントが高いよ。

└

ゲームを手に入れたけど、古いPCでもスムーズに動いて、すごく楽しめたよ。この作品にかけられた努力とスキルには本当に感謝してる。3DゲームプログラミングやOpenGLに何度も挑戦したけど、全然自分のスキルや忍耐力には合わなかったから。これは本当に情熱を持って作られたアートだね、ありがとう!

└

すごく楽しそうなプロジェクトだね!そんなに長い間続けるなんて、根気があるね。帰ったら試してみようかな。

あなたのローポリの美学、すごくいいね。多分、あなたとこのサイトの半分くらいの人が高校の時にゲームを作ったことがあるんじゃないかな。ここで話すのは正しいグループだよ。

OpenGLはどこから始めたの?特におすすめのチュートリアルとかある?

思い出させるなぁ、CubeWorldのこと。記憶が正しければだけど。これは褒め言葉だよ!

└

Cube Worldの見た目が好きだったけど、なったものには満足できなかったなら、Velorenを楽しめるかもね。これはCube Worldにインスパイアされたゲームを作るための無料のGPLv3プロジェクトだよ。[0] https://veloren.net/

Hacker Newsで議論の続きを見る

同じ出典の記事