Prisvector Engine
Motor de juego C++20 con ECS, deferred rendering y editor.
Prisvector es un motor de juego completo en C++20, no una demo de render. Tiene ventana, ECS, renderer, pipeline de assets y un editor con paneles acoplables todo escrito desde cero sobre OpenGL 4.5 moderno, EnTT para el sistema de entidades y un envoltorio fino alrededor de GLFW y GLAD.
Pipeline de render
El renderer es diferido, no directo: la geometría escribe en un G-Buffer (albedo, normales, material) y un segundo pase resuelve las luces. Así el coste de iluminación es proporcional a los píxeles en pantalla, no a la complejidad de la escena.
- G-Buffer pass — framebuffer MRT con normal, albedo, metallic-roughness y profundidad.
- Lighting pass — PBR (Cook-Torrance) con luces direccionales, puntuales y focales.
- Shadow pass — Cascaded Shadow Maps para direccionales; atlas para focales.
- Particle pass — dispatch de compute shader para millones de partículas; draw instanciado de vuelta a la escena.
- Post-processing — HDR tonemapping (tipo ACES), gamma, hueco para bloom futuro.
ECS con scheduling por fases
Los sistemas no corren en un bucle plano. El scheduler los ejecuta en 9 fases nombradas (PreUpdate, Input, Physics, Update, LateUpdate, PreRender, Render, PostRender, Cleanup) para que las dependencias sean explícitas y el orden determinista. EnTT aporta almacenamiento denso e iteración rápida.
// Registro típico de sistemas
scheduler.register_system<MovementSystem>(SystemPhase::Update);
scheduler.register_system<CameraSystem>(SystemPhase::LateUpdate);
scheduler.register_system<ShadowSystem>(SystemPhase::PreRender);
scheduler.register_system<DeferredRenderSystem>(SystemPhase::Render);
Editor
La sandbox incluye un editor estilo Unity:
- Layout dockable vía la rama docking de Dear ImGui.
- Paneles independientes: jerarquía, inspector, viewport, consola, asset browser.
- Gizmos de transformación (ImGuizmo) con snapping en grid y por pasos.
- Play mode que serializa la escena al arrancar y restaura al parar.
- Cámara de editor con orbit/pan/zoom tipo Maya/Blender (Alt + arrastre).
Qué tiene de interesante
- No hay framework de render debajo — cada bind de VAO, cada update de uniform es código mío.
- Hot-reload de shaders: edita un GLSL y el motor recompila sin perder el estado de la escena.
- Dependencias externas vía
CMake FetchContent, así que un clon limpio +cmake --buildproduce el editor funcionando.