- Vor einem Jahr wurde ein Beitrag über die Entwicklung eines 3D-Spiels mit Rust veröffentlicht; dies ist ein Rückblick auf die Entwicklungen seither
- Weiterhin kommt der Grafik-Stack aus Rend3, WGPU und Vulkan zum Einsatz, und inzwischen funktioniert er ziemlich gut
- 2024 wurden einige größere Spieleprojekte, die mit Rust entwickelt wurden, eingestellt
- Manche Teams empfanden die Einschränkungen durch Ownership als belastend
- Andere Teams äußerten Unzufriedenheit, unter anderem wegen der Kompilierzeiten
- arewegameyet.rs wurde seit Juli 2024 nur noch selten aktualisiert, weshalb die dortigen Informationen tendenziell veraltet sind
- Rend3 wird nicht mehr weiterentwickelt, daher wird ein eigener Fork namens rend3-hp gepflegt
- Er wurde auf aktuelle Versionen von wgpu, winit und egui aktualisiert, und ein alter Race-Condition-Bug wurde behoben
- Wenn die GPU-Leistung maximal ausgereizt wird, tritt weiterhin ein CPU-Bottleneck auf. Auf einer NVidia 3070 reicht die CPU-Zeit bereits bei 25 % GPU-Auslastung nicht mehr aus
- Vulkan bindless und mehrere Vulkan-Queues sind erforderlich; möglicherweise wird wgpu dies 2025 unterstützen
- Wenn keine Maximalleistung nötig ist, funktioniert dieser Stack angemessen
- Es gab andere Rendering-Projekte wie Orbit und Renderling, sie werden jedoch nicht aktiv gepflegt
- Renderling hat noch am ehesten Potenzial, ist aber noch nicht einsatzbereit und wird nur von einer Person entwickelt
- Bei 3D-Arbeit mit Rust geht sehr viel Zeit in die direkte Pflege der unteren Schichten des Grafik-Stacks
- Wenn sich APIs von winit, wgpu oder egui ändern, muss alles angepasst und jede beschädigte Stelle repariert werden
- Wenn sich eine Komponente ändert, dauert es 1–2 Monate, bis die anderen nachgezogen haben
- Ein häufiges Problem im Rust-Ökosystem: Wenn statt sicherer Rust-Syntax eigene Allokationsverfahren verwendet werden, werden Bugs in Multithreading-Szenarien schwer auffindbar
- Grenzen der Rendering-Architektur
- Die meisten Renderer verwalten räumliche Informationen nicht separat und verwenden oft eine Struktur, bei der für jede Lichtquelle alle Objekte berechnet werden (O(N*M))
- Für große Szenen ist ein Konzept zur Raumaufteilung (scene graph) nötig, was schnell zu Strukturen auf Game-Engine-Niveau führt (z. B. Bevy)
- Bevy nutzt mit seinem eigenen ECS-System Rusts Ownership-Modell nicht in vollem Umfang und hat den Nachteil, den Bevy-Ansatz zu erzwingen
- Fazit: Komplexe 3D-Arbeit mit Rust ist möglich, erfordert aber viel Aufwand
9 Kommentare
Es gibt zwar einschränkende Ownership-Regeln, aber auch verschiedene Datenstrukturen, mit denen man sie umgehen kann, was etwas wie eine Behelfslösung wirkt: Genau das ist es. Es soll sicher sein, aber dann braucht man
unsafe, es soll unveränderlich sein, aber dann wird es doch veränderlich, alles ist durcheinander. Geschieht Rust recht. Rust kann gar nicht erfolgreich sein.Wie sieht es mit 2D-Spielen aus?
Es sollte eine Rust-basierte Game-Engine geben..
Wenn man Spiele ohne Game-Engine entwickelt, fühlt es sich wahrscheinlich in jeder Sprache so an .. haha
Rust eignet sich
zwar gut, um robuste Engines, Cores und Frameworks zu bauen,
aber für den Aufbau der Application Layer
würde ich es nicht unbedingt empfehlen.
Wenn ich den Nickname sehe, steigt die Glaubwürdigkeit.
Ich habe auch kurz beruflich mit Rust gearbeitet und ein wenig recherchiert, weil ich sogar überlegt hatte, ein Buch darüber zu veröffentlichen, aber in letzter Zeit habe ich das Gefühl, dass meine Überzeugung immer mehr schwindet.
Ich glaube fest an „Simple is best“, aber es wirkt, als würde ich eine gegensätzliche Sprache betrachten.
Da es inzwischen wohl auch im Kernel angekommen ist, wird es vermutlich nicht einfach verschwinden.
Hacker-News-Kommentar
Tiny Glade ist ein Beispiel für ein beeindruckendes Spiel, das in Rust geschrieben wurde
Jemand lernt gerade Rust und wird bald einem neuen Team beitreten
C++-Programmierer könnten von Pattern Matching und Enum-Typen beeindruckt sein, aber auf OCaml-/Haskell-Programmierer wirkt das eher nicht besonders eindrucksvoll
C++ ist schwierig und komplex, aber die Möglichkeit, eine modernere Sprache zu verwenden, wirkt erfrischend
Verwunderung darüber, dass Godot nicht erwähnt wurde
Jemand möchte die eigene 2.5D-Ray-Caster-Engine in Rust neu schreiben