14 Punkte von GN⁺ 2025-01-09 | 9 Kommentare | Auf WhatsApp teilen
  • 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

 
ahwjdekf 2025-01-11

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.

 
dreamexist 2025-01-10

Wie sieht es mit 2D-Spielen aus?

 
aer0700 2025-01-10

Es sollte eine Rust-basierte Game-Engine geben..

 
bbulbum 2025-01-10

Wenn man Spiele ohne Game-Engine entwickelt, fühlt es sich wahrscheinlich in jeder Sprache so an .. haha

 
coremaker 2025-01-10

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.

 
bbulbum 2025-01-10

Wenn ich den Nickname sehe, steigt die Glaubwürdigkeit.

 
gurugio 2025-01-10

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.

 
GN⁺ 2025-01-09
Hacker-News-Kommentar
  • Tiny Glade ist ein Beispiel für ein beeindruckendes Spiel, das in Rust geschrieben wurde

    • Bei der Spieleentwicklung mit Rust scheint der Fokus eher darauf zu liegen, unfertige Crates zu veröffentlichen, als auf tatsächlichen Spielen
  • Jemand lernt gerade Rust und wird bald einem neuen Team beitreten

    • Rust macht Spaß, aber die Person ist noch nicht gut genug, um eine starke Meinung zur Sprache zu haben
    • Das Sprachdesign wirkt nicht besonders elegant
    • Es gibt einschränkende Ownership-Regeln, aber auch verschiedene Datenstrukturen, um diese zu umgehen, was etwas nach einer Behelfslösung wirkt
  • 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

    • Wenn man sich den Performance-Overhead einer GC nicht leisten kann, füllt Rust diese Lücke, aber das ist nicht das Ende der Geschichte
    • Es ist fraglich, ob Rust für jemanden, der ein neues Projekt beginnt, zwangsläufig die bessere Wahl als modernes C++ ist
  • Verwunderung darüber, dass Godot nicht erwähnt wurde

    • Godot unterstützt über GDExtension mehrere Sprachen, darunter Rust
    • C++ wird offiziell unterstützt, während D, Go, Haxe, Rust und Swift von der Community unterstützt werden
  • Jemand möchte die eigene 2.5D-Ray-Caster-Engine in Rust neu schreiben

    • Die aktuelle Implementierung ist in C und besteht aus etwa 500 Zeilen Code
    • Es wurde versucht, ein Refactoring durchzuführen, dabei ging die Ray-Caster-Engine kaputt
    • C macht Spaß, hat aber viele Fallstricke
    • Ein Link zum zugehörigen Repository wurde bereitgestellt