HN 日本語サマリー

← 一覧へ戻る
プログラミング

Box3D発表 :: Box2D

Announcing Box3D :: Box2D (box2d.org)

444 pointsby makepanic101 コメント

要約

Box3Dは、人気の2D物理エンジンBox2Dの作者が開発した、オープンソースの3D物理エンジンです。既存のゲーム開発における課題解決と、長年の物理エンジン開発の知識継承を目的としており、Unreal Engineやs&boxなど、すでに複数のプロジェクトで採用されています。Box2Dの設計思想を継承しつつ、三角形メッシュ衝突や高さフィールド衝突、ベイクド複合衝突など、3Dゲームに必要な機能が多数追加されています。

全文翻訳

Box3Dの発表 オープンソースの3D物理エンジンBox3Dのリリースを発表できることを嬉しく思います。現在GitHubで公開されています。 Box3Dリポジトリ Box3Dは、Box2Dのフォークとして、3Dゲームに必要な多くの機能が拡張されたものと考えることができます。いくつかの追加機能は以下の通りです: 三角形メッシュ衝突 高さフィールド衝突 ベイクド複合衝突 Box3Dのコアアーキテクチャは、Box2Dとほとんど同じです。 C API すべてのライブラリソースはC17 サブステッピングソルバー 連続衝突 大規模なアイランド向けグラフカラーリング ワイドSIMDコンタクトソルバー マルチスレッディングフック オプションの内部スケジューラ 位置にダブル型を使用する大規模ワールドのサポート 記録と再生 Box3Dが実際に動作する様子を見たい場合は、このビデオをご覧ください: Box3Dが存在する主な理由は2つあります。しかし、語るべきことはたくさんあります。ですので、しばらくお付き合いください。 理由1: The Legend of California 私がBox3Dを開発した最初の理由は、私が開発しているゲームにそれがL必要だったからです。説明させてください。 Unrealのネイティブ物理エンジンに関する問題 私は2022年からKintsugiyamaで『The Legend of California』の開発に取り組んでいます。このゲームはUnreal Engineを使用して構築されています。バージョン5.0から始めました。ネイティブの物理エンジン(Chaosと呼ばれる)での実験にはいくつかの問題がありました。ジャイロスコープトルクのシミュレーションがサポートされていませんでした。これは、細長い形状が長い間回転し続け、角速度を保存できることを意味します。例えば、回転するライフルのこのビデオをご覧ください。2015年に、私は任意の物理エンジンにジャイロスコープトルクを追加するための〜10行のドロップインアルゴリズムを開発し、Game Developer Conferenceで発表しました: プレゼンテーション。そのため、Chaosソルバーにこの機能を簡単に追加できたはずです。Epicはこの機能を2024年後半に追加しました。しかし、それが私の最大の問題ではありませんでした。サバイバルゲームであるため、私が最初に取り組んだことの1つは木を切り倒すことでした。倒れる木が不規則に動き、画面上をテレポートしました。私の推測では、Chaosは何らかの連続衝突のフォールバックを使用していたのでしょう。このシミュレーションは、滑らかな三角形メッシュ上に大きなカプセルが落ちるというものでした。このシナリオは簡単にシミュレートできるはずでした。もう1つの要因は、『The Legend of California』が多数のエンティティを管理する必要があることです。サーバー上には数十万のエンティティが存在します。これには高速なブロードフェーズが必要です。これは私たちのゲームにとって非常に重要であるため、ミドルウェアに任せるのはリスクが高いと感じました。私はブロードフェーズのデータ構造に関する豊富な経験があります。このテーマでGDCのプレゼンテーションも行いました。こうして、私たちの物理技術は転換点に達しました。これらの要因が積み重なり、私は決断を下す必要がありました。ネイティブソリューションを修正しようとするか、外部の物理エンジンに置き換えるかです。私はJoltのような既存のオープンソース物理エンジンを使用することを検討していました。物理プログラマーである私は、少なくともJoltをフォークして、私たちのゲームに必要な結果を得ることはかなり自信がありました。しかし、親友が別の行動を提案してくれました。 Valveが救いの手に 私の友人であるダーク・グレゴリアスは、熟練した物理プログラマーであり、Half-Life: AlyxでRubikonと呼ばれるカスタム物理エンジンを出荷しました。ダークはRubikonの趣味/ホームバージョンを維持しています。これを「Rubikon-Lite」と呼びましょう。彼は、私がRubikon-Liteをフォークし、自分のニーズに合わせて変更できると提案しました。そして、それが私がしたことです。私はRubikon-LiteをUnrealに直接接続しました。素晴らしい動作でした!ジャイロスコープトルクも得られ、木もきれいに倒れました。すべてがうまくいきました。Unrealの物理エンジンを置き換えるというテーマは、おそらくそれ自体でブログ記事(またはそれ以上)になるでしょう。いくつかのショートカットを使うことができました。なぜなら: 独自のスクリプトシステムを使用している(Blueprintではない) EsotericaアニメーションシステムをUnrealに移植したものを使用している Box3Dに直接接続するカスタムECSを持っている Box2D v3.0には、Rubikon-Liteフォークに導入したかった多くの最適化がありました。ある時点で、効率と正気を保つために、2Dと3Dの取り組みを可能な限り似せておく必要があることに気づきました。そこで、Rubikon-LiteのほぼすべてのAPI、データ構造、アルゴリズムをBox2Dのコードに置き換えました。幸いなことに、2Dと3Dのデータ構造は空間次元にほとんど影響されません。最終的にRubikon-LiteフォークはBox3Dに変貌しました。今日のBox3Dには、凸包生成といくつかの衝突アルゴリズムにRubikon-Liteのコードがまだ残っています。残りはBox2Dのコードと、私がBox3D用に書いた新しいコードです。Valve側では、Rubikonは進化を続けており、ダークは新しいエンジンであるRagnarokで(Box3Dのそれに似た)最適化を開発しました。将来のValveゲームにご期待ください。 カスタムがより良い 『The Legend of California』は、広大なオープンワールドとサーバーオーソリティを持つ野心的なプロジェクトです。倒れる木、ラグドール、ボクセル、サルーンのドア、タンブルウィードはすべてサーバー上でシミュレートされます。カスタム物理エンジンを持つことで、ゲームのニーズに合わせて機能セットとパフォーマンスを調整できます。パフォーマンスに関しては、倒れる木の最適化に多くの作業を行いました。巨大なセコイアの木がボクセル地形に速く倒れます。メッシュ衝突とCCDをうまく機能させるには、大変な努力が必要です。また、ボクセルシステム向けに衝突メッシュを高速に構築する作業も行いました。これらはランタイムで構築する必要があるためです。ボクセルはグリッド状であるため、メディアン分割でうまく構築されます。ストリーミングも重要な機能です。私たちの拠点構築はキットバッシングを使用して行われます。大規模な拠点では、簡単に約50,000個の独立した衝突メッシュを持つことがあります。これらを物理エンジンに1つずつロードするのは非効率的で、多くのメモリを使用します。そこで、分離された衝突形状を最適化されたデータ構造に調理し、単一の巨大な形状としてロードできる複合衝突システムを構築しました。これにより、数千ものボディと形状を作成するオーバーヘッドがなくなります。 理由2: 知識の維持(と正気の維持) 個人的な話ですが、私は2004年からゲーム向けの物理エンジンを作り続けています。転職するたびに、その仕事を置いていかなければなりません。これがBox2Dを開発した理由の一部です。それは私の知識と努力を捉えるオープンソースプロジェクトであり、将来の仕事の基盤として利用できます。しかし、3D側では、さまざまな点で車輪を再発明し続けています。それに完全に反対しているわけではありませんが、大きな負担です。どうにかして、Kintsugiyamaの素晴らしい人々に、Box3Dをオープンソースにするだけでなく、日中の仕事の一環として取り組むことを許可してもらいました。これは、私が実現可能にサポートできることを意味します。ですので皆さん、Box3Dを可能にしてくれたKintsugiyamaに大感謝をお願いします。 なぜBox3Dを使うのか? これは簡潔に述べます。Box2Dとそのデザインが好きなら、おそらくBox3Dも気に入るでしょう。結局のところ、彼らは兄弟です。Box3Dはオープンソースです。私は他の物理エンジンと競合しようとしているわけではありません。オープンソースは私にとってビジネスではありません。私はゲーム物理学に取り組むのが好きなので、Box2DとBox3Dを開発しています。長年にわたってBox2Dで作成されたすべての素晴らしいゲームを見て、私は喜んでいます。 Box3Dの始め方 バニラgitとCMakeをインストールし、Box3Dリポジトリをクローンします。ビルド手順はREADMEに記載されています。ビルドが完了したら、サンプルを実行して提供されている機能を確認してください。コーディングを始めるには、サンプルコードを見てください。エンジンヘッダーには完全なDoxygenコメントがあり、手書きのマニュアルは作成中です。ここにホストされているドキュメントがあります。最小限の例はHelloWorldテストで見つけることができます。 Box3Dを使っているのは誰ですか? Box3Dはすでにいくつかの場所で使用されています。『The Legend of California』以外にも、以下の場所で使用されています: s&box、Facepunch Studiosによるゲームプラットフォーム Esoterica、Bobby Anguelovが主導するオープンソースゲームエンジン 1000人プレイヤー宇宙ゲーム、Glenn Fiedlerによるマルチプレイヤーゲーム Box3Dの未来は? 現在いくつかのゲームで使用されているにもかかわらず、Box3Dはまだアルファソフトウェアだと考えています。間もなくv0.1をタグ付けし、そこからv1.0リリースに向けて構築していきます。エンジンにはより多くのテストとより完全なドキュメントが必要です。しかし、機能セットはすでに良い状態にあります。私が検討しているタスクは以下の通りです: キャラクターの移動機能の強化 ゴースト衝突軽減の改善 最適化 ジョイントソルバーの改善 Box2Dと同様に、Box3Dも無期限にサポートする予定です。しかし、成熟したら、少し休憩を取るかもしれません。