2020/05/29 に公開 1862 views

このエピソードについて

@spring_raining が @inoutch に、 Rust でゲームフレームワークの開発を始めた話を聞きました。

inoutch

  • Front-End Dev 1
  • LINE NEWS
  • ゲーム制作が趣味であり、過去にも Kotlin でゲームフレームワークを開発したことがある

なにをした

Rustでのゲームフレームワークの開発。GWではグラフィック部分を中心に実装。

https://github.com/inoutch/tearchan/tree/workspace-base

テーマの選定理由

作りたいゲームがあり以下の条件を探していた。

  • スマートフォン向けに1つのコードを使いませるようなクロスプラットフォーム開発(デバッグしやすいようデスクトップも含む)
  • SimCityのようなリアルタイムシミュレーションを作りたく、ハードウェア制限下で最大限の動的オブジェクト数を扱えるようにパフォーマンス・チューニングできるようなフレームワーク
  • 沢山のオブジェクトを安全容易に開発できる

候補としてWebViewを利用する系かKotlinかで検討していた。パフォーマンス的にネイティブの方が良く、KotlinはKotlin/Nativeを利用するとネイティブバイナリコードを生成できることから、こちらを利用する方針で以前までゲームフレームワークを開発していた。 しかし、Kotlinによるゲーム開発のしやすさはあれど、沢山の動的オブジェクトを扱う場合に、行列計算やメモリコピーによる負荷は無視できず、よりタイトに管理できる仕組みを模索していた。 そこでRustではこれらすべてを解決できる可能性があり、GW期間中に学習も含めてゲームフレームワークの開発に乗り出した。

面白いポイント

gfx-rs

iOSでOpenGLが非推奨になった今、グラフィック系のクロスプラットフォームライブラリはOpenGLを避けるようになってきた。OpenGLの後継としてKronos Groupが提案したのがVulkan APIで、クロスプラットフォームに対応し、よりGPUハードウェアに最適化されたかたちでAPIを提供している。 しかし、AppleのみがMetalという独自のグラフィックAPIを提供するようになり、クロスプラットフォームの均衡が崩れた。gfx-rsはそれら別々の次世代グラフィックAPIを抽象化したAPIとして提供し、コンパイル時にバックエンドを実行と実装コストなく切り替えることができる。 実はgfx-rsはWebGPUの実装のベースとなっている技術で、フロントエンドエンジニアとしてはWebGPUを触る上でAPIアーキテクチャの理解にもなる(VulkanライクなためVulkanを理解するのでも良いかも)。

参照

https://github.com/gfx-rs/gfx https://github.com/gfx-rs/wgpu

Refs

  • BGM&SE
    • 魔王魂/騒音のない世界/OtoLogic