14 puntos por GN⁺ 2025-01-09 | 9 comentarios | Compartir por WhatsApp
  • Hace un año escribió sobre desarrollar un juego 3D con Rust, y esta es su revisión de cómo ha evolucionado todo desde entonces durante un año
  • Sigue usando la pila gráfica de Rend3, WGPU y Vulkan, y actualmente funciona bastante bien
  • En 2024, algunos grandes proyectos de juegos que se estaban desarrollando con Rust fueron cancelados
    • Hubo equipos a los que les resultaron pesadas las restricciones de propiedad (ownership)
    • También hubo equipos que expresaron molestias por los tiempos de compilación, entre otras razones
  • arewegameyet.rs ha tenido pocas actualizaciones desde julio de 2024, por lo que la información relacionada tiende a quedarse desactualizada
  • Rend3 dejó de desarrollarse, así que mantiene directamente un fork propio llamado rend3-hp
    • Lo actualizó para adaptarlo a las versiones más recientes de wgpu, winit y egui, y corrigió un viejo bug de condición de carrera
    • Sigue existiendo un problema de cuello de botella en CPU cuando se intenta exprimir al máximo el rendimiento de la GPU. En una NVidia 3070, el tiempo de CPU se agota cuando la carga de la GPU está en 25%
    • Se necesitan bindless de Vulkan y varias colas de Vulkan, y es posible que wgpu lo soporte en 2025
    • Si no se necesita el máximo rendimiento, esta pila funciona razonablemente bien
  • Hubo otros proyectos de renderizado como Orbit y Renderling, pero no se mantienen activamente
    • Renderling es el que todavía parece tener algo de potencial, pero aún no está listo para usarse y solo tiene un desarrollador
  • Al trabajar en 3D con Rust, consume mucho tiempo mantener directamente la parte baja de la pila gráfica
    • Cada vez que winit, wgpu o egui cambian sus APIs, hay que adaptarse y corregir todo lo que se rompe
    • Cuando uno cambia, a los demás les toma entre 1 y 2 meses ponerse al día
  • Un problema frecuente en el ecosistema Rust es que, si se usan esquemas de asignación propios en lugar de la sintaxis segura de Rust, se vuelve difícil encontrar bugs en multihilo
  • Limitaciones de la estructura de renderizado
    • La mayoría de los renderers no administran la información espacial por separado, y suelen usar una estructura que realiza cálculos para todos los objetos por cada fuente de luz (O(N*M))
    • Para manejar escenas grandes se necesita el concepto de partición espacial (scene graph), y eso lleva al problema de tener que ir hacia una estructura de nivel game engine (por ejemplo, Bevy)
    • Bevy no aprovecha mucho el modelo de propiedad de Rust debido a su propio sistema ECS, y tiene la desventaja de imponer la forma de trabajar de Bevy
  • En conclusión, hacer trabajo 3D complejo con Rust es posible, pero requiere mucho esfuerzo

9 comentarios

 
ahwjdekf 2025-01-11

Aunque hay reglas de propiedad restrictivas, existen varias estructuras de datos para rodearlas, así que da una sensación algo improvisada: sí, de eso se trata. Dice que es seguro, pero necesita unsafe, y dice que es inmutable, pero al final también se vuelve mutable; es un desorden total. Bien merecido. Rust no puede tener éxito.

 
dreamexist 2025-01-10

¿Y los juegos 2D?

 
aer0700 2025-01-10

Tiene que salir un motor de juegos basado en Rust...

 
bbulbum 2025-01-10

Supongo que desarrollar un juego sin motor se siente así, sin importar qué lenguaje uses.. jaja

 
coremaker 2025-01-10

Rust es adecuado para crear
engines, núcleos, frameworks y similares robustos, pero

no lo recomendaría mucho
para construir la capa de aplicación.

 
bbulbum 2025-01-10

Viendo el apodo, me inspira más confianza.

 
gurugio 2025-01-10

Yo también trabajé, aunque fuera brevemente, con Rust y hasta investigué un poco con la idea de publicar un libro, pero últimamente siento que mi convicción se debilita cada vez más.
Creo firmemente que simple is best, pero siento como si estuviera viendo un lenguaje que va en la dirección opuesta.
De todos modos, ahora que incluso llegó al kernel, no parece que vaya a desaparecer.

 
GN⁺ 2025-01-09
Comentarios en Hacker News
  • Tiny Glade es un ejemplo impresionante de un juego escrito en Rust

    • Parece que el desarrollo de juegos en Rust está más enfocado en publicar crates incompletos que en juegos reales
  • Está aprendiendo Rust y se unirá a un nuevo equipo

    • Rust es divertido, pero no tiene suficiente nivel como para tener opiniones fuertes sobre el lenguaje
    • Cree que el diseño del lenguaje no es tan elegante
    • Tiene reglas de propiedad restrictivas, pero hay varias estructuras de datos para rodearlas, lo que da una sensación algo improvisada
  • Los programadores de C++ pueden quedar impresionados por el pattern matching y los tipos enum, pero para programadores de OCaml/Haskell no resultan tan impresionantes

  • C++ es difícil y complejo, pero poder usar un lenguaje más moderno se siente refrescante

    • Si no puedes asumir el overhead de rendimiento de un GC, Rust llena ese hueco, pero esa no es toda la historia
    • Se pregunta si para alguien que empieza un proyecto nuevo realmente es una mejor opción que C++ moderno
  • Le sorprende que no se haya mencionado Godot

    • Godot soporta varios lenguajes, incluido Rust, a través de GDExtension
    • C++ tiene soporte oficial, y D, Go, Haxe, Rust y Swift cuentan con soporte de la comunidad
  • Quiere rehacer su propio motor Ray-caster 2.5D en Rust

    • La implementación actual está hecha en C y consta de unas 500 líneas de código
    • Intentó refactorizarlo, pero el Ray-caster se rompió
    • C es divertido, pero tiene muchas trampas
    • Comparte un enlace al repositorio relacionado