MAura

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.

33klines of C++20líneas de C++20
12engine modulesmódulos del motor
2graphics backendsbackends gráficos
16third-party librarieslibrerías de terceros
ShowcaseGalería

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.

Pirate town rendered with sunlight, cast shadows and a playable character
Third person Playable character on an imported town, with an occlusion-aware follow camera. Personaje jugable sobre una ciudad importada, con cámara que rodea los obstáculos.
Characters and a vehicle imported from a Godot scene
Godot import Pixel-identical to the same scene opened in Godot. Idéntica píxel a píxel a la misma escena abierta en Godot.
Skinned mannequin playing an animation clip
Retargeting 346 clips retargeted onto one skeleton by bone name. 346 clips retargeteados a un esqueleto por nombre de hueso.
Character running, driven by root motion extracted from the clip
Root motion The clip moves the character. Feet do not slide. El clip mueve al personaje. Los pies no patinan.
Wide view of a harbour town at night with warm lighting
Lighting Procedural sky feeding image-based lighting, ACES tonemapping, exposure set in EV. Cielo procedural que alimenta la iluminación por imagen, tonemapping ACES y exposición fijada en EV.
Rigid bodies stacked and falling in the physics demo
Jolt physics Rigid bodies, triggers and a capsule character at a fixed timestep. Cuerpos rígidos, triggers y personaje de cápsula a paso fijo.
Platforms textured with multi-layer procedural materials
Procedural materials Layered materials generated on the GPU from a JSON description. Materiales por capas generados en GPU desde una descripción JSON.
Thousands of agents flocking, simulated on the GPU
Compute Flocking and steering solved in compute shaders. Bandadas y steering resueltos en shaders de cómputo.
Scripting demo with a player and a patrolling agent
Lua Scripts decide. The engine moves, collides and reports events. Los scripts deciden. El motor mueve, colisiona y avisa por eventos.
Post-processing chain output
Post Tonemapping, exposure and grading run per scene. Tonemapping, exposición y ajuste corren por escena.

Built with AI, built for AIHecho con IA, hecho para IA

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.


Technical specificationEspecificación técnica

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

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 becomes Engine::Platform, the graphics APIs become Engine::RHI.Cada librería de terceros queda encapsulada tras una frontera propia. DirectXMath es Engine::Math, SDL3 es Engine::Platform y las APIs gráficas son Engine::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.
RHI

Graphics backendsBackends gráficos

Backends
DirectX 12 and Vulkan behind one interface, chosen at launch with /renderer=DX12 or /renderer=Vulkan. High-level code never names either API.DirectX 12 y Vulkan tras una sola interfaz, elegidos al arrancar con /renderer=DX12 o /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. 22 shaders in the tree.Un solo HLSL por shader, compilado por dos caminos: D3DCompile para DirectX y DXC a SPIR-V para Vulkan. 22 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.
GEOMETRY

Mesh shadersMesh shaders

Pipeline
The default path of the scene renderer, on both backends: DirectX 12 from mesh shader tier 1, Vulkan through VK_EXT_mesh_shader with task and mesh stages. Support is detected per device.El camino por defecto del renderizador de escena, en los dos backends: DirectX 12 desde mesh shader tier 1, y Vulkan por VK_EXT_mesh_shader con 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.
GPU drivenDirigido por GPU
A compute pass culls entities against the frustum, compacts what survives and writes the dispatch arguments. The processor never walks the scene: it hands the GPU a list and the GPU decides. Draws go out with indirect dispatch.Un paso de cómputo culla las entidades contra el frustum, compacta lo que sobrevive y escribe los argumentos de dispatch. El procesador no recorre la escena: le da a la GPU una lista y la GPU decide. Los dibujados salen con dispatch indirecto.
BatchingAgrupado
Static objects are grouped by model and material into one dispatch per group, with an octree cache rebuilt only when the scene changes. An imported city collapses to about thirty dispatches.Los objetos estáticos se agrupan por modelo y material en un dispatch por grupo, con una caché de octree que solo se reconstruye si cambia la escena. Una ciudad importada se queda en unos treinta dispatches.
MeasuredMedido
Same frames, same pixels, both paths compared. On the imported city, 1.6 ms per frame against 2.2 ms on the classic vertex path. On a character scene, 1.4 ms against 2.9 ms.Los mismos fotogramas, los mismos píxeles, comparando los dos caminos. En la ciudad importada, 1,6 ms por fotograma frente a 2,2 ms por el camino clásico de vértices. En una escena de personaje, 1,4 ms frente a 2,9 ms.
FallbackRespaldo
Hardware without mesh shader support falls back to the classic vertex path, and --nomeshshaders forces it for comparison. Both produce identical images.El hardware sin soporte de mesh shaders cae al camino clásico de vértices, y --nomeshshaders lo fuerza para comparar. Los dos producen imágenes idénticas.
RENDER

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.hdr when the project supplies one.Pipeline HDR con iluminación por imagen tomada del cielo procedural, o de un env.hdr cuando 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.
UNITS

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

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.
ANIM

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 .e3da clip keyed by bone name, not by index, which is what makes a clip portable between skeletons.Un clip nativo .e3da indexado 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.
FacesCaras
88 ARKit blend shapes per character, morphed on the processor into a dynamic vertex buffer so it works alongside skinning without touching a shader. Expression presets, blinking every few seconds, and lip sync generated from written text.88 blend shapes de ARKit por personaje, mezcladas en el procesador sobre un buffer de vértices dinámico, así que conviven con el skinning sin tocar ningún shader. Presets de expresión, parpadeo cada pocos segundos y sincronización labial generada desde texto escrito.
Modular rigsRigs modulares
Characters assembled from separate parts welded onto one 88-bone skeleton, coloured from a palette, and animated with clips recorded on a completely different rig.Personajes montados con piezas sueltas fusionadas sobre un mismo esqueleto de 88 huesos, coloreados desde una paleta, y animados con clips grabados sobre un rig completamente distinto.
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í.
SCRIPT

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_update y on_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_enter and trigger_exit.Los sistemas nativos emiten land, jump, trigger_enter y trigger_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.
IMPORT

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 .tscn projects directly: instances and transforms, per-surface materials, nested prefabs, primitives, lights and the full environment.Lee proyectos .tscn directamente: 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.
PROC

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
Signed distance field text rendering encodes, in a texture, the shortest distance from each pixel to a glyph's contour, which lets the GPU scale and rotate text crisply at any size. The engine has its own, positioned in screen pixels, with accents and inverted punctuation. Not a debug overlay.El renderizado de texto por Signed distance field guarda en una textura la distancia más corta de cada píxel al contorno de la letra, lo que permite a la GPU escalar y rotar el texto con nitidez a cualquier tamaño. El motor tiene el suyo propio, 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.
TOOLS

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.

