14 pontos por GN⁺ 2025-01-09 | 9 comentários | Compartilhar no WhatsApp
  • 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

 
ahwjdekf 2025-01-11

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.

 
dreamexist 2025-01-10

E os jogos 2D?

 
aer0700 2025-01-10

Precisamos de um engine de jogos baseado em Rust..

 
bbulbum 2025-01-10

Acho que, ao desenvolver um jogo sem uma engine, a sensação seria essa independentemente da linguagem usada... hehe

 
coremaker 2025-01-10

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.

 
bbulbum 2025-01-10

Pelo apelido, a credibilidade aumenta.

 
gurugio 2025-01-10

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.

 
GN⁺ 2025-01-09
Comentários do Hacker News
  • Tiny Glade é um exemplo impressionante de jogo escrito em Rust

    • O desenvolvimento de jogos em Rust parece estar mais focado em lançar crates inacabadas do que jogos de verdade
  • Estou aprendendo Rust e vou entrar em uma nova equipe

    • Rust é divertido, mas ainda não sou bom o bastante para ter opiniões fortes sobre a linguagem
    • Acho que o design da linguagem não é tão elegante
    • Há regras de propriedade restritivas, mas existem várias estruturas de dados para contorná-las, o que passa uma sensação meio improvisada
  • 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

    • Se você não pode arcar com o overhead de desempenho de GC, Rust preenche essa lacuna, mas isso não é o fim da história
    • Fico em dúvida se ele é necessariamente uma escolha melhor do que C++ moderno para quem está começando um projeto novo
  • Surpreso por Godot não ter sido mencionado

    • Godot oferece suporte a várias linguagens, incluindo Rust, por meio de GDExtension
    • C++ tem suporte oficial, e D, Go, Haxe, Rust e Swift têm suporte da comunidade
  • Quero refazer meu próprio engine 2.5D de ray-casting em Rust

    • A implementação atual está em C e consiste em cerca de 500 linhas de código
    • Tentei refatorar, mas o ray-caster quebrou
    • C é divertido, mas tem muitas armadilhas
    • Link do repositório relacionado fornecido