Sobre el proyecto

Prowl es un motor de juego 3D de código abierto escrito en C# puro sobre el .NET más reciente y publicado bajo la licencia MIT. Está explícitamente inspirado en Unity: mantiene un editor y una API de scripting similares, utiliza una arquitectura de componentes GameObject y MonoBehaviour, y aspira a que portar proyectos de Unity sea lo menos complicado posible sin dejar de ser pequeño y personalizable (KISS). El proyecto se encuentra actualmente en 1.0-preview tras una reescritura completa del editor, el renderizador, la física, el audio y la UI; los proyectos de versiones anteriores no son compatibles y no hay ruta de migración, y es posible que se produzcan más cambios disruptivos antes de la 1.0. Editor y flujo de trabajo: un editor completo ofrece Scene View, Hierarchy, Inspector, Project Browser, Console y Game View, con editores personalizados de componentes/propiedades/vista de escena, gizmos de transformación (mover, rotar, escalar), deshacer/rehacer, paneles acoplables y redimensionables con persistencia de diseño, arrastrar y soltar, selección múltiple, búsqueda/filtrado, miniaturas de recursos y vistas previas 3D, editores de curvas de animación y degradados, atajos reasignables, temas, pruebas de juego dentro del editor y recarga en caliente de scripts. El editor está localizado en inglés, alemán, español, francés, italiano, japonés, coreano, polaco, portugués, ruso, turco y chino. Se admiten plugins gestionados y nativos con definiciones de ensamblado. El runtime es totalmente independiente del editor, por lo que un juego puede referenciarlo directamente y distribuirse sin dependencia del editor. Renderizado: un backend de OpenGL mediante Silk.NET con un hilo de renderizado dedicado y una pipeline extensible (se admiten pipelines personalizadas). La pipeline forward-lit predeterminada utiliza una pre-pasada de G-buffer ligera (profundidad, normales, movimiento, rugosidad, metallic). Ofrece HDR y flujo de trabajo PBR metallic con mapas de albedo, normales, superficie y emisión; renderizadores de malla y malla con skinning con animación de huesos y blendshapes; renderizador de líneas; sprites con rejilla, isométricos y corte automático de hojas basado en alfa, además de un editor de sprites; render textures y Texture3D; instanciación por GPU y frustum culling. La iluminación cubre luces puntuales, focales y direccionales con shadow mapping, mapas de sombras en cascada para luces direccionales (hasta cuatro cascadas), sombras cubemap para luces puntuales y un atlas de sombras con empaquetado dinámico. El post-procesado incluye tonemapping HDR (ACES, Reinhard, Uncharted, Filmic, Melon, AgX), bloom, FXAA, TAA, SMAA, GTAO, SSR estocástico, profundidad de campo bokeh, niebla volumétrica y efectos cinematográficos. También incluye: transparencia, una grab pass con reconocimiento de profundidad para refracción/calor distorsionado/cristal esmerilado, skyboxes procedurales/cubemap/degradado, un sistema de terreno con LOD por quadtree, pintura de heightmap y splatmap, hierba instanciada por GPU, renderizado de árboles con distancia LOD, agujeros y un editor de terreno dedicado, además de un sistema de partículas instanciado por GPU con emisión, módulos a lo largo de la vida, colisión y animación UV en espacio local o mundial. Un lenguaje de shaders personalizado admite #include, múltiples pasadas y palabras clave/variantes de shader; se incluyen UV unwrapping y un lightmapper progresivo con light probes horneadas. La física utiliza Jitter Physics 2: colisionadores de caja, esfera, cápsula, cilindro, cono, envolvente convexa, malla, modelo y terreno; un colisionador de rueda basado en raycast con suspensión y agarre basado en deslizamiento; muchas articulaciones y restricciones (ball socket, hinge, hinge angle, fixed angle, cone limit, distance limit, twist angle, prismatic, universal, point on line, point on plane, motores angulares y lineales); un controlador de personaje; volúmenes trigger; capas de colisión y filtrado LayerMask; y APIs de raycasting y consultas de formas. El audio utiliza MiniAudio con audio espacial 3D que incluye atenuación y Doppler, compatibilidad con WAV/MP3/OGG/FLAC, una cadena de efectos (delay, distorsión, filtro biquad, reverb, phaser) e implementaciones personalizadas de IAudioEffect. Otros sistemas: serialización mediante Prowl.Echo; tags y layers; escenas con niebla e iluminación ambiental; prefabs con anidamiento, aplicar/revertir/romper instancia y seguimiento de overrides; configuración del proyecto; compilación de scripts mediante dotnet build; un sistema de acciones de entrada con composites y procesadores, recursos .inputactions y un editor dedicado, fases de acción y enlaces de teclado/ratón/gamepad; UI basada en GameObject, incluida UI en espacio mundial con diseño controlado por RectTransform, botones, sliders, grupos de diseño y manejadores de arrastrar y soltar; Prowl Actions para callbacks persistentes configurables desde el inspector; y una biblioteca matemática con matrices (Float4x4), cuaterniones, Transform2D y formas como AABB, bounds, frustum, cono, rayo, plano, segmento de línea y rectángulo. La pipeline de recursos utiliza referencias basadas en GUID con archivos meta, caché de importación y vigilancia de archivos para reimportación automática, importadores personalizados mediante atributos, sub-recursos con GUID deterministas, seguimiento de dependencias directas e inversas y carga con hilos. Los formatos compatibles incluyen modelos GLTF, GLB, OBJ y FBX; texturas PNG, JPG, BMP, TGA, PSD, HDR, DDS y EXR; y audio WAV, MP3, OGG y FLAC. El sistema de compilación exporta aplicaciones independientes con archivos de recursos .prowlpak empaquetados, exportando solo los recursos usados, perfiles de compilación por plataforma y compatibilidad con Windows, Mac y Linux. El código base está probado con más de 450 pruebas en runtime y editor. Para empezar se requiere .NET 10. Hay versiones precompiladas 1.0-preview disponibles, o se puede clonar el repositorio y abrir la solución en Visual Studio 17.8+, VS Code o Rider. El proyecto es multiplataforma tanto para el editor como para las compilaciones exportadas, y hay soporte comunitario disponible a través de un servidor de Discord.