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

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
    :
    glMultiDrawElements
    を使用し、水をテキストエンタル、インスタンス化されたオブジェクトに分けて描画します。 всего3 回の描画コールで整个世界をレンダリングします(データバッファ構成に依存しますが、設計時は 3 回が目標)。
  • Block.cs
    :ワールドの中核となるコンポーネントです。詳細は Maxilevi の技術ブログ を参照してください。
  • Fishing.py
    :IronPython を使用した Python モッドスクリプトであり、C# API に直接アクセス可能です。
  • NativeArray.cs
    :独自のアロケーターを用いた配列プリミティブの実装です。ヒープベースとスタックベース(
    stackalloc
    )の両方を提供しており、GC 回避を目指しています。

ゲームの世界観と仕様

  • 完全プロシージャル生成:ワールドは完全に Procedural に生成されており、ワールドセーブファイルは存在しません。プレイヤーのコンテンツとワールドシードのみが保存され、残りの部分はランタイムで生成されます。
  • ボキセル技術:ワールドはボキセルベースですが、離散的なボキセルから暗黙的な連続表面を抽出するためのMarching Cubesアルゴリズムが適用されています。
  • 名前の由来:ゲーム名「Hedra」は、最初に実装した Isosurface 抽出アルゴリズム(Marching Tetrahedra)で使用された形状である四面体(Tetrahedra)に由来します。
  • モデルフォーマット:
    .PLY
    および
    .DAE
    モデルのみをサポートしています。
    • これらの形式は明文化されたテキスト形式であり、テクスチャを含まないためです。
    • テキストを読み込んでインタラクティブな画像を生成する大量のコードが書かれていますが、非常にクールだと考えます。

ビルド方法

ビルドプロセスは比較的簡単です。以下の手順に従ってください。

  1. サブモジュールをすべてチェックアウトします。
    git submodule update --init --recursive
    
  2. ビルド依存関係のスクリプトを実行します。
    ./build.sh dependencies  # OS に合わせてコマンドを変更する必要がある可能性があります
    
  3. C# ソリューションをコンパイルします。
    dotnet build -c Release
    

詳細な Linux および Windows におけるビルド手順については、GitHub Actions ワークフローを確認してください。

同じ日のほかのニュース

一覧に戻る →

2026/10/23 8:45

Docker は変だ

## Japanese Translation: 本文は、主に Linux コンテナが特定のコア機能を利用して孤立化されたプロセスであり、仮想マシンとは異なること、また Docker がイメージをフォルダとして管理することを明確にしています。完全な仮想化と異なり、コンテナは隔離にはネームスペースを用い、リソース管理には cgroups を用いて、管理されたディレクトリ内でバイナリを直接実行します。重要な技術的詳細として、Go で記述される `runc` ランタイムがあり、これは初期システムコールの処理に C モジュールを使用して Linux カーネルとインターフェースする必要があります。Go は `fork` などの特定の機能へのネイティブサポートを持っていないため、不足している振る舞いを近似させるために `/proc/self/exe` などのワークアラウンドが必要です。さらに、標準的な Linux カーネル API は通常ルートの権限を必要とするため、Docker デモンはデフォルトで昇権限(elevated permissions)で動作します。これを解決するためには、ルートレスコンテナランタイムは、通常ルートベースのセットアップが提供する機能を複製するために、ユーザースペースのネットワーキングスタックを再構築する必要があります。結局のところ、これらのアーキテクチャ的な制約を理解することは、安全なルートレス環境を管理するユーザーにとって不可欠であり、不要な権限昇格を避けながらシステム安定性を維持する互換性のあるインフラを設計する企業にとっても重要です。

2026/10/23 7:54

LLM が大規模な正式なソフトウェア検証の実現を可能にしています

