14 ポイント 投稿者 GN⁺ 2025-01-09 | 9件のコメント | WhatsAppで共有
  • 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件のコメント

 
ahwjdekf 2025-01-11

所有権ルールに制約はあるものの、それを回避できるさまざまなデータ構造があり、どこかその場しのぎの感じがする:そう、まさにこれです。safeだと言いながらunsafeが必要で、不変だと言うのに可変にもなってしまって、もうめちゃくちゃ。いい気味です。Rustはうまくいくはずがありません。

 
dreamexist 2025-01-10

2Dゲームはどうですか?

 
aer0700 2025-01-10

Rustベースのゲームエンジンが出てこないと..

 
bbulbum 2025-01-10

ゲームエンジンなしでゲーム開発をすると、どんな言語を使ってもこんな感じになるんじゃないかと思いますね……(笑)

 
coremaker 2025-01-10

Rust は
堅牢なエンジン、コア、フレームワークなどを作るには適していますが、

アプリケーションレイヤーを構築する用途としては
そこまでおすすめしたいとは思いません。

 
bbulbum 2025-01-10

ニックネームを見ると、信頼度が上がりますね

 
gurugio 2025-01-10

私も Rust で短いながら業務をしてみたり、本も出そうと思って少し調べたりしていましたが、最近は確信がだんだん薄れてきている感じです。
Simple is best を固く信じているのですが、正反対の言語を見ているようでして。
とはいえ、カーネルにも入ったわけですし、なくなることはなさそうですが。

 
GN⁺ 2025-01-09
Hacker Newsの意見
  • Tiny Gladeは、Rustで書かれた印象的なゲームの例

    • Rustのゲーム開発は、実際のゲームよりも未完成のクレートを公開することに重きが置かれているように見える
  • Rustを学んでいる途中で、新しいチームに加わる予定

    • Rustは楽しいが、言語について強い意見を持てるほど上達してはいない
    • 言語設計はそれほどエレガントではないと思う
    • 制限の強い所有権ルールがある一方で、それを回避するさまざまなデータ構造があり、やや場当たり的に感じる
  • パターンマッチングと列挙型については、C++プログラマーは感銘を受けるかもしれないが、OCaml/Haskellプログラマーにはそれほどでもない

  • C++は難しく複雑だが、よりモダンな言語を使えるのは新鮮

    • GCの性能オーバーヘッドを許容できないなら、Rustがその隙間を埋めるが、それで話が終わるわけではない
    • 新しいプロジェクトを始める人にとって、モダンなC++より必ずしも良い選択なのかは疑問
  • Godotに触れられていないことに驚いた

    • GodotはGDExtensionを通じてRustを含む複数の言語をサポートしている
    • C++は公式サポートで、D、Go、Haxe、Rust、Swiftはコミュニティサポート
  • 自分の2.5DレイキャスターエンジンをRustで作り直したい

    • 現在の実装はCで、約500行のコードで構成されている
    • リファクタリングを試みたが、レイキャスターが壊れてしまった
    • Cは楽しいが、落とし穴が多い
    • 関連リポジトリへのリンクあり