Apresentando o Turian: um engine de jogo 3D em Zig puro
As engines de jogos costumam forçar você a escolher. Você pode ter a produtividade de um editor visual — hierarquia de cena, inspetor, assets do tipo arrastar e soltar — ou o controle e a previsibilidade de uma linguagem de sistemas. Escolha um.
O Turian recusa essa troca. Ele é um engine de jogo 3D baseada em componentes feita inteiramente em Zig, e hoje estamos lançando o seu primeiro site público na web.
Como isso começou
Quando a iniciativa MEGA4 começou, o plano era simples: criar um engine de jogo e um editor inspirados na Unity. Na época, o engine era escrita em C# e estava se aproximando do que se poderia chamar de uma versão v1.
Então por que o Zig?
A resposta honesta é mais simples do que qualquer justificativa técnica: eu queria aprendê-lo.
O que começou como pequenos experimentos explorando os recursos da linguagem Zig cresceu à medida que me vi reconstruindo partes do engine. Em determinado momento, a exploração paralela tornou-se séria o suficiente para eu decidir reconstruir o Turian inteiramente.
Uma coisa que facilitou muito essa transição foi a DVUI, uma biblioteca de GUI em Zig já existente. Em vez de passar meses criando um framework de interface de usuário para o editor do zero, pude começar a trabalhar nos recursos do editor desde o primeiro dia.
O que temos aqui hoje
O Turian chegou à sua primeira forma utilizável, a caminho do marco v0.1 · Hello Game (aproximadamente em paridade com o Godot 3):
- Um editor de verdade. O Turian Studio oferece uma hierarquia de cena, um inspetor, um navegador de assets e uma viewport 3D em tempo real alimentada por SDL3 GPU (Vulkan / Metal / D3D12) — tudo em uma única janela.
- Componentes são apenas structs. Adicione
pub const is_component = true;a qualquer struct em Zig e ela aparecerá no menu Add Component com seus campos públicos expostos no inspetor. O editor analisa o código-fonte real em Zig, não uma expressão regular (regex), de modo que comentários e compilação condicional nunca o atrapalham. - Descoberta de scripts em tempo real. Solte um arquivo
.zigna pastaassets/do seu projeto, clique em Refresh e seu componente estará disponível imediatamente. - Compilações em modo headless. O comando
turian-cli buildprepara seus assets e gera um único executável independente — o exato mesmo artefato que o editor produz, perfeito para CI (integração contínua).
Por que Zig?
Uma única linguagem, de ponta a ponta: o engine, o editor, a lógica do seu jogo e as ferramentas de build são todos em Zig. Sem ponte de script, sem custo de FFI, sem coletor de lixo. O que você escreve é o que a máquina executa — e seu jogo é distribuído como um único binário nativo que você pode entregar a um amigo sem que ele precise instalar mais nada.
A interoperabilidade do Zig com o C merece menção honrosa. O ecossistema de desenvolvimento de jogos foi construído sobre décadas de softwares em C e C++: APIs gráficas, engines de física, importadores de assets, sistemas de áudio. Ser capaz de consumir bibliotecas em C diretamente reduz a barreira para integrar soluções consagradas, deixando aberta a opção de substituir ou reescrever partes mais tarde.
O que o Zig muda
Mudar de um engine mais estabelecida para o Zig exige uma mudança de mentalidade. O Zig não tem classes, herança, interfaces, atributos ou reflexão (reflection) em tempo de execução da maneira como você pode estar acostumado. Em vez disso, ele enfatiza composição, explicitude e programação em tempo de compilação (comptime).
Comptime em vez de reflexão em tempo de execução. O sistema de componentes do Turian usa os recursos de tempo de compilação do Zig para inspecionar as definições de componentes e gerar integrações com o editor automaticamente. O editor descobre pub const is_component = true; analisando o código-fonte real em Zig — comentários, compilação condicional e formatação funcionam perfeitamente.
Gerenciamento explícito de memória. Diferentes sistemas usam diferentes estratégias de alocação dependendo de suas necessidades: alocadores temporários por quadro (frame allocators), alocadores de cena persistentes, arenas de carregamento de assets e assim por diante. Isso exige pensar com mais cuidado sobre a posse (ownership) de memória, mas o controle é valioso no código do engine.
A troca honesta
Há um porém sobre o qual vale a pena ser honesto: o Zig não tem uma ABI estável, então o engine não pode ser distribuída como uma biblioteca pré-compilada. Seu jogo é compilado junto com o código-fonte do engine. O SDK traz esse código-fonte; você fornece o compilador Zig. Em troca, não há surpresas de incompatibilidade de versão em tempo de execução.
Escolher o Zig também significa aceitar que muitas conveniências familiares ainda não existem. Recursos normalmente implementados com herança, interfaces e reflexão exigem abordagens diferentes construídas em torno de composição e programação em tempo de compilação. A linguagem é jovem, as ferramentas continuam melhorando e as melhores práticas ainda estão surgindo.
E, francamente, eu também estou aprendendo. Criar o Turian em Zig significa aprender junto com a comunidade, descobrir o que funciona, mudar de rumo quando necessário e, ocasionalmente, reconstruir sistemas que pareciam finalizados meses atrás. Essa incerteza faz parte do projeto.
Onde ele se encaixa no MEGA4
O Turian é o primeiro projeto do MEGA4 rodando em Zig. O plano é que seu editor acabe se tornando um plugin para o Gaya, tendo o Guinevere como a camada de GUI subjacente — a mesma arquitetura que alimenta o restante da iniciativa. O primeiro jogo real construído com ele será o Mystery.
Para onde ele está indo
O Turian é lançado em marcos (milestones), cada um representando um salto utilizável. Acompanhe o roadmap em tempo real no GitLab e, se quiser testá-lo agora, comece pelo Tutorial.
É um software livre sob a licença GPLv3 — sem limite de licenças, sem divisão de receitas, sem taxas por título de jogo. Nos vemos no editor.
#release#engine#mega4