## Japanese Translation: 研究者は、大規模言語モデル(LLM)の Claude を用いて、100 以上のオープンソースソフトウェアライブラリに対して前例のない規模での形式的検証を実行し、歴史的なマイルストーンを達成しました。Theorem との協力により、プロダクション向けソフトウェアに対する初の大規模 AI 主導の形式的検証として、アセンブリ(RISC-V)レベルで実装されたコードが検証されました。その結果、64 MB 未満の入力に対して、123 のライブラリの実行可能アーティファクトがメモリ安全性エラーやフェイルするアサートなしに正常終了することが証明されました。この達成には、Claude が Rocq コードを約 1.8 億行生成し、239 のエントリポイントを対象にクラッシュしない仕様を証明するとともに、従来のフォージングで検出されなかった深刻なバグを特定・修正する作業が行われたことが寄与しました。具体的には、カウンタのアンダーフローや境界外読み取りといった複雑な問題を含むものが含まれます。検証の対象は Linux でコンパイルされた RISC-V 命令であり、ユーザーが信頼しなくてもよいのは既知のハードウェア/ソフトウェアの数学モデル、定理ステートメント自体、および Rocq の証明チェッカーのみです。基本的安全性を超えて、このアプローチはデータ圧縮の精度やアルゴリズムの正しさ(例:red-black トリーの再平衡)といった高位のプロパティも検証しました。チームは共有作業空間戦略を採用し、証明の再利用によりトークン使用量を 17%削減するものであり、Mathlib のような数学ライブラリの成長に類似しています。形式的に検証済みであっても、形式仕様が実態と異なったり機械モデルが現実と異なる場合(例:x86/ARM システム上)には、完全なバグの不在を保証しないことに留意する必要があります。本プロジェクトでは公衆の検討のために一部の証明をリリースしており、AI 支援による検証をソフトウェア開発ワークフローでの標準へと導く道筋を用意しています。

2026/10/22 23:32

Quad9(DNS レゾルバー)がフランスから退出します

## Japanese 訳: 2026 年 11 月 24 日より、Quad9 はフランスのユーザーに対して、無料のサイバープロテクトおよび一般的なサービスを提供を永久に停止いたします。この決断は、beIN が提起した重大な訴訟において Quad9 に不利となるフランス裁判所の判断を受けたものです。beIN は、特定のドメイン名の再帰的 DNS 解決をブロックすることが、視聴覚的な権利を保護するために必要であると主張しました。裁判所は、違反が完了するまで(11 月 14 日)の金融ペナルティを約 580,000 �ーロから毎日上記 1,000 ユーロに減額しましたが、Quad9 は再帰的 DNS 解決が中立かつ受動的なサービスであり、応答を変更することはそのミッションであるプライバシー、セキュリティ、そしてインテグリティに違反するとする理由をもってこれに従うことができないと述べています。さらに、Quad9 の無料サービスには登録や身元証明は不要であり、ユーザーと管轄区域を関連付けるデータベースを持たないため、geoIP ベースの管轄区域マッピングは技術的に不可能です。フランス裁判所の要求を満たすためにグローバルなブロックを実施することは、French の法律を全世界のユーザーに適用することを意味し、Quad9 にとって許容されない越境的な先例となります。以前にも地理的な IP ブロックの実施を試みた際(例:2021 年から 2023 年にかけてドイツ)、原告が VPN を介してブロックを回避したために裁判所に対する軽蔑罪として罰金が科されるなどしました。Quad9 に対して数百のドメイン名のブロックを求めて進行中の訴訟が約 20 件あり、累積的な法的リスクは大きいです。上訴は進行中ですが、Quad9 は予定通り撤退を進めることにします。この動きにより、国家機関(例:DINUM, EDF, SNCF)、研究ネットワーク(RENATER)、大学、医療提供者、および民間企業を含む何百万人ものフランスのユーザーが、サイバー脅威からほぼ 9 年間も重要な保護を失うことになります。Quad9 は、将来、監督なしで民間企業が DNS コンテンツフィルタリングを自動化することを可能にする法律に対して警告を発し、市民に対し、日常のドメイン名lookup が刑事犯罪ではないことを明確化することを目指しています。

高校時代にゼロから作成したオープンワールドの 3D ゲームです。 | そっか~ニュース