Everything the engine does todayTodo lo que hace el motor hoy
Twelve subsystems, written from scratch on top of a graphics abstraction that hides DirectX 12 and Vulkan. Anything marked in progress is honest about not being finished. Everything else runs today. Doce subsistemas, escritos desde cero sobre una abstracción gráfica que oculta DirectX 12 y Vulkan. Lo marcado como en curso es honesto sobre no estar terminado. Todo lo demás funciona hoy.
Graphics backendsBackends gráficos
One abstraction over two modern APIs. Nothing above this layer names DirectX or Vulkan, so the same scene runs on either and a bug in one backend cannot spread upward. Una abstracción sobre dos APIs modernas. Nada por encima de esta capa nombra a DirectX ni a Vulkan, así que la misma escena corre en cualquiera de los dos y un fallo de un backend no puede propagarse hacia arriba.
| ItemElemento | What it doesQué hace |
|---|---|
| DirectX 12 | Full backend: devices, swap chains, pipeline state, root signatures, shared descriptor heaps, fences with frames in flight, debug layer in Debug builds.Backend completo: dispositivos, cadenas de intercambio, estado de pipeline, root signatures, heaps de descriptores compartidos, fences con frames en vuelo y capa de depuración en Debug. |
| Vulkan | Full backend with the same interface: physical device selection, queues, render passes, descriptor pools, validation layers in Debug builds.Backend completo con la misma interfaz: selección de dispositivo físico, colas, render passes, pools de descriptores y capas de validación en Debug. |
| --renderer | Backend chosen at launch, not at build time. /renderer=DX12 or /renderer=Vulkan.El backend se elige al arrancar, no al compilar. /renderer=DX12 o /renderer=Vulkan. |
| HLSL | One shader source per effect, compiled two ways: D3DCompile for DirectX, DXC to SPIR-V for Vulkan. Twenty shaders in the tree.Un solo fuente por efecto, compilado por dos caminos: D3DCompile para DirectX y DXC a SPIR-V para Vulkan. Veinte shaders en el árbol. |
| DescriptorsDescriptores | Shared descriptor heaps, which is what lets a city-sized scene bind thousands of textures inside a single 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 solo fotograma. |
| CapabilitiesCapacidades | Feature detection per device, so optional paths such as mesh shaders switch on only where the hardware supports them.Detección de capacidades por dispositivo, así los caminos opcionales como los mesh shaders solo se activan donde el hardware los admite. |
Mesh shaders and meshletsMesh shaders y meshlets
The classic pipeline pushes vertices through fixed hardware one at a time. A mesh shader pipeline hands the GPU whole clusters of geometry and lets it decide what is worth drawing. That is the difference: cost scales with what is visible rather than with what exists. El pipeline clásico empuja vértices por hardware fijo de uno en uno. Un pipeline de mesh shaders entrega a la GPU clusters enteros de geometría y deja que ella decida qué merece la pena dibujar. Esa es la diferencia: el coste escala con lo que se ve y no con lo que existe.
| ItemElemento | What it doesQué hace |
|---|---|
| DirectX 12 | Mesh shader pipeline from mesh shader tier 1, dispatched with DispatchMesh.Pipeline de mesh shaders desde mesh shader tier 1, lanzado con DispatchMesh. |
| Vulkan | The same path through VK_EXT_mesh_shader, enabled when the device reports both task and mesh stages.El mismo camino por VK_EXT_mesh_shader, activado cuando el dispositivo declara etapas de tarea y de malla. |
| MeshletsMeshlets | Geometry is cut at import time into clusters of a few dozen triangles, each carrying its own bounding box and normal cone, and written into the native format. Nothing to compute at load.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 escribe en el formato nativo. Nada que calcular al cargar. |
| Cluster cullingCulling por cluster | A task stage discards whole clusters that face away or fall outside the frustum, before their triangles ever reach the rasteriser. A back-facing wall costs one cone test instead of thousands of vertices.Una etapa de tarea descarta clusters enteros que miran hacia otro lado o caen fuera del frustum, antes de que sus triángulos lleguen al rasterizador. Un muro de espaldas cuesta una prueba de cono en vez de miles de vértices. |
| Fewer draw callsMenos draw calls | Thousands of objects can go out in very few dispatches, so the processor stops being the limit in dense scenes.Miles de objetos pueden salir en muy pocos dispatches, así que el procesador deja de ser el límite en escenas densas. |
| VariantsVariantes | Static meshlets, instanced meshlets, cone-culled meshlets, and a skinned variant that applies the skeleton on the GPU. Plus a compute pass for coarse culling.Meshlets estáticos, instanciados, con culling por cono, y una variante skinned que aplica el esqueleto en la GPU. Más un paso de cómputo para el culling grueso. |
| OptimisationOptimización | Vertex cache and overdraw optimisation through meshoptimizer before the clusters are built.Optimización de caché de vértices y de sobredibujado con meshoptimizer antes de construir los clusters. |
| FallbackRespaldo | Hardware without mesh shader support runs the classic vertex path, so the same scene still works.El hardware sin soporte de mesh shaders usa el camino clásico de vértices, así que la misma escena sigue funcionando. |
| Scene rendererRenderizador de escena | in progress The demos already run on the mesh shader path. Moving the general scene renderer onto it is current work.en curso Las demos ya corren sobre el camino de mesh shaders. Llevar ahí el renderizador de escena general es el trabajo actual. |
Rendering and materialsRender y materiales
- PBR metallic-roughness materials: base colour, metallic, roughness, emissive, normal maps and alpha.materiales metallic-roughness: color base, metálico, rugosidad, emisivo, mapas de normales y alfa.
- HDR pipelinePipeline HDR with image-based lighting taken from the procedural sky, or from an
env.hdrwhen the project supplies one.con iluminación por imagen tomada del cielo procedural, o de unenv.hdrcuando el proyecto lo aporta. - ShadowsSombras from the main light with adjustable opacity, plus up to two extra directional fill lights that light without casting.de la luz principal con opacidad ajustable, más hasta dos direccionales de relleno que iluminan sin proyectar.
- Procedural skyCielo procedural with separate zenith, horizon and ground radiance, a sun disc in degrees, halo controls, and a dial for how much it contributes to diffuse.con radiancia separada de cénit, horizonte y suelo, disco solar en grados, control de halo y un mando para cuánto aporta al difuso.
- Tonemapping ACES filmic or linear, with exposure in EV per scene, plus brightness, contrast and saturation applied after the curve.ACES filmico o lineal, con exposición en EV por escena, más brillo, contraste y saturación aplicados tras la curva.
- TransparencyTransparencia order-independent, so alpha-blended surfaces stop depending on draw order.independiente del orden, así las superficies con alfa dejan de depender del orden de dibujo.
- Culling per material, back faces by default, double-sided where the art needs it such as foliage and alpha cards. Front faces are counter-clockwise.por material, caras traseras por defecto y doble cara donde el arte lo pide, como vegetación y planos con alfa. Las caras frontales son antihorarias.
- Vertex coloursColores de vértice imported and multiplied into albedo, with a guard that ignores them when they are a mask rather than a tint.importados y multiplicados al albedo, con una salvaguarda que los ignora cuando son una máscara y no un tinte.
- Adaptive far planePlano lejano adaptativo so a city-scale scene and a single character both get sensible depth precision.para que una escena del tamaño de una ciudad y un solo personaje tengan precisión de profundidad razonable.
- Skybox and post chainSkybox y cadena de post as separate passes over the HDR target.como pasos separados sobre el destino HDR.
Lights and physical unitsLuces y unidades físicas
Every quantity in the engine is a real one. That is not purism: it is what makes scenes interchangeable, and what lets a person or a model reason about a value instead of tuning it blindly. Toda magnitud del motor es real. No es purismo: es lo que hace que las escenas sean intercambiables, y lo que permite a una persona o a un modelo razonar sobre un valor en vez de ajustarlo a ciegas.
| QuantityMagnitud | UnitUnidad |
|---|---|
| Distance, size, positionDistancia, tamaño, posición | Metres. Import scale is baked into the vertices and the rig, so entity transforms stay clean for physics.Metros. La escala de importación se hornea en los vértices y en el rig, así los transforms quedan limpios para la física. |
| directional | 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. Spot cones in degrees, range in metres.Lúmenes, la cifra impresa en una bombilla real. Conos de foco en grados y alcance en metros. |
| temperatureK | Kelvin. A black-body tint multiplied into the light's linear RGB colour. Zero means use the colour as written.Kelvin. Un tinte de cuerpo negro multiplicado al color RGB lineal de la luz. Cero significa usar el color tal cual. |
| exposureEV | EV, per scene. Zero is neutral, positive darkens, exactly as on a camera.EV, por escena. Cero es neutro y los valores positivos oscurecen, igual que en una cámara. |
| ColourColor | Linear RGB throughout, converted only at the very end of the frame.RGB lineal en todo el recorrido, convertido solo al final del fotograma. |
| Mass, forceMasa, fuerza | Kilograms and newtons, so what a character can push is a physical question.Kilogramos y newtons, así que lo que un personaje puede empujar es una cuestión física. |
Physics and collisionFísica y colisiones
Jolt, stepped at a fixed 60 Hz with an accumulator while rendering runs free. Kinematics live here and nowhere else, which is the rule that keeps gameplay scripts small. Jolt, con paso fijo a 60 Hz y acumulador, mientras el render corre libre. La cinemática vive aquí y en ningún otro sitio, que es la regla que mantiene pequeños los scripts de juego.
- Collider shapesFormas de colisión box, sphere, capsule, and triangle-soup mesh built from the model's own geometry, so a character walks the real terrain with its slopes and rocks.caja, esfera, cápsula y malla por triángulos construida con la geometría del propio modelo, así el personaje camina el terreno real con sus cuestas y sus rocas.
- Rigid bodiesCuerpos rígidos mass in kilograms, gravity, stacking and 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 controllerControlador de personaje native capsule: horizontal motion, gravity, jump, ground detection, wall sliding and slopes up to about fifty degrees.cápsula nativa: movimiento horizontal, gravedad, salto, detección de suelo, deslizamiento por paredes y cuestas de hasta unos cincuenta grados.
- PushingEmpuje push strength in newtons against each body's own mass, so heavier things genuinely resist.fuerza de empuje en newtons contra la masa propia de cada cuerpo, así lo pesado se resiste de verdad.
- Triggers sensor volumes that do not collide but emit enter and exit events naming the other entity.volúmenes sensores que no colisionan pero emiten eventos de entrada y salida nombrando a la otra entidad.
- Moving platformsPlataformas móviles kinematic, travelling between two points at a set speed, carrying and pushing whatever stands on them.kinemáticas, que viajan entre dos puntos a una velocidad fija, transportando y empujando a quien va encima.
- Independent of visual scaleIndependiente de la escala visual colliders are sized in world metres, never in mesh units.los colliders se dimensionan en metros de mundo, nunca en unidades de malla.
- Body-to-body collision eventsEventos de colisión entre cuerpos plannedplanificado
AnimationAnimación
- Skeletal skinningSkinning esquelético with bind poses read from the source rig, on both backends, with a GPU skinned meshlet path.con bind poses leídas del rig de origen, en los dos backends, con camino de meshlets skinned en GPU.
.e3danative clip format keyed by bone name rather than by index, which is what makes a clip portable between skeletons.formato nativo de clip indexado por nombre de hueso en vez de por índice, que es lo que hace un clip portable entre esqueletos.- RetargetingRetargeting 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. Con tablas de remapeo de nombres.
- World-space retargetRetarget en espacio de mundo for rigs whose local axes differ from the animation rig, comparing each skeleton against its own bind pose with a reference rig in T-pose.para rigs cuyos ejes locales difieren del rig de animación, comparando cada esqueleto contra su propia bind pose con un rig de referencia en pose T.
- Root motionRoot motion extracted per clip from the root bone and handed to physics as pending displacement in metres, so collisions and ground still decide the outcome and feet do not slide.extraído por clip del hueso raíz y entregado a la física como desplazamiento pendiente en metros, así las colisiones y el suelo siguen decidiendo el resultado y los pies no patinan.
- LocomotionLocomoción a state machine picking idle, walk and run from real movement, with the character turning to face where it goes and a camera that follows in third person.una máquina de estados que elige quieto, andar y correr según el movimiento real, con el personaje girando para mirar hacia donde va y una cámara que sigue en tercera persona.
- Clip libraryBiblioteca de clips a scene declares folders of clips and they are cooked on demand. One demo carries 346 of them on a single mannequin, browsable from a panel in the player.una escena declara carpetas de clips y se cocinan bajo demanda. Una demo lleva 346 sobre un mismo maniquí, explorables desde un panel del player.
- Occlusion-aware cameraCámara consciente de oclusión casts several rays at the character and, when genuinely blocked, orbits around the obstacle keeping its distance instead of snapping in.lanza varios rayos al personaje y, cuando está realmente tapada, rodea el obstáculo manteniendo la distancia en vez de pegarse de golpe.
Components you declareComponentes que se declaran
A game is a folder: a project file, a scene file and optionally some scripts. Every entity accepts a name, a parent, an asset, a transform and any of these components. This is roughly four fifths of a game. Un juego es una carpeta: un fichero de proyecto, uno de escena y opcionalmente algunos scripts. Cada entidad admite un nombre, un padre, un asset, un transform y cualquiera de estos componentes. Esto es cerca de cuatro quintas partes de un juego.
| ComponentComponente | What it gives the entityQué le da a la entidad |
|---|---|
| light | Directional, point, spot or area light in real units, with colour temperature, range, spot cones, shadow casting and shadow opacity.Luz direccional, puntual, de foco o de área en unidades reales, con temperatura de color, alcance, conos de foco, proyección de sombra y opacidad de sombra. |
| collider | Box, sphere, capsule or mesh collision. Static by default, dynamic for a rigid body, or a trigger volume.Colisión de caja, esfera, cápsula o malla. Estática por defecto, dinámica para cuerpo rígido, o volumen trigger. |
| controller | A character: move speed, jump, gravity, mass, push strength, feet-origin alignment, root motion, and whether the arrow keys drive it.Un personaje: velocidad, salto, gravedad, masa, fuerza de empuje, alineación por origen en los pies, root motion, y si lo mueven las flechas. |
| movingPlatform | A kinematic round trip between its position and an offset, at a set speed, carrying whatever rides it.Un vaivén kinemático entre su posición y un desplazamiento, a una velocidad fija, transportando a quien va encima. |
| script | A Lua file that decides and reacts for this entity alone.Un fichero Lua que decide y reacciona solo para esta entidad. |
| castShadow visible | Per-entity flags for shadow casting and visibility.Flags por entidad para proyección de sombra y visibilidad. |
| material | Overrides by material name: colour, roughness, double-sided, a procedural texture, or a whole layered material file.Overrides por nombre de material: color, rugosidad, doble cara, una textura procedural o un fichero completo de material por capas. |
| animations | A scene-level library of clips, declared as individual files or whole folders, with a root motion flag.Una biblioteca de clips a nivel de escena, declarada como ficheros sueltos o carpetas enteras, con flag de root motion. |
| import | A Godot project to pull in: instances, materials, lights and environment, cooked once and stamped so it only reimports when a source changes.Un proyecto de Godot que absorber: instancias, materiales, luces y entorno, cocinado una vez y sellado para que solo se reimporte si cambia una fuente. |
Lua scriptingScripting en Lua
Bound with sol2. Each entity runs its own chunk, so its locals are that entity's state. A script returns a table with three optional functions and nothing else is required. Enlazado con sol2. Cada entidad ejecuta su propio chunk, así que sus locales son el estado de esa entidad. Un script devuelve una tabla con tres funciones opcionales y no hace falta nada más.
| API | MeaningSignificado |
|---|---|
| on_load(self) | Called once at start.Se llama una vez al arrancar. |
| on_update(self, dt) | Every frame, for decisions. Not for kinematics.Cada fotograma, para decisiones. No para cinemática. |
| on_event(self, name, other) | Reaction to a native event, with the other entity involved when there is one.Reacción a un evento nativo, con la otra entidad implicada cuando la hay. |
| self:set_move(dx, dz) | Sets the controller's direction intent. The engine does the moving.Fija la intención de dirección del controller. El motor hace el movimiento. |
| self:do_jump() | Jump intent.Intención de salto. |
| self:grounded() | Is the character on the ground.Si el personaje está en el suelo. |
| self:position() | World position in metres.Posición de mundo en metros. |
| self:set_position(x, y, z) | Teleport. Avoid on anything with a controller.Teletransporte. Evitar en algo que tenga controller. |
| self:move(dx, dy, dz) | Low-level displacement.Desplazamiento de bajo nivel. |
| self:set_visible(bool) | Show or hide.Mostrar u ocultar. |
| self:set_move_speed(v) self:set_jump_speed(v) | Change speed or jump strength at runtime, for a power-up.Cambiar velocidad o fuerza de salto en marcha, para un potenciador. |
| self:name() | The entity's name.El nombre de la entidad. |
| input.down(k) input.pressed(k) input.released(k) | Keyboard state by key name.Estado del teclado por nombre de tecla. |
| screen_text(...) | Draw text on screen in pixels through the engine's own SDF renderer, with accents and inverted punctuation.Dibujar texto en pantalla en píxeles con el renderizador SDF propio del motor, con acentos y signos invertidos. |
| log(msg) · time screen_w · screen_h | Logging, elapsed time and screen size.Registro, tiempo transcurrido y tamaño de pantalla. |
Events the native systems emit: land and jump from the controller, trigger_enter and trigger_exit from sensor volumes. Frame order is fixed: input, then policy, then physics, then reactions, then render.
Eventos que emiten los sistemas nativos: land y jump del controller, y trigger_enter y trigger_exit de los volúmenes sensores. El orden por fotograma es fijo: input, después política, después física, después reacciones y por último render.
Import pipeline and formatsImportación y formatos
- FBX · glTF through Assimp, with import scale baked into the vertices and the rig so entity transforms stay clean for physics.por Assimp, con la escala de importación horneada en los vértices y el rig para que los transforms queden limpios para la física.
- Godot scenesEscenas de Godot read directly from
.tscn: instances and transforms, per-surface material overrides, nested prefabs, primitives, lights and the whole environment including sky, ambient, tonemap and exposure.leídas directamente de.tscn: instancias y transforms, overrides de material por superficie, prefabs anidados, primitivas, luces y el entorno completo con cielo, ambiente, tonemap y exposición. - Godot binary meshesMallas binarias de Godot a reader for the
.resand.meshresources Godot actually renders, including skinned characters with their skeleton and bind poses. A reference scene comes out identical, with zero differing pixels.un lector de los recursos.resy.meshque Godot renderiza de verdad, incluidos personajes skinned con su esqueleto y sus bind poses. Una escena de referencia sale idéntica, con cero píxeles distintos. - Sidekick
.ska dedicated importer for modular characters: separate pieces welded onto one skeleton, with a colour palette applied per cell.un importador dedicado para personajes modulares: piezas sueltas fusionadas sobre un esqueleto, con una paleta de color aplicada por celda. .e3dmthe native mesh format: a versioned node graph with meshlets and relative texture paths.el formato nativo de malla: un grafo de nodos versionado con meshlets y rutas de textura relativas..e3dathe native clip format, keyed by bone name so it retargets onto any skeleton.el formato nativo de clip, indexado por nombre de hueso para que se retargetee a cualquier esqueleto.- On-demand cookingCocinado bajo demanda hash-keyed on path, size, date and importer version, so nothing is reimported unless a source or the importer actually changed. Old versions clean themselves up.con clave de hash sobre ruta, tamaño, fecha y versión del importador, así que nada se reimporta salvo que cambie de verdad una fuente o el importador. Las versiones antiguas se borran solas.
- Clean scene documentsDocumentos de escena limpios an imported scene is written back as a plain engine document with parent-child hierarchy and lights in physical units. Source details live in a sidecar, so what a person or a model edits stays readable.una escena importada se reescribe como documento llano del motor con jerarquía padre-hijo y luces en unidades físicas. Los detalles de la fuente van en un fichero aparte, así lo que edita una persona o un modelo se mantiene legible.
- Winding correctionCorrección de winding source data comes wound for a right-handed system and the engine is left-handed, so triangle order is flipped on import.los datos de origen vienen orientados para un sistema diestro y el motor es zurdo, así que el orden de los triángulos se invierte al importar.
Procedural contentContenido procedural
- NoiseRuido Perlin, fBm, turbulence and Worley, generated once on the GPU with frequency and octaves, ramped between two colours.Perlin, fBm, turbulencia y Worley, generados una vez en GPU con frecuencia y octavas, rampados entre dos colores.
- Layered materialsMateriales por capas a small JSON language for stacking generators with masks and blend modes, regenerated per frame so a material can animate.un pequeño lenguaje JSON para apilar generadores con máscaras y modos de mezcla, regenerado por fotograma para que un material pueda animarse.
- Screen textTexto en pantalla a signed-distance-field renderer of the engine's own, positioned in screen pixels, with accents and inverted punctuation. Not a debug overlay.un renderizador por campos de distancia propio del motor, colocado en píxeles de pantalla, con acentos y signos invertidos. No es un overlay de depuración.
GPU computeCómputo en GPU
- General compute pipelinesPipelines de cómputo generales on both backends, sharing the same abstraction as graphics work.en los dos backends, compartiendo la misma abstracción que el trabajo gráfico.
- Steering and flockingSteering y bandadas thousands of agents seeking, avoiding obstacles and flocking, solved entirely on the GPU.miles de agentes buscando objetivos, evitando obstáculos y formando bandadas, resueltos enteramente en la GPU.
- CullingCulling a compute pass for coarse visibility before the mesh shader stage refines it per cluster.un paso de cómputo para visibilidad gruesa antes de que la etapa de mesh shader la afine por cluster.
- Texture generationGeneración de texturas the procedural material system runs on these same pipelines.el sistema de materiales procedurales corre sobre estos mismos pipelines.
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. Animation browser, camera placement flags, forced input for testing, and headless screenshot capture with a simulation delay.un runtime independiente que abre una carpeta de proyecto y la ejecuta. Explorador de animaciones, flags de colocación de cámara, input forzado para pruebas y captura sin ventana con retardo de simulación.
e3d-cooka command line tool that cooks assets, extracts clips, dumps the contents of any file, and validates: degenerate triangles, NaNs, UVs out of range, missing textures, broken skinning, and mesh orientation.una herramienta de línea de comandos que cocina assets, extrae clips, vuelca el contenido de cualquier fichero y valida: triángulos degenerados, NaN, UV fuera de rango, texturas inexistentes, skinning roto y orientación de las mallas.- TestsTests unit tests through CTest, plus reference screenshots compared frame by frame, which is how the Godot import parity is verified.tests unitarios con CTest, más capturas de referencia comparadas fotograma a fotograma, que es como se verifica la paridad con la importación de Godot.
- Capabilities documentDocumento de capacidades a written contract stating exactly which components, systems and events exist, and what must never be reimplemented in a script. It is what an AI reads before authoring anything.un contrato escrito que dice exactamente qué componentes, sistemas y eventos existen, y qué no se debe reimplementar nunca en un script. Es lo que lee una IA antes de escribir nada.
Back to the engine, or follow the work in the devlog. Volver a el motor, o seguir el trabajo en el devlog.