¿Qué es un Motor de Videojuegos y cómo funciona por dentro? (Guía Técnica)
Desde el 'Game Loop' hasta el renderizado de píxeles. Explicamos qué hacen realmente Unity y Unreal Engine bajo el capó y por qué los ingenieros deben entender esto.

Carlos Lara
Senior Audio Engineer & Founder
Publicado
2025-12-26
Lectura
9 min

Carlos Lara
Senior Audio Engineer & Founder
Publicado
2025-12-26
Lectura
9 min
La Anatomía del Infinito: El Game Loop
A diferencia del software web o de escritorio, que espera pasivamente a que el usuario haga clic (Event Driven), un videojuego nunca duerme. Es un bucle infinito `while(true)` que debe completarse en menos de 16.6 milisegundos para lograr 60 FPS. Si tarda 17ms, el jugador notará 'lag'.
// Representación simplificada de un Game Loop en C++
void RunGame() {
Setup();
while (!GameOver) {
double current = GetTime();
double deltaTime = current - lastTime;
ProcessInput(); // 1. ¿Qué presionó el jugador?
Update(deltaTime); // 2. Mover mundo basándose en el tiempo
Render(); // 3. Dibujar el resultado
lastTime = current;
}
}Concepto Crítico: Delta Time
Nunca escribas `posicion = posicion + 5`. Si la computadora es rápida, el personaje volará. Siempre escribe `posicion = posicion + (5 * deltaTime)`. Esto normaliza la velocidad indpendientemente de los FPS.
Los Subsistemas Vitales
Un motor moderno como Unreal Engine 5 es una colección de 'Managers' trabajando en paralelo. Aquí está la jerarquía técnica:
| Subsistema | Responsabilidad Principal | Tecnología Estándar |
|---|---|---|
| Rendering Engine | Convertir vértices 3D en píxeles 2D (Rasterización). | DirectX 12, Vulkan, Metal |
| Physics Engine | Detección de colisiones y resolución de fuerzas. | NVIDIA PhysX, Havok, Jolt |
| Audio Engine | Mezcla de sonido 3D, Doppler y Oclusión. | FMOD, Wwise |
| Scripting Engine | Puente entre el núcleo (C++) y el gameplay. | C# (Mono), Blueprints, Lua |
El Pipeline de Renderizado (Paso a Paso)
Cuando dices 'Render', ocurren miles de operaciones matemáticas en la GPU. Es vital entenderlas para optimizar:
- Input Assembler: La GPU recibe la lista de triángulos (vértices).
- Vertex Shader: Programa que calcula dónde está cada vértice en la pantalla (Matriz de Proyección).
- Rasterizer: Determina qué píxeles cubre cada triángulo.
- Pixel Shader: Calcula el color final de cada píxel basándose en luces y texturas.
- Frame Buffer: La imagen final se envía al monitor.

¿Update o FixedUpdate?
Uno de los errores más comunes de los juniors es no saber distinguir entre el ciclo de juego (Frame variable) y el ciclo de física (Tiempo fijo). La física NO debe correr a los FPS del monitor, debe tener su propio tic de reloj estable (usualmente 0.02s o 50Hz) para ser determinista.
// MALO: Física dependiendo del framerate
void Update() {
rb.AddForce(Vector3.up * 10); // Resultado impredecible
}
// BUENO: Física en intervalos fijos
void FixedUpdate() {
rb.AddForce(Vector3.up * 10); // Resultado consistente siempre
}Conclusión: Sé el Arquitecto, no el Albañil
Cualquiera puede aprender a usar Unity viendo tutoriales. Pero un Ingeniero en Videojuegos comprende la máquina que hay debajo. Sabe por qué un `Mesh Collider` es costoso para la CPU y sabe cómo escribir un *Shader* personalizado cuando el motor no ofrece lo que necesita. Esa es la diferencia entre un hobby y una profesión de alto nivel.
¿Listo para el código real?
En la Facultad de Videojuegos del Instituto Cardan, tu examen final de primer semestre es programar un motor de física 2D desde cero, sin librerías externas. ¿Te atreves?
FAQ
Q.¿Qué es realmente un Game Engine?
Es un Framework de software que abstrae las capas más difíciles del desarrollo: Renderizado (Graphics API), Física (Rigidbodies), Audio (DSP) e Input (HID), permitiendo al desarrollador enfocarse en la lógica del juego (Gameplay).
Q.¿Por qué C++ sigue siendo el rey?
Por el control de memoria. En un motor, el programador debe decidir cuándo nace y cuándo muere cada variable para evitar picos de 'Garbage Collection'. C++ ofrece ese control manual; lenguajes como C# o Python no.
Q.¿Qué es el Delta Time?
Es el tiempo (en milisegundos) que pasó entre el frame anterior y el actual. Es vital para que el juego corra a la misma velocidad en una PC de la NASA y en una laptop vieja.
