- Há 1 ano, o autor escreveu sobre desenvolver um jogo 3D com Rust e, desde então, acompanhou como as coisas evoluíram ao longo desse período
- Continua usando a stack gráfica Rend3, WGPU e Vulkan, e atualmente ela funciona razoavelmente bem
- Em 2024, alguns grandes projetos de jogos em Rust foram descontinuados
- Houve equipes que consideraram as restrições de ownership pesadas demais
- Também houve equipes que reclamaram de pontos como tempo de compilação
- O arewegameyet.rs quase não é atualizado desde julho de 2024, então as informações relacionadas tendem a ficar defasadas
- Como o Rend3 teve o desenvolvimento interrompido, o autor mantém diretamente um fork chamado rend3-hp
- Foi atualizado para acompanhar versões recentes de wgpu, winit, egui etc., e um bug antigo de race condition foi corrigido
- Ainda existe o problema de gargalo na CPU quando se tenta extrair o máximo da GPU. Em uma NVidia 3070, o tempo de CPU se esgota quando a carga da GPU está em 25%
- São necessários o bindless do Vulkan e várias filas do Vulkan, e há chance de o wgpu dar suporte a isso em 2025
- Se não for necessário desempenho máximo, essa stack funciona de forma adequada
- Havia outros projetos de renderização, como Orbit e Renderling, mas eles não estão sendo mantidos ativamente
- O Renderling ainda parece ter algum potencial, mas ainda não está pronto para uso e há apenas um desenvolvedor
- Ao trabalhar com 3D em Rust, gasta-se muito tempo mantendo diretamente a camada inferior da stack gráfica
- Sempre que winit, wgpu, egui etc. mudam a API, é preciso acompanhar e corrigir tudo o que quebra
- Quando um muda, os outros levam de 1 a 2 meses para alcançar
- Um problema frequente no ecossistema Rust é que, ao usar esquemas próprios de alocação em vez da sintaxe segura de Rust, fica difícil encontrar bugs em multithread
- Limitações da estrutura de renderização
- A maioria dos renderizadores não gerencia separadamente as informações espaciais e costuma usar uma estrutura que realiza cálculos para todos os objetos para cada luz (O(N*M))
- Para lidar com cenas de grande escala, é necessário o conceito de particionamento espacial (scene graph), o que acaba levando ao problema de precisar de uma estrutura no nível de uma game engine (por exemplo, Bevy)
- O Bevy, com seu próprio sistema ECS, não aproveita muito o modelo de ownership do Rust e tem a desvantagem de impor a forma de trabalhar do Bevy
- Em resumo, é possível fazer trabalhos 3D complexos com Rust, mas isso exige muito esforço
9 comentários
Embora existam regras de posse restritivas, há várias estruturas de dados para contorná-las, o que passa uma sensação meio improvisada: isso mesmo, é exatamente isso. Dizem que é seguro, mas precisa de
unsafe; dizem que é imutável, mas acaba sendo mutável também, uma bagunça total. Bem feito. Rust não tem como dar certo.E os jogos 2D?
Precisamos de um engine de jogos baseado em Rust..
Acho que, ao desenvolver um jogo sem uma engine, a sensação seria essa independentemente da linguagem usada... hehe
Rust é
adequado para criar engines, núcleos e frameworks robustos, mas
para construir a camada de aplicação,
não é algo que eu recomendaria tanto.
Pelo apelido, a credibilidade aumenta.
Eu também cheguei a trabalhar um pouco com Rust e até pesquisei para tentar lançar um livro, mas hoje em dia tenho a sensação de que minha convicção está diminuindo aos poucos.
Acredito firmemente que simple is best, mas parece que estou vendo uma linguagem oposta a isso.
De qualquer forma, como ela até entrou no kernel, não parece que vá desaparecer.
Comentários do Hacker News
Tiny Glade é um exemplo impressionante de jogo escrito em Rust
Estou aprendendo Rust e vou entrar em uma nova equipe
Programadores de C++ podem ficar impressionados com pattern matching e tipos enum, mas para programadores de OCaml/Haskell isso não é tão impressionante
C++ é difícil e complexo, mas é revigorante poder usar uma linguagem mais moderna
Surpreso por Godot não ter sido mencionado
Quero refazer meu próprio engine 2.5D de ray-casting em Rust