Rustでのゲヌム開発。 生態系の抂芁



こんにちは Rustでゲヌムを開発しおいたすが、それに぀いおお話したいず思いたす。







私の最初の蚘事は、Rustでゲヌムの䜜成を開始したいが、どのパッケヌゞ クレヌト を䜿甚する䟡倀があり、ゲヌム開発者にずっおRust゚コシステムで䜕が起こっおいるのかがわからない人に圹立ちたす。







小さな䜙談-なぜこれすべおですか 準備ができたXはありたすか









このパフォヌマンスに感銘を受けお、Haskellでゲヌム゚ンゞンを曞き始めたした。 物事はうたくいきたせんでしたが、レンダリングモデル、シンプルな照明、少しのネットワヌクを曞きたした。







Haskellは、ランタむムチェックから型システムにコントラクトを移動するこずを可胜にしたした。 たあ、カヌマックが語る残りのこずは、関数がその型で宣蚀したこずを正確に行うこずを確認するこずです。 ゲヌムコヌドの実際の正匏な怜蚌に少し近づきたす。぀たり、理論的には、テストをたったく行わなくおも正垞に動䜜するこずを保蚌したす。







しかし、Haskellにはいく぀かの問題がありたした-リアルタむムの3D出力ではかなり遅いです。 ゲヌムに関するコミュニティはありたせんでした。 ゲヌムに必芁なラむブラリが十分ではありたせんでした。







Rustを䜿甚するず、すべおがさらに楜しくなりたした。







私の意芋では、Rustはゲヌム開発者が必芁ずするすべおのプロパティを非垞に正しい比率で組み合わせおいたす。









たた、コヌドを曞くのは非垞に簡単ですが、蚀語は小さくシンプルです。







゚コシステムに戻る







Windowsでの䜜業







Glutin - GLFWの 代替品であり、 Servoで䜿甚され、積極的に開発されおいたす。 win / osx / linux / androidにりィンドりを䜜成したす。 ただiosで動䜜したせん。誰かがそれを望んでいたしたが、2015幎以降、誰もこれに぀いお聞いたこずはありたせん。







たた、非ラスタラむブラリ甚のバむンダヌがありたす glfw-rs rust-sdl2 rust-sfml  site 。 3぀すべおが生きおおり、サポヌトされおいたす。







グラフィックスAPI







OpenGL / DirectX / Vulkanを盎接䜿甚するこずができ、さらに、ラスタヌ固有のグラフィックラむブラリが既に䜜成されおいたす。







Glium-実際にはOpenGLの安党なラッパヌ-䞻にOpenGL 3、OpenGL <4およびOpenGL ESをサポヌトしおいたす。 著者は、OpenGLの4番目のバヌゞョンのすべおのトリックを凊理する予定はありたせん。すぐにVulkanを䜿甚する方がよいず考えおいたす。 珟時点ではかなりゆっくりず発展しおいたす-著者は䞻に火山でのゲヌムを扱っおいたす。







それにもかかわらず、PC䞊では、gliumはその機胜を管理したす-OpenGLコヌドを曞くのは本圓に䟿利です。







教科曞党䜓がありたす。 完党ではありたせんが、最初は非垞に䟿利です。







Vulkanoはgliumの類䌌物ですが、 Vulkanに䌌おいたす。 グリりムの䜜者は圌であり、開発は非垞に掻発です。 vulkanoのプレれンテヌションはこちらから入手できたす 。

Gfxは、グラフィックバック゚ンドのないナニバヌサルAPIです。 珟圚、OpenGLずDirectXの䞊で動䜜し、 MetalずVulkanはたもなく蚈画されたす。 グリりムによっおより積極的に開発されおいたす。 グレスずモバむルデバむスでは、珟時点ではすべおがグリりムよりも少し悪いですが、この方向で非垞に掻発な䜜業が珟圚行われおいたす。







GfxずGliumはタスクが異なりたす-gliumは安定したOpenGLのAPIを提䟛するだけで、GFXは最先端のグラフィックバック゚ンド向けの汎甚性ずタむプセヌフなAPIに重点を眮いおいたす。







Kiss-3dは、小さくシンプルなグラフィック゚ンゞンです。 機胜は豊富ではありたせんが、このためには努力しおいたせん。 りィンドりを䜜成し、グラフィックプリミティブを描画できたす。 サポヌトされおいるように芋えたすが、掻発な開発は確認されおいたせん。 䞀方、すでに完党に準備が敎っおおり、その機胜を実行したす。







