Sobre o projeto

Prowl é um motor de jogo 3D de código aberto escrito em C# puro no .NET mais recente e lançado sob a licença MIT. É explicitamente inspirado no Unity: mantém um editor e uma API de scripting semelhantes, usa uma arquitetura de componentes GameObject e MonoBehaviour e visa tornar a portabilidade de projetos Unity o mais simples possível, mantendo-se pequeno e personalizável (KISS). O projeto está atualmente em 1.0-preview após uma reescrita completa do editor, renderizador, física, áudio e UI; projetos de versões anteriores não são compatíveis e não há caminho de migração, e mais alterações disruptivas são possíveis antes do 1.0. Editor e fluxo de trabalho: um editor completo oferece Scene View, Hierarchy, Inspector, Project Browser, Console e Game View, com editores personalizados de componentes/propriedades/cena, gizmos de transformação (mover, girar, escalar), desfazer/refazer, painéis encaixáveis e redimensionáveis com persistência de layout, arrastar e soltar, seleção múltipla, busca/filtragem, miniaturas de assets e pré-visualizações 3D, editores de curvas de animação e gradientes, atalhos reconfiguráveis, temas, teste de jogo dentro do editor e hot-reloading de scripts. O editor está localizado em inglês, alemão, espanhol, francês, italiano, japonês, coreano, polonês, português, russo, turco e chinês. Plugins gerenciados e nativos com definições de assembly são suportados. O runtime é totalmente independente do editor, então um jogo pode referenciá-lo diretamente e ser distribuído sem dependência do editor. Renderização: backend OpenGL via Silk.NET com thread de renderização dedicada e pipeline extensível (pipelines personalizados suportados). O pipeline padrão de iluminação forward usa um pré-passo de G-buffer fino (profundidade, normais, movimento, rugosidade, metálico). Oferece HDR e fluxo de trabalho PBR metálico com mapas de albedo, normal, superfície e emissão; renderizadores de malha e malha esqueletal com animação de ossos e blendshapes; line renderer; sprites com recorte em grade, isométrico e automático baseado em alfa, além de um editor de sprites; render textures e Texture3D; GPU instancing e frustum culling. A iluminação cobre luzes pontuais, spot e direcionais com shadow mapping, cascaded shadow maps para luzes direcionais (até quatro cascatas), sombras cubemap para luzes pontuais e um atlas de sombras com empacotamento dinâmico. O pós-processamento inclui tonemapping HDR (ACES, Reinhard, Uncharted, Filmic, Melon, AgX), bloom, FXAA, TAA, SMAA, GTAO, SSR estocástico, profundidade de campo bokeh, névoa volumétrica e efeitos cinematográficos. Também presentes: transparência, grab pass com consciência de profundidade para refração/ondulação de calor/vidro fosco, skyboxes procedurais/cubemap/gradiente, sistema de terreno com LOD quadtree, pintura de heightmap e splatmap, grama com GPU instancing, renderização de árvores com distância LOD, buracos e um editor de terreno dedicado, além de um sistema de partículas com GPU instancing, módulos de emissão e ao longo da vida, colisão e animação UV em espaço local ou mundial. Uma linguagem de shader personalizada suporta #include, multi-pass e keywords/variantes de shader; desdobramento UV e um lightmapper progressivo com light probes baked são incluídos. A física usa Jitter Physics 2: colliders de caixa, esfera, cápsula, cilindro, cone, casco convexo, malha, modelo e terreno; um wheel collider baseado em raycast com suspensão e aderência baseada em deslizamento; muitas juntas e restrições (ball socket, hinge, hinge angle, fixed angle, cone limit, distance limit, twist angle, prismatic, universal, point on line, point on plane, motores angulares e lineares); um character controller; volumes de gatilho; camadas de colisão e filtragem LayerMask; e APIs de raycasting e consulta de formas. O áudio usa MiniAudio com áudio 3D espacial incluindo atenuação e Doppler, suporte a WAV/MP3/OGG/FLAC, cadeia de efeitos (delay, distorção, filtro biquad, reverb, phaser) e implementações personalizadas de IAudioEffect. Outros sistemas: serialização via Prowl.Echo; tags e camadas; cenas com névoa e iluminação ambiente; prefabs com aninhamento, aplicar/reverter/quebrar instância e rastreamento de overrides; configurações de projeto; compilação de scripts via dotnet build; sistema de ações de entrada com composições e processadores, assets .inputactions e um editor dedicado, fases de ação e bindings de teclado/mouse/gamepad; UI baseada em GameObject incluindo UI em espaço mundial com layout orientado por RectTransform, botões, sliders, grupos de layout e manipuladores de arrastar e soltar; Prowl Actions para callbacks persistentes configuráveis no Inspector; e uma biblioteca matemática com matrizes (Float4x4), quatérnions, Transform2D e formas como AABB, bounds, frustum, cone, ray, plane, line segment e rect. O pipeline de assets usa referências baseadas em GUID com arquivos meta, cache de importação e monitoramento de arquivos para reimportação automática, importadores personalizados via atributos, sub-assets com GUIDs determinísticos, rastreamento de dependências diretas e reversas e carregamento em threads. Os formatos suportados incluem modelos GLTF, GLB, OBJ e FBX; texturas PNG, JPG, BMP, TGA, PSD, HDR, DDS e EXR; e áudio WAV, MP3, OGG e FLAC. O sistema de build exporta aplicações independentes com arquivos de assets empacotados .prowlpak, exportando apenas os assets usados, perfis de build por plataforma e suporte para Windows, Mac e Linux. O código é testado com mais de 450 testes unitários no runtime e no editor. Para começar, é necessário .NET 10. Releases 1.0-preview pré-compiladas estão disponíveis, ou o repositório pode ser clonado e a solução aberta no Visual Studio 17.8+, VS Code ou Rider. O projeto é multiplataforma tanto para o editor quanto para builds exportadas, e o suporte da comunidade está disponível por meio de um servidor Discord.