Após um ano de desenvolvimento, o primeiro lançamento do novo motor de jogo aberto Ambient foi apresentado. O motor oferece um runtime para criar jogos multiplayer e aplicativos 3D, compiláveis para WebAssembly e usando a API WebGPU para renderização. O código é escrito em Rust e distribuído sob a licença MIT.
A principal tarefa no desenvolvimento do Ambient é fornecer ferramentas que simplifiquem a criação de jogos multiplayer e tornem seu desenvolvimento tão fácil quanto o de projetos para um único jogador. O motor é inicialmente focado na criação de um runtime universal que suporte o desenvolvimento de jogos e aplicativos em qualquer linguagem de programação que possa ser compilada para código intermediário WebAssembly. No entanto, na primeira versão, apenas o suporte ao desenvolvimento em Rust foi implementado.
Principais características do novo motor:
- Suporte transparente para interações de rede. O motor combina funções de cliente e servidor, fornecendo todos os componentes necessários para criar a lógica de cliente e servidor, além de sincronizar automaticamente o estado do servidor nos clientes. Uma modelagem de dados comum é utilizada tanto do lado do cliente quanto do servidor, facilitando a transferência de código entre o backend e o frontend.
- Execução de cada módulo em seu próprio ambiente isolado, permitindo limitar a influência de código não confiável. O encerramento abrupto de um módulo não causa o encerramento abrupto de todo o aplicativo.
- Arquitetura orientada a dados. Fornecimento de modelo de dados baseado em um sistema de componentes que pode ser manipulado por cada módulo WASM. Uso do padrão de design ECS (Entity Component System). Armazenamento de dados de todos os componentes em um banco de dados centralizado, servidorcujas informações são automaticamente replicadas ao cliente, que pode expandir os dados levando em conta o estado local.
- Possibilidade de criar módulos Ambient em quaisquer linguagens de programação que possam ser compiladas para WebAssembly (atualmente, apenas Rust é suportado).
- Geração de arquivos executáveis universais que podem ser executados em Windows, macOS e Linux, funcionando tanto como cliente quanto como servidor.
- A possibilidade de definir seus próprios componentes e "conceitos" (coleções de componentes). Em projetos que utilizam os mesmos componentes e conceitos, a portabilidade e o compartilhamento de dados são garantidos, mesmo que esses dados não sejam especificamente projetados para uso em projetos específicos.
- Suporte para compilação de recursos em diferentes formatos, incluindo .glb e .fbx. Possibilidade de carregamento em streaming de recursos pela rede — o cliente pode obter todos os recursos necessários ao se conectar ao servidor (é possível começar a jogar sem esperar o carregamento completo de todos os recursos). Suportados os formatos de modelos FBX e glTF, diversos formatos de áudio e imagens.
- Sistema avançado de renderização que utiliza GPU para acelerar a saída e suporta execução de recorte por área de visibilidade e troca de níveis de detalhe do lado da GPU. Utilização por padrão de renderização fisicamente correta (PBR), suporte a animação e sombras em cascata.
- Suporte à simulação de processos físicos baseada no motor PhysX.
- Sistema de construção de interfaces de usuário, semelhante ao React.
- Sistema unificado de entrada, independente da plataforma atual.
- Sistema de som espacial com filtros plugáveis.
O desenvolvimento ainda está na fase alpha. Entre as funcionalidades ainda não implementadas, destacam-se a possibilidade de execução na web, API do cliente, API para gerenciamento de multithreading, biblioteca para criação de interfaces de usuário, API para uso de shaders personalizados, suporte a som, carregamento e salvamento de componentes ECS (Sistema de Componente de Entidade), recarregamento de recursos em tempo real, escalonamento automático. servidores, editor para a criação colaborativa de mapas e cenas de jogos.

Fonte: opennet.ru