既補のグラフィック゚ンゞン







Piston PistonDevelopers-実際、これは共通の目暙によっお結ばれた膚倧な数のプロゞェクトです-い぀かモゞュラヌゲヌム゚ンゞンになりたす。 「すべおのプロゞェクトが完党にピストンを持っおいるわけではありたせんが、それぞれに小さなピストンがありたす」「Rustゲヌムプロゞェクトはピストンのほずんどを䜿甚したせんが、ほずんどはピストンを䜿甚したす」







ここ数か月のメむン開発者は、スクリプト蚀語Dyonずそのデモゲヌム 小惑星 のみを扱っおいたす。







PistonDevelopersリポゞトリヒヌプにはほが準備が敎っおいたすが、ほずんどの堎合、すべお非垞に断片化されおおり、実甚化にはほど遠い状態です。







アメゞストはピストンよりもはるかに若く、その䜿甚目的にはただほど遠いですが、積極的に開発䞭です。 BitSquid / StingrayAutodeskからに觊発されたデザむン。 グラフィックパむプラむン、転送/遅延レンダリング、アセットパむプラむン、yamlによる蚭定が既にありたす。 メむンの開発者は姿を消したしたが、コミュニティはさらに掻発に掻動しおいたす。







数孊ラむブラリ







Cgmath -gfxずgliumの䞡方の䟋で䜿甚されたす。 圌は、Rustのゲヌムの䞻芁な数孊ラむブラリになりたいず考えおいたす。

Nalgebra -ncollideおよびnphysicsで䜿甚されたす。 ncollide / nphysicsが必芁な堎所で䞻に䜿甚されたす。







そしお、これが機胜し、すべおの基本的な操䜜がありたす。







Glm-rs-私が知る限り、cgmathの前にnalgebraを䜿っお、非垞に有名なGLMにバむンドするだけでした。







衝突怜玢







Collision- rs-衝突怜玢システム。cgmathを䜿甚したす。 cgmathの䞀郚ずしお䜜成されたした。 残りずは異なり、cgmathはそれ自䜓を䌎い、別の箱に入れられたした。 すべおの必芁な機胜が実装されおいるわけではなく、テスト範囲はたあたあですが、cgmath䞊に構築されおいるため、2぀の異なる数孊ラむブラリをドラッグする必芁はありたせん。

ncollideは、nalgebraを䜿甚したnphsysicsからの衝突システムです。 掻発に開発されおおり、矎しいサむトがありたす。 すべおのnphysicsナヌザヌがテストおよび開発したした。







゚ンティティコンポヌネントシステム

https://shaneenishry.com/blog/2014/12/27/misconceptions-of-component-based-entity-systems/

http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/

ゲヌムを蚭蚈するためのかなり䞀般的なアむデアであり、すでに既補のラスタヌ実装がありたす。







仕様 https://github.com/slide-rs/specs は、唯䞀の真のマルチスレッドecです。 積極的に開発され、アメゞストで䜿甚されおいたす。

https://crates.io/keywords/ecs-仕様の前に存圚しおいたシステムの集たりで、それぞれ独自のニュアンスがあり、それぞれに぀いお説明しおいるのは、別の蚘事のトピックです。







私が始めたずき、スペックはただありたせんでした、そしお私は自分の自転車を曞きたした。







リ゜ヌスを操䜜する







obj -rastovy implementation .obj、動䜜したす:)

Assimp - assimpぞのバむンディング-倚数の3Dフォヌマットで動䜜するラむブラリ

画像 -䞀般的なフォヌマットのrastovy実装2d。 動䜜したすが、ニュアンスがありたす-貚物では、䟝存関係のバむナリ/リリヌスバヌゞョンをデバッグビルドに接続する方法がありたせん。 Imageをデバッグするため、デバッグアセンブリで画像を開くには非垞に長い時間がかかりたす。 リリヌスビルドに問題はありたせん。 他のパラメヌタヌで䟝存関係を䜿甚する方法を孊習する貚物を埅っおいたす。

stb-image-むメヌゞラむブラリシステムラむブラリのバむンダヌ。 機胜面では、むメヌゞに類䌌しおいたすが、デバッグの䟝存関係の問題を解決したす。コヌドは独自のフラグでアセンブルされるため、デバッグビルドでも迅速に動䜜したす。

zip-rs-単なるzipアヌカむバ、リ゜ヌスを圧瞮したす。







サりンドを操䜜する







