- 1年前にRustで3Dゲームを開発することについて記事を書き、その後の流れを1年間追ってみた記録
- 現在もRend3、WGPU、Vulkanのグラフィックススタックを活用しており、今ではかなりうまく動作している
- 2024年には、Rustで進められていたいくつかの大規模ゲームプロジェクトが中止された
- 所有権(ownership)の制約を負担に感じたチームもあった
- コンパイル時間などを理由に不満を示したチームも存在した
- arewegameyet.rs は2024年7月以降更新が少なく、関連情報が遅れがちな傾向がある
- Rend3 は開発中止となり、直接フォークした rend3-hp を保守している
- wgpu、winit、egui などを最新バージョンに合わせて更新し、古いレースコンディションのバグを修正した
- GPU性能を最大限引き出そうとすると、依然としてCPUボトルネックが発生する問題がある。NVidia 3070ではGPU負荷25%の時点でCPU時間が不足する
- Vulkanのbindlessと複数のVulkanキューが必要であり、2025年にwgpuがこれをサポートする可能性がある
- 最高性能が必要でないなら、このスタックは十分に機能する
- Orbit、Renderling など他のレンダリングプロジェクトもあったが、活発には保守されていない
- Renderlingはまだ多少の可能性があるものの、まだ実用段階ではなく、開発者も1人しかいない
- Rustで3D作業を行う場合、グラフィックススタックの下層を自分で保守することに多くの時間がかかる
- winit、wgpu、egui などがAPIを変更するたびに追随し、壊れた部分をすべて修正しなければならない負担がある
- 1つが変更されると、他が追いつくまでに1〜2か月かかる
- Rustエコシステムでよく起きる問題として、安全なRust構文の代わりに独自の割り当て方式を使うと、マルチスレッド環境でバグを見つけにくくなる
- レンダリング構造の限界
- 多くのレンダラーは空間情報を別管理せず、光源ごとにすべてのオブジェクトに対して計算を行う構造(O(N*M))を採用していることが多い
- 大規模なシーンを扱うには空間分割(scene graph)の概念が必要で、結局はゲームエンジン級の構造(例:Bevy)に進まざるを得ない問題に突き当たる
- Bevyは独自のECSシステムによりRustの所有権モデルを大きく活用しておらず、Bevy流のやり方を強制するという欠点がある
- 結論として、Rustで複雑な3D作業を行うことは可能だが、多大な努力が必要
9件のコメント
所有権ルールに制約はあるものの、それを回避できるさまざまなデータ構造があり、どこかその場しのぎの感じがする:そう、まさにこれです。safeだと言いながらunsafeが必要で、不変だと言うのに可変にもなってしまって、もうめちゃくちゃ。いい気味です。Rustはうまくいくはずがありません。
2Dゲームはどうですか?
Rustベースのゲームエンジンが出てこないと..
ゲームエンジンなしでゲーム開発をすると、どんな言語を使ってもこんな感じになるんじゃないかと思いますね……(笑)
Rust は
堅牢なエンジン、コア、フレームワークなどを作るには適していますが、
アプリケーションレイヤーを構築する用途としては
そこまでおすすめしたいとは思いません。
ニックネームを見ると、信頼度が上がりますね
私も Rust で短いながら業務をしてみたり、本も出そうと思って少し調べたりしていましたが、最近は確信がだんだん薄れてきている感じです。
Simple is bestを固く信じているのですが、正反対の言語を見ているようでして。とはいえ、カーネルにも入ったわけですし、なくなることはなさそうですが。
Hacker Newsの意見
Tiny Gladeは、Rustで書かれた印象的なゲームの例
Rustを学んでいる途中で、新しいチームに加わる予定
パターンマッチングと列挙型については、C++プログラマーは感銘を受けるかもしれないが、OCaml/Haskellプログラマーにはそれほどでもない
C++は難しく複雑だが、よりモダンな言語を使えるのは新鮮
Godotに触れられていないことに驚いた
自分の2.5DレイキャスターエンジンをRustで作り直したい