- 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
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.¿Y los juegos 2D?
Tiene que salir un motor de juegos basado en Rust...
Supongo que desarrollar un juego sin motor se siente así, sin importar qué lenguaje uses.. jaja
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.
Viendo el apodo, me inspira más confianza.
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.
Comentarios en Hacker News
Tiny Glade es un ejemplo impresionante de un juego escrito en Rust
Está aprendiendo Rust y se unirá a un nuevo equipo
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
Le sorprende que no se haya mencionado Godot
Quiere rehacer su propio motor Ray-caster 2.5D en Rust