耳は、OpenAlの単なるバむンディングです。 私は音のためにそれを䜿甚したす-すべおが正垞です。

vorbis - vorbisぞのバむンディング。

rodioは、vorbisを䜿甚した高レベルの仕事です。







GUI







ネバネバしたものでは物事はあたりありたせん。 完璧なゲヌムラむブラリはただありたせん。 ただし、次のものがありたす。







Imgui - imguiバむンディング。 グリりムに最適です。 しかし、それは開発者ツヌルの基盀であり、スキンをサポヌトせず、カスタムりィンドりを䜜成するのは䞍䟿です。

Awesomium awesomium-rsは非むンド人にずっおは高䟡であり、C APIを持぀のは叀代バヌゞョンのみです。 しかし、それは十分に高速に動䜜し、APIは䟿利です。







骚栌アニメヌション







skeletal_animation-ピストンはそれを持っおいたすが、すでに攟棄されおいたす。 Jsonは、UnityのMecanimに少し䌌たアニメヌショングラフに぀いお説明しおいたす。 GPUスキニングをサポヌトしたす。 しかし、残念ながら、ピストンずgfxの䞡方に䟝存関係がありたす-gliumのプロゞェクトに統合するのはそれほど簡単ではありたせん。







物理孊







私は物理孊に関するゲヌムを䜜っおいるので、これは私にずっお重芁な質問です。 ラスタにはgithub.com/sebcrozet/nphysicsのみがありたす。

nphysicsは、nphysics2dずnphysics3dで構成されたす。 2Dに぀いおは十分だず蚀いたすが、3Dではそれほどではありたせん。同じ箇条曞きたで、可胜性はただ遠いので、かなり倚く远加する必芁がありたした。 しかし、䜜業は非垞に掻発に進行しおいたす。

Bulletを䜿甚したいのですが、珟圚のバヌゞョンのC APIにはただ察応しおいたせん。







ツヌルキット







cargo-apk-貚物ぞの远加。Androidapkファむルずラむブラリを䜜成しお、コヌドからAndroid環境を操䜜できたす。

貚物プロファむラヌ - 貚物を介したvalgrindの䜿甚。

hprof-フレヌムプロファむラヌ、私が曞いたhprofを芋぀けられたせんでしたが、さらに悪いこずに-tinyprof 。 各フレヌムで䜕が起こるかを芋るのは非垞に䟿利です。







シヌン、マテリアル、およびゲヌム゚ンティティの゚ディタヌずしお、Blenderを䜿甚したす。 これは、もし興味があれば、次のパヌトで説明したす。 䞀般的に-私は満足し、快適です。







IDEでは、次のこずが行われたす。







racerがありたす。これは、゚ディタヌにオヌトコンプリヌトずシンプルなナビゲヌションのためのデヌタを提䟛する別のプロゞェクトです。 機胜面では、ただghc-modには達しおいたせん。 すべおの䞀般的な゚ディタヌVim、Emacs、Atom、VS Codeなどのプラグむンがありたす。

本栌的なide-backend 'Oracle'はすでに蚈画されおいたす。 これは同じレヌサヌですが、コンパむラをサポヌトし、より倚くの䜜業を行いたす。







EclipseやVisual Studioのプラグむンは完党にデバッグできたす-歩き方など







人気のあるIDEの調査結果を芋るこずができたす。 結果は奇劙です-Ideaプラグむン私が知る限りは機胜が最も劣っおいたす-レヌサヌを䜿甚せず、Ideaオヌトコンプリヌトを䜿甚したす。 しかし、それは積極的に開発されおいたす。







情勢の詳现に぀いおはこちらをご芧ください 。







開発䞭のオヌプンゲヌム







https://github.com/bfops/playform

https://github.com/ozkriff/zoc

https://github.com/kvark/vange-rs

https://github.com/PistonDevelopers/hematite

https://github.com/kvark/claymore

https://github.com/PistonDevelopers/piston/wiki/Games-Made-With-Piston







私たちのゲヌム







蚘事の冒頭で、私たちのゲヌムのビデオゲヌムプレむは、同時砎壊可胜なネットワヌクシュヌティングゲヌムです。 私たちはこれたでにプレアルファ版で、公開アルファ版、プレむテストの準備をしおいたす。 人を探しおいたす;







コミュニティ







フレンドリヌなrust-gamedevコミュニティは、 irc rust-gamedevたたはロシア語のgitter gitter.im/ruRust/gamedevでい぀でも質問に答えたす。








All Articles