ArchitectureArquitectura

Dependencies only ever point downward. Las dependencias solo apuntan hacia abajo.

L4 Editor · Player · ExamplesEditor · Player · Ejemplos Applications. They consume the engine as a library and know nothing about graphics APIs.Aplicaciones. Consumen el motor como librería y no saben nada de APIs gráficas.
L3 EngineMotor Scene, runtime, physics, animation, scripting, import, compute, AI.Escena, runtime, física, animación, scripting, importación, cómputo e IA.
L2 RHI One GPU abstraction. Devices, swap chains, pipelines, descriptors, fences.Una sola abstracción de GPU. Dispositivos, cadenas de intercambio, pipelines, descriptores y fences.
L1 DirectX 12
D3DCompile · Windows SDKD3DCompile · SDK de Windows
Vulkan
DXC to SPIR-V · Vulkan SDKDXC a SPIR-V · SDK de Vulkan
CoreMathPlatformRHIRuntimeScenePhysicsScriptImportAssetsComputeAI

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.


AuthoringAutoría

A game is data. Code is the exception. Un juego son datos. El código es la excepción.

A project is a folder with a scene file and, when something genuinely needs deciding, a script. Roughly four fifths of a game is declared rather than written. Un proyecto es una carpeta con un fichero de escena y, cuando de verdad hay algo que decidir, un script. Aproximadamente cuatro quintas partes de un juego se declaran en vez de escribirse.

game.json DeclaredDeclarado
{
  "name": "Player",
  "asset": 3,
  "controller": {
    "moveSpeed":  4.0,
    "jumpSpeed":  6.0,
    "gravity":   -14.0,
    "mass":      70.0,
    "feetOrigin": true,
    "playerInput": true,
    "rootMotion": true
  },
  "light": {
    "kind": "point",
    "intensity": 1600,      // lumens
    "temperatureK": 2700,   // tungsten
    "range": 25              // metres
  }
}
Mass in kilograms, intensity in lumens, range in metres. The engine reads real quantities, so a lamp that looks right in one scene looks right in every scene. Masa en kilogramos, intensidad en lúmenes y alcance en metros. El motor lee magnitudes reales, así que una lámpara que queda bien en una escena queda bien en todas.
scripts/player.lua DecidedDecidido
local M = {}

-- Policy only. The engine already moves,
-- collides and applies gravity.

function M.on_update(self, dt)
  local dx, dz = 0, 0
  if input.down("Left")  then dx = -1 end
  if input.down("Right") then dx = 1  end
  self:set_move(dx, dz)
end

function M.on_event(self, name, other)
  if name == "trigger_enter" then
    screen_text("¡Objetivo!", 40, 40)
  end
end

return M
The script never integrates velocity or resolves a collision. It states intent and answers events, which is why gameplay stays readable. El script nunca integra velocidad ni resuelve una colisión. Declara intención y responde a eventos, que es por lo que la lógica de juego se mantiene legible.

StatusEstado

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
  • Mesh shader pipeline as the default path, with GPU-driven culling and indirect dispatchPipeline de mesh shaders como camino por defecto, con culling en GPU y dispatch indirecto
  • Facial animation with ARKit blend shapes, expressions and lip sync from textAnimación facial con blend shapes de ARKit, expresiones y sincronización labial desde texto
  • Editor, player and asset cookerEditor, player y cocinador de assets

In progressEn curso

Being worked on nowTrabajándose ahora
  • 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
  • Merging identical imported assets so batching has more to groupFusionar assets importados idénticos para que el agrupado tenga más que juntar
  • Cooking meshlets at import instead of building them at loadCocinar los meshlets al importar en vez de construirlos al cargar
  • Scene-level material overrides applied per surfaceOverrides de material de escena aplicados por superficie