AAA-class real-time 3D engine · Written from scratch · Mesh shader pipeline Motor 3D en tiempo real de clase AAA · Escrito desde cero · Pipeline de mesh shaders
MAura
Max Aura
A renderer that measures light in lux, lumens and kelvin. Un renderizador que mide la luz en lux, lúmenes y kelvin.
C++20, no engine framework underneath. One abstraction layer drives DirectX 12 and Vulkan interchangeably, geometry goes through a mesh shader pipeline, physics runs on Jolt, and gameplay is declared as data and decided in Lua. C++20, sin ningún framework de motor debajo. Una capa de abstracción mueve DirectX 12 y Vulkan de forma intercambiable, la geometría pasa por un pipeline de mesh shaders, la física corre sobre Jolt, y el juego se declara como datos y se decide en Lua.
Written with AI, and shaped so that games on it are written with AI too. How that works · Follow it day by day Escrito con IA, y diseñado para que los juegos que corran sobre él también se escriban con IA. Cómo funciona · Síguelo día a día
Not a decorative gradient. These are the black-body temperatures a light accepts in temperatureK, tinting its linear RGB colour the way a real source would.
No es un degradado decorativo. Son las temperaturas de cuerpo negro que admite una luz en temperatureK, y tiñen su color RGB lineal como lo haría una fuente real.
Everything here is a frame the engine rendered. Todo lo que ves es un fotograma que ha renderizado el motor.
Scenes authored in JSON, imported from Godot projects, or driven by Lua. No offline renders and no mock-ups. Escenas escritas en JSON, importadas de proyectos de Godot o movidas por Lua. Nada de renders offline ni maquetas.
The engine is written with AI. Games on it are meant to be too. El motor se escribe con IA. Los juegos que corran sobre él también.
This is not a label added afterwards. It decided the shape of the engine: what is native, what is data, and what units everything is expressed in. No es una etiqueta puesta después. Decidió la forma del motor: qué es nativo, qué son datos y en qué unidades se expresa todo.
An AI does not need C++ to make a game. It needs a scene file, a short script, and an honest list of what already exists. Una IA no necesita C++ para hacer un juego. Necesita un fichero de escena, un script corto y una lista honesta de lo que ya existe.
How it gets builtCómo se construye
Day to day, with an AI writing a large part of the implementation while a person decides the architecture, reviews every change and checks it against reference screenshots. Nothing ships because it compiled. It ships because the frame looked right. Día a día, con una IA escribiendo buena parte de la implementación mientras una persona decide la arquitectura, revisa cada cambio y lo compara con capturas de referencia. Nada entra por compilar. Entra porque el fotograma se ve bien.
A game is data, not codeUn juego son datos, no código
Roughly four fifths of a game is declared in a scene file: entities, colliders, lights, controllers. That is the shape an AI writes reliably, because there is no framework to learn and no frame loop to get right. Cerca de cuatro quintas partes de un juego se declaran en un fichero de escena: entidades, colisiones, luces, controladores. Esa es la forma que una IA escribe con fiabilidad, porque no hay framework que aprender ni bucle de fotograma que acertar.
The engine keeps the hard partsEl motor se queda con lo difícil
Kinematics, physics and collision are native and not negotiable. A script only decides and reacts. An AI never writes a gravity loop here, so it cannot get one wrong. La cinemática, la física y las colisiones son nativas y no se tocan. Un script solo decide y reacciona. Aquí una IA nunca escribe un bucle de gravedad, así que no puede equivocarse en uno.
Real units, so the AI can reasonUnidades reales, para que la IA razone
A bulb of 1600 lumens at 2700 kelvin, a body of 70 kilograms, a jump of 4 metres. A model knows what those mean from the world. It cannot guess what intensity 3.7 was supposed to be.
Una bombilla de 1600 lúmenes a 2700 kelvin, un cuerpo de 70 kilogramos, un salto de 4 metros. Un modelo sabe qué significa eso porque existe en el mundo. No puede adivinar qué pretendía ser intensity 3.7.
A contract the AI reads firstUn contrato que la IA lee primero
The engine ships a capabilities document that states exactly which components, systems and events exist, and says plainly what must not be rewritten in a script. The AI composes what is there instead of reinventing it badly. El motor lleva un documento de capacidades que dice exactamente qué componentes, sistemas y eventos existen, y deja claro qué no se debe reescribir en un script. La IA compone con lo que hay en vez de reinventarlo mal.
What is actually in the box. Lo que hay de verdad dentro.
Ten subsystems, each written against the layer below it and nothing above. Every line here describes code that runs today. Diez subsistemas, cada uno escrito contra la capa de abajo y contra nada de arriba. Cada línea describe código que funciona hoy.
Core & buildNúcleo y compilación
- Language
- C++20, x64 Windows as the primary platform. RAII throughout, explicit ownership, no mutable global state.C++20, x64 sobre Windows como plataforma primaria. RAII en todo, propiedad explícita y sin estado global mutable.
- Dependencies
- Every third-party library sits behind an owned boundary. DirectXMath becomes
Engine::Math, SDL3 becomesEngine::Platform, the graphics APIs becomeEngine::RHI.Cada librería de terceros queda encapsulada tras una frontera propia. DirectXMath esEngine::Math, SDL3 esEngine::Platformy las APIs gráficas sonEngine::RHI. - Toolchain
- CMake with presets, Ninja, MSVC. Dependencies resolved by vcpkg in manifest mode.CMake con presets, Ninja y MSVC. Dependencias resueltas por vcpkg en modo manifiesto.
- Text
- UTF-8 everywhere internally, converted to UTF-16 only at the operating system boundary.UTF-8 en todo el interior, convertido a UTF-16 solo en la frontera con el sistema operativo.
Graphics backendsBackends gráficos
- Backends
- DirectX 12 and Vulkan behind one interface, chosen at launch with
/renderer=DX12or/renderer=Vulkan. High-level code never names either API.DirectX 12 y Vulkan tras una sola interfaz, elegidos al arrancar con/renderer=DX12o/renderer=Vulkan. El código de alto nivel no nombra ninguna de las dos. - Shaders
- One HLSL source per shader, compiled two ways: D3DCompile for DirectX, DXC to SPIR-V for Vulkan. 20 shaders in the tree.Un solo HLSL por shader, compilado por dos caminos: D3DCompile para DirectX y DXC a SPIR-V para Vulkan. 20 shaders en el árbol.
- Synchronisation
- Fence-based, with frames in flight and validation layers enabled in Debug.Por fences, con frames en vuelo y capas de validación activas en Debug.
- Descriptors
- Shared descriptor heaps, which is what lets a city-sized scene bind thousands of textures in one frame.Heaps de descriptores compartidos, que es lo que permite a una escena del tamaño de una ciudad enlazar miles de texturas en un fotograma.
Mesh shadersMesh shaders
- Pipeline
- A full mesh shader path on both backends: DirectX 12 from mesh shader tier 1, Vulkan through
VK_EXT_mesh_shaderwith task and mesh stages. Support is detected per device.Camino completo de mesh shaders en los dos backends: DirectX 12 desde mesh shader tier 1, y Vulkan porVK_EXT_mesh_shadercon etapas de tarea y malla. El soporte se detecta por dispositivo. - Meshlets
- Geometry is cut at import into clusters of a few dozen triangles, each with its own bounding box and normal cone, and stored in the native format. No work at load time.La geometría se corta al importar en clusters de unas decenas de triángulos, cada uno con su caja y su cono de normales, y se guarda en el formato nativo. Sin trabajo al cargar.
- Why it is betterPor qué es mejor
- The old pipeline feeds the GPU one vertex at a time through fixed hardware. Here the GPU decides for itself what to draw: a task stage throws away whole clusters that face away or fall outside the frustum, so those triangles never reach the rasteriser. Fewer draw calls, no index-buffer bottleneck, and cost that scales with what is visible rather than with what exists.El pipeline clásico alimenta la GPU vértice a vértice por hardware fijo. Aquí la GPU decide por sí misma qué dibujar: una etapa de tarea descarta clusters enteros que miran hacia otro lado o caen fuera del frustum, así que esos triángulos nunca llegan al rasterizador. Menos llamadas de dibujo, sin cuello de botella en el índice, y un coste que escala con lo que se ve y no con lo que existe.
- VariantsVariantes
- Static meshlets, instanced meshlets, cone-culled meshlets and a skinned variant that transforms the cluster on the GPU, plus a compute pass for coarse culling.Meshlets estáticos, instanciados, con culling por cono, y una variante skinned que transforma el cluster en la GPU, más un paso de cómputo para el culling grueso.
- FallbackRespaldo
- Hardware without mesh shader support falls back to the classic vertex path, so the same scene still runs.El hardware sin soporte de mesh shaders cae al camino clásico de vértices, así que la misma escena sigue funcionando.
RenderingRender
- Materials
- Physically based, metallic-roughness: base colour, metallic, roughness, emissive, normal maps, alpha. Cull mode per material, double-sided where the art needs it.Basados en física, metallic-roughness: color base, metálico, rugosidad, emisivo, normales y alfa. Modo de culling por material, con doble cara donde el arte lo pide.
- Lighting
- HDR pipeline with image-based lighting taken from the procedural sky, or from an
env.hdrwhen the project supplies one.Pipeline HDR con iluminación por imagen tomada del cielo procedural, o de unenv.hdrcuando el proyecto lo aporta. - Shadows
- Shadow maps from the main light, with adjustable opacity and up to two additional directional fill lights.Mapas de sombra de la luz principal, con opacidad ajustable y hasta dos direccionales adicionales de relleno.
- Sky
- Procedural sky with separate zenith, horizon and ground radiance, a sun disc in degrees, and control over how much it contributes to diffuse.Cielo procedural con radiancia separada de cénit, horizonte y suelo, disco solar en grados y control de cuánto aporta al difuso.
- Output
- ACES filmic or linear tonemapping, exposure in EV, plus brightness, contrast and saturation applied after the curve.Tonemapping ACES filmico o lineal, exposición en EV, y brillo, contraste y saturación aplicados tras la curva.
- Transparency
- Order-independent transparency for alpha-blended surfaces.Transparencia independiente del orden para superficies con alfa.
- Geometry
- Meshlet generation through meshoptimizer, skinned and static paths, adaptive far plane for large scenes.Generación de meshlets con meshoptimizer, caminos skinned y estático, y plano lejano adaptativo para escenas grandes.
Physical unitsUnidades físicas
- Distance
- Metres. Every scene is interchangeable because nothing is expressed in arbitrary units.Metros. Todas las escenas son intercambiables porque nada se expresa en unidades arbitrarias.
- Directional light
- Lux. Midday sun is written as the number a light meter would read.Lux. El sol de mediodía se escribe con el número que marcaría un fotómetro.
- Point · spot · area
- Lumens, the figure printed on a real bulb.Lúmenes, la cifra impresa en una bombilla real.
- Colour
- Linear RGB, optionally tinted by a black-body temperature in kelvin.RGB lineal, opcionalmente teñido por una temperatura de cuerpo negro en kelvin.
- Camera
- Exposure in EV, per scene. Zero is neutral and positive values darken, as on a camera.Exposición en EV, por escena. Cero es neutro y los valores positivos oscurecen, como en una cámara.
Physics & collisionFísica y colisiones
- Solver
- Jolt, stepped at a fixed 60 Hz with an accumulator while rendering runs free.Jolt, con paso fijo a 60 Hz y acumulador, mientras el render corre libre.
- Colliders
- Box, sphere, capsule, and triangle-soup mesh colliders that use the model's own geometry, so a character walks the real terrain.Caja, esfera, cápsula y colisión de malla por triángulos que usa la geometría del propio modelo, así el personaje camina el terreno real.
- Rigid bodies
- Mass in kilograms, gravity, stacking, rolling. Position and rotation are written back to the entity with its visual scale preserved.Masa en kilogramos, gravedad, apilado y rodadura. La posición y la rotación vuelven a la entidad conservando su escala visual.
- Character
- Native capsule controller: horizontal motion, gravity, jump, ground detection, wall sliding and slopes up to about 50 degrees.Controlador de cápsula nativo: movimiento horizontal, gravedad, salto, detección de suelo, deslizamiento por paredes y cuestas de hasta unos 50 grados.
- Pushing
- Push strength in newtons against a body's own mass, so what a character can shove is a physical question, not a flag.Fuerza de empuje en newtons frente a la masa del cuerpo, así que lo que un personaje puede mover es una cuestión física, no un flag.
- Triggers
- Sensor volumes that emit enter and exit events naming the other entity.Volúmenes sensores que emiten eventos de entrada y salida nombrando a la otra entidad.
- Platforms
- Kinematic moving platforms that carry and push whatever stands on them.Plataformas kinemáticas que transportan y empujan a quien va encima.
AnimationAnimación
- Skinning
- Skeletal skinning with bind poses read from the source rig, on both backends.Skinning esquelético con bind poses leídas del rig de origen, en ambos backends.
- Clip format
- A native
.e3daclip keyed by bone name, not by index, which is what makes a clip portable between skeletons.Un clip nativo.e3daindexado por nombre de hueso, no por índice, que es lo que hace un clip portable entre esqueletos. - Retargeting
- Rotations plus a hip translation scaled by bind height, so a taller rig travels proportionally further. Name remapping tables included.Rotaciones más una traslación de cadera escalada por la altura de bind, así un rig más alto avanza proporcionalmente más. Incluye tablas de remapeo de nombres.
- Root motion
- Extracted from the root bone per clip and handed to physics as pending displacement in metres, so collisions and ground still decide the result.Se extrae del hueso raíz por clip y se entrega a la física como desplazamiento pendiente en metros, así que las colisiones y el suelo siguen decidiendo el resultado.
- Locomotion
- A state machine picking idle, walk and run from actual movement, with the character turning to face where it goes.Una máquina de estados que elige quieto, andar y correr según el movimiento real, y el personaje gira para mirar hacia donde va.
- Library
- A scene declares folders of clips and they are cooked on demand. One demo carries 346 of them on a single mannequin.Una escena declara carpetas de clips y se cocinan bajo demanda. Una demo lleva 346 sobre un mismo maniquí.
ScriptingScripting
- Language
- Lua bound with sol2. Each entity runs its own chunk, so its locals are that entity's state.Lua enlazado con sol2. Cada entidad ejecuta su propio chunk, así que sus locales son el estado de esa entidad.
- Contract
- Three optional functions:
on_load,on_update,on_event.Tres funciones opcionales:on_load,on_updateyon_event. - Division
- The engine owns kinematics, physics and collision. Scripts set high-level intent and react. No gravity loops in Lua, by design.El motor se queda con la cinemática, la física y las colisiones. Los scripts fijan intención de alto nivel y reaccionan. Sin bucles de gravedad en Lua, por diseño.
- Events
- Native systems emit
land,jump,trigger_enterandtrigger_exit.Los sistemas nativos emitenland,jump,trigger_enterytrigger_exit. - Frame order
- Input, then policy, then physics, then reactions, then render. Fixed and documented.Input, después política, después física, después reacciones y por último render. Fijo y documentado.
Asset & scene importImportación
- Sources
- FBX and glTF through Assimp, with import scale baked into the vertices and the rig so entity transforms stay clean for physics.FBX y glTF por Assimp, con la escala de importación horneada en los vértices y en el rig, así los transforms quedan limpios para la física.
- Godot scenes
- Reads
.tscnprojects directly: instances and transforms, per-surface materials, nested prefabs, primitives, lights and the full environment.Lee proyectos.tscndirectamente: instancias y transforms, materiales por superficie, prefabs anidados, primitivas, luces y el entorno completo. - Godot meshes
- A reader for Godot's binary mesh resources, including skinned characters with their skeleton and bind poses. The same geometry Godot draws.Un lector de las mallas binarias de Godot, incluidos personajes skinned con su esqueleto y bind poses. La misma geometría que dibuja Godot.
- Native format
- Everything lands in
.e3dm, a versioned node graph with relative texture paths.Todo aterriza en.e3dm, un grafo de nodos versionado con rutas de textura relativas. - Cooking
- On demand and hash-keyed on path, size, date and importer version. Reimports only when a source or the importer changes.Bajo demanda y con clave de hash sobre ruta, tamaño, fecha y versión del importador. Reimporta solo si cambia una fuente o el importador.
- Fidelity
- One reference scene renders identically to Godot, with zero differing pixels, from the same camera.Una escena de referencia se renderiza idéntica a Godot, con cero píxeles distintos, desde la misma cámara.
Procedural contentContenido procedural
- Noise
- Perlin, fBm, turbulence and Worley, generated once on the GPU and ramped between two colours.Perlin, fBm, turbulencia y Worley, generados una vez en GPU y rampados entre dos colores.
- Layered materials
- A small JSON language for stacking generators with masks and blend modes, regenerated per frame so it can animate.Un pequeño lenguaje JSON para apilar generadores con máscaras y modos de mezcla, regenerado por fotograma para poder animarse.
- Text
- The engine's own signed-distance-field text renderer, in screen pixels, with accents and inverted punctuation. Not a debug overlay.El renderizador de texto propio por campos de distancia, en píxeles de pantalla, con acentos y signos invertidos. No es un overlay de depuración.
- Compute
- General compute pipelines, used today for flocking, steering and obstacle avoidance on the GPU.Pipelines de cómputo generales, usados hoy para bandadas, steering y evitación de obstáculos en GPU.
ToolingHerramientas
- Editor
- A desktop editor built on the engine library, with docking panels.Un editor de escritorio construido sobre la librería del motor, con paneles acoplables.
- Player
- A standalone runtime that opens a project folder and runs it, with an animation browser and headless screenshot capture for regression checks.Un runtime independiente que abre una carpeta de proyecto y la ejecuta, con explorador de animaciones y captura sin ventana para comprobar regresiones.
- Cooker
- A command line tool that cooks, dumps and validates assets: degenerate triangles, NaNs, UVs out of range, missing textures, broken skinning.Una herramienta de línea de comandos que cocina, inspecciona y valida assets: triángulos degenerados, NaN, UV fuera de rango, texturas inexistentes y skinning roto.
- Tests
- Unit tests through CTest, plus reference screenshots compared frame by frame.Tests unitarios con CTest, más capturas de referencia comparadas fotograma a fotograma.
Dependencies only ever point downward. Las dependencias solo apuntan hacia abajo.
D3DCompile · Windows SDKD3DCompile · SDK de Windows Vulkan
DXC to SPIR-V · Vulkan SDKDXC a SPIR-V · SDK de Vulkan
Why it is built this wayPor qué está construido así
A rendering backend is a detail, not a foundation. Because nothing above the abstraction layer names DirectX or Vulkan, the same scene runs on either one and a bug in a backend cannot spread upward. Un backend de render es un detalle, no un cimiento. Como nada por encima de la capa de abstracción nombra a DirectX ni a Vulkan, la misma escena corre en cualquiera de los dos y un fallo de un backend no puede propagarse hacia arriba.
The engine is a libraryEl motor es una librería
The editor and the player are two applications linked against the same library, and a game is a folder on disk. Nothing about a project is compiled in. El editor y el player son dos aplicaciones enlazadas contra la misma librería, y un juego es una carpeta en disco. Nada de un proyecto se compila dentro.
Every library is fencedCada librería está vallada
Assimp, SDL3, Jolt and the rest each live behind a boundary the engine owns. Replacing one is a contained job rather than a rewrite. Assimp, SDL3, Jolt y las demás viven cada una tras una frontera propia del motor. Sustituir cualquiera es un trabajo acotado, no una reescritura.
Where the build stands today. Por dónde va el desarrollo hoy.
An independent project, developed in the open in progress reports rather than in source. Playable demos are the next thing to ship. Un proyecto independiente, que se enseña en informes de progreso y no en código fuente. Las demos jugables son lo siguiente en salir.
WorkingFuncionando
In the build todayEn la build de hoy- DirectX 12 and Vulkan backends, both rendering the same scenesBackends DirectX 12 y Vulkan, ambos renderizando las mismas escenas
- Physically based rendering with shadows, image-based lighting and tonemappingRender basado en física con sombras, iluminación por imagen y tonemapping
- Jolt physics, character controller, triggers and moving platformsFísica Jolt, controlador de personaje, triggers y plataformas móviles
- Skinned animation, retargeting by bone name and root motionAnimación skinned, retargeting por nombre de hueso y root motion
- Lua scripting with native eventsScripting en Lua con eventos nativos
- Godot scene and binary mesh import, matching the source exactlyImportación de escenas y mallas binarias de Godot, igualando la fuente exactamente
- Editor, player and asset cookerEditor, player y cocinador de assets
In progressEn curso
Being worked on nowTrabajándose ahora- Moving the scene renderer onto the mesh shader path, which the demos already useLlevar el renderizador de escena al camino de mesh shaders, que las demos ya usan
- A richer locomotion state machine for turns, dodges and chargesUna máquina de estados de locomoción más rica para giros, esquivas y embestidas
- Retargeting between genuinely different rigsRetargeting entre rigs realmente distintos
- Scene-level material overrides applied per surfaceOverrides de material de escena aplicados por superficie
NextSiguiente
PlannedPlanificado- Downloadable demos you can run yourselfDemos descargables que puedas ejecutar tú
- Collision events between rigid bodies exposed to scriptsEventos de colisión entre cuerpos rígidos expuestos a los scripts
- AudioAudio
- Regular development videosVídeos de desarrollo periódicos