MAura

Real-time 3D engine · Written from scratch in C++ · DirectX 12 and Vulkan (using AI)Motor 3D en tiempo real · Escrito desde cero en C++ · DirectX 12 y Vulkan (utilizando IA)

MAura · Max Aura

A 3D engine written from scratch in C++, built to make games by prompting an AI.Un motor 3D escrito desde cero en C++, pensado para hacer juegos pidiéndoselos a una IA.

Rasterization and path tracing on DirectX 12 and Vulkan, characters with full skeletal animation, Jolt physics, miniaudio sound, and gameplay written in Lua: by you, or by an AI from a prompt.Rasterización y path tracing sobre DirectX 12 y Vulkan, personajes con animación por esqueleto completa, física con Jolt, sonido con miniaudio, y el juego escrito en Lua: por ti, o por una IA a partir de un prompt.

Written with AI, and shaped so that games on it are written with AI too. See the LuaEscrito con IA, y diseñado para que los juegos que corran sobre él también se escriban con IA. Ver el Lua

C++

Written from scratchEscrito desde cero

Renderer, scene, physics bridge, tools and editor in our own C++20. No engine framework underneath.Renderizador, escena, puente de física, herramientas y editor en C++20 propio. Ningún motor debajo.

DX12 · Vulkan

Two native backendsDos backends nativos

One abstraction layer drives DirectX 12 and Vulkan, rendering the same scenes.Una capa de abstracción mueve DirectX 12 y Vulkan, que renderizan las mismas escenas.

Raster · PT

Rasterization and path tracingRasterización y path tracing

A real-time PBR rasterizer with mesh shaders, and a path tracer with ReSTIR, denoising and DLSS Ray Reconstruction.Un rasterizador PBR en tiempo real con mesh shaders, y un path tracer con ReSTIR, denoising y DLSS Ray Reconstruction.

Skeletons

CharactersPersonajes

GPU skinning, retargeting by bone name, root motion, blend shapes and facial expressions.Skinning en GPU, retargeting por nombre de hueso, root motion, blend shapes y expresiones faciales.

Jolt · miniaudio

Physics and soundFísica y sonido

Jolt for rigid bodies, characters and joints. miniaudio for buses, 3D sound and music.Jolt para cuerpos rígidos, personajes y juntas. miniaudio para buses, sonido 3D y música.

Lua · AI

Games made by prompting an AIJuegos hechos pidiéndoselos a una IA

A game is scene data plus short Lua scripts: the shape an AI writes reliably from a prompt.Un juego son datos de escena y scripts cortos de Lua: lo que una IA escribe con fiabilidad a partir de un prompt.

92klines of C++20líneas de C++20
15engine modulesmódulos del motor
2graphics backendsbackends gráficos
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.

A glowing gel ball on a steel stair inside an industrial hall, with light shafts through the windows
BLÖP · Path tracing A closed gel volume that refracts on the way in and out, with light inside. ReSTIR, traced fog and DLSS Ray Reconstruction.Un volumen de gel cerrado que refracta al entrar y al salir, con luz dentro. ReSTIR, niebla trazada y DLSS Ray Reconstruction.
Reactor room with coloured emissive lights, path traced
Emissive lightLuz emisiva Every glowing surface lights the room: sampled directly, with no fake lights.Cada superficie que brilla ilumina la sala: muestreada directamente, sin luces falsas.
A glowing ball of fire held inside a shell of water, with smoke and its shadow on the floor
SimulationSimulación Fire inside a shell of water, simulated together on the GPU. The water cools the flame and leaves as steam.Fuego dentro de una cáscara de agua, simulados juntos en la GPU. El agua enfría la llama y se va en vapor.
Smoke shaped as the profile of a human head
Smoke · shapeHumo · forma Smoke that takes the shape of any model, from the distance field of its mesh.Humo que toma la forma de cualquier modelo, desde el campo de distancia de su malla.
A face made of smoke, seen from the front
Smoke · faceHumo · cara A smoke face that follows the blend shapes and talks.Una cara de humo que sigue a los blend shapes y habla.
A campfire in a ring of stones next to a brick wall, at night
FireFuego Fire on a sparse grid. The light on the stones and the wall comes from the simulation.Fuego en una rejilla dispersa. La luz de las piedras y el muro sale de la simulación.
A robot character in a hall crossed by light shafts
Characters in the path tracerPersonajes en el path tracer Skinned characters are rebuilt into the ray tracing structures every frame.Los personajes con skinning se reconstruyen en las estructuras de rayos en cada fotograma.
A figure made of energy particles emitted from an animated mesh
ParticlesPartículas Particles emitted from the skin of an animated model, lighting the room.Partículas emitidas desde la piel de un modelo animado, iluminando la sala.
Candles against a stucco wall
SubsurfaceSubsuperficie Wax traced with a random walk under the surface.Cera trazada con un camino aleatorio bajo la superficie.
Lightning and energy effects in a dark brick room
Light from effectsLuz de los efectos Lightning, trails and torches are light sources in both renderers.Rayos, estelas y antorchas son fuentes de luz en los dos renderizadores.
Sun seen through a window, with a lens star, a halo ring and ghosts
Lens flareLens flare Per-light glare, diffraction star and aperture ghosts, hidden by whatever stands in front. The same in raster and path tracing.Resplandor, estrella de difracción y fantasmas del diafragma por cada luz, y tapados por lo que haya delante. Igual en raster que en path tracing.
A hanging bulb with a soft glare around it
HaloHalo A 1600 lm bulb: the glow comes from the lens model, not from a sprite.Una bombilla de 1600 lm: el resplandor sale del modelo de la lente, no de un sprite.
A lunar buggy driving across a desert while saucers attack
Patrulla Lunar A complete arcade game written in Lua: the saucers, the bombs and the buggy are scripts.Un juego arcade completo escrito en Lua: los platillos, las bombas y el buggy son scripts.
A torch flame against a brick wall
Flipbooks Procedural fire flipbook, heat distortion and a flickering light.Flipbook de fuego procedural, distorsión por calor y una luz que titila.

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

Describe it in a sentence. The AI writes the Lua.Lo describes en una frase. La IA escribe el Lua.

The engine keeps the hard parts native: rendering, physics, collisions, animation, audio. A game is a scene file and short Lua scripts that decide and react. That is exactly what an AI writes well from a prompt. Two real examples:El motor se queda con lo difícil en nativo: render, física, colisiones, animación y audio. Un juego es un fichero de escena y scripts cortos de Lua que deciden y reaccionan. Eso es justo lo que una IA escribe bien a partir de un prompt. Dos ejemplos reales:

blop.luaLua

Prompt“The gel ball moves only by physics. Keys 1, 2 and 3 turn it into a ball, a flat disc the air can carry, or a heavy lump that sinks.”“La bola de gel se mueve solo por la física. Las teclas 1, 2 y 3 la convierten en bola, en un disco plano que lleva el aire o en un bloque pesado que se hunde.”

-- blop.lua: the player never steers the ball. It only chooses WHAT the gel is.
local STATES = {
  ball  = { shape = "sphere",   radius = 0.45, mass = 6,   drag = 0.30 },
  disc  = { shape = "cylinder", radius = 0.80, half_height = 0.16,
            mass = 6, drag = 2.4, level = true },   -- the air carries it
  heavy = { shape = "sphere",   radius = 0.40, mass = 360, drag = 0.25 },  -- sinks, tips trapdoors
}

function M.on_update(self, dt)
  for i, id in ipairs({ "ball", "disc", "heavy" }) do
    if action.pressed("state_" .. i) then
      self:set_body(STATES[id])          -- same body, new physics: it keeps its speed
      play_sound("Assets/Audio/gel_" .. id .. ".wav")
    end
  end
end
set_body swaps shape, mass and drag on the live body. Air zones, water and trapdoors react on their own: the script never computes a force.set_body cambia forma, masa y arrastre en el cuerpo vivo. Las zonas de aire, el agua y las trampillas reaccionan solas: el script nunca calcula una fuerza.
saucers.luaLua

Prompt“Saucers fly in formation above the buggy, swaying and spinning. A bullet from the cannon blows them up and adds 100 points.”“Los platillos vuelan en formación sobre el buggy, balanceándose y girando. Una bala del cañón los revienta y suma 100 puntos.”

-- saucers.lua: each saucer holds its slot above the buggy, spins, and dies to a bullet.
function M.on_update(self, dt)
  local b = GAME.buggy                           -- shared with buggy.lua
  for _, s in ipairs(saucers) do
    local tx = b.x + s.slot + 3 * math.sin(t * 0.8 + s.phase)
    local ty = s.height + 1.8 * math.sin(t * 1.4 + s.phase)
    s.vx = s.vx + (b.vx + (tx - s.x) * 1.8 - s.vx) * 4 * dt
    s.vy = s.vy + ((ty - s.y) * 1.8 - s.vy) * 4 * dt
    s.x, s.y = s.x + s.vx * dt, s.y + s.vy * dt
    s.e:set_position(s.x, s.y, 0)
    s.e:set_rotation(0, t * 3, -(s.vx - b.vx) * 0.04)   -- spins and banks

    if hit_by_bullet(s) then
      spawn_particles("explosion", s.x, s.y, 0, 140)
      play_sound(CONFIG.sounds.saucer_explodes)
      GAME.score = GAME.score + 100
    end
  end
end