Motor de videojuego
sistema diseñado para la creación y desarrollo de videojuegos
From Wikipedia, the free encyclopedia
Un motor de videojuego (en inglés game engine) es un framework que proporciona herramientas para la creación de videojuegos.[1][2]

Un motor de videojuego suele dotar al videojuego de un motor gráfico para renderizar gráficos 2D y 3D, un motor físico que simule las leyes de la física y detección de colisiones, y herramientas para poder crear las animaciones, scripts, sonidos, inteligencia artificial, redes, gestión de memoria, y demás sistemas del videojuego.[3]
Los motores de videojuegos proporcionan herramientas de desarrollo, a menudo en un entorno de desarrollo integrado que permiten crear videojuegos como es el caso de Godot, Unreal, o Unity.[4] Otros motores de videojuego no tienen interfaz gráfica de usuario y ofrecen herramientas más elementales para la creación de videojuegos, como es el caso de Raylib, Pygame, o Löve.[5]
Los motores de videojuego también se utilizan para crear otros tipos de aplicaciones interactivas, como es el caso de los juegos serios,[6] visualizaciones arquitectónicas, videojuegos educativos,[7] simuladores,[8] herramientas de modelado 3D, entre otros.
Historia
Antes de la aparición de los motores de videojuegos, estos eran desarrollados como proyectos completamente independientes, sin una separación clara entre áreas, como los gráficos o las físicas. Por ejemplo, un videojuego para el Atari 2600, tenía que ser planeado desde cero, manteniendo el código más simple posible, para hacer un uso optimizado del hardware, debido a sus limitaciones.[9][10]
Existen antecedentes de softwares de los años 80 que también se los consideran como motores de videojuego, tales como Adventure Game Interpreter (1984), Sierra's Creative Interpreter (1988), LucasArts SCUMM (1987) y Freescape Engine (1986).[11] Sin embargo, a diferencia de la mayoría de los motores de videojuego modernos, estos nunca fueron usados por desarrolladores de tercera, con excepción de SCUMM que fue licenciado y utilizado para Humongous Entertainment.[cita requerida] El primer motor de videojuego en 3D que se utilizó para crear videojuegos de computadora fue el Freescape Engine,[12] desarrollado por Incentive Software en 1986, utilizado para crear juegos de disparos en primera persona a partir de 1987.[11]
No fue sino hasta la década de los noventa cuando se extendió el término motor de videojuegos dentro del contexto de los videojuegos de disparos en primera persona.[2] La gran popularidad que alcanzaron los videojuegos Wolfenstein 3D, Doom y Quake[13] se debe principalmente a que, en lugar de crear un videojuego desde cero, se licenciaron los núcleos del mismo para utilizarlos como base y crear sus propios motores de videojuego. Al madurar esta tecnología, los motores de videojuego dejaron de restringirse al mero desarrollo de videojuegos. Se comenzaron, de hecho, a implementar en otras áreas, como entrenamiento profesional, uso médico y simulaciones militares.[14]
A pesar de que ya se habían creado videojuegos mucho antes de la creación de APIs como DirectX y OpenGL, su creación impulsó la evolución de las tecnologías usadas en videojuegos y ayudó a desarrollar ese mercado.[15] La primera versión de DirectX fue lanzada el 30 de septiembre de 1995 bajo el nombre de Windows Games SDK. Fue el componente de Win32 API que reemplazó a DCI, y WinG de Windows 3.1.[16] Después de ser creado, DirectX ha estado presente en todas las versiones de Windows. A pesar de que OpenGL se creó primero (enero de 1992), durante muchos años DirectX fue más usado en el área de desarrollo de videojuegos debido a los esfuerzos de Microsoft por promocionarlo.[17]
Durante mucho tiempo, las compañías han hecho sus propios motores de videojuego.[13] Pero debido al alto costo de desarrollar un motor, es cada vez más común el uso de motores de propósito general hechos por terceros,[18] algunos hechos por empresas especializadas en crear estos motores como Unity o Unreal Engine, y otros son proyectos de software libre como Godot.
Los motores de videojuego modernos son aplicaciones complejas.[19][12] Su continua evolución ha creado una fuerte separación entre algunas de sus áreas fundamentales, como la renderización, el scripting, los conceptos artísticos y el diseño de niveles. Como la mayoría de los videojuegos actuales están cada vez más limitados al poder de la GPU y PPU, las pérdidas de rendimiento en lenguajes de programación de alto nivel, como C#, Java y Python ya no son tan relevantes, mientras que las ganancias de productividad ofrecidas por estos lenguajes trabajan en beneficio de quienes desarrollan motores de videojuegos.[20][21]
Componentes principales
Los componentes que posee un motor de videojuego en la actualidad tienen una gran variedad de características muy diferentes entre sí.
Abstracción de hardware
Los motores de videojuegos suelen proporcionar abstracción de hardware,[22][23][24] lo que permite a un programador desarrollar videojuegos sin la necesidad de conocer la arquitectura del hardware donde este va a funcionar. Por este motivo, muchos motores se desarrollan a partir de una API existente, como DirectX, OpenGL Vulkan, OpenAL o SDL.[25] La abstracción de hardware también es esencial para el desarrollo de motores con características multiplataforma.
Motor de renderizado

La renderización es el proceso en el cual se generan los gráficos 3D por computadora para mostrar en pantalla el aspecto visual del videojuego.[19] Este proceso se encarga de mostrar escenarios, modelos, animaciones, texturas, sombras, iluminaciones y materiales.[26] En este proceso, los sombreadores juegan un papel fundamental, ya que son programas que se ejecutan para definir cómo se procesan los vérticles, colores, iluminación, y otros efectos visuales en cada píxel.
La mayoría de las veces el motor de renderizado hace uso de una API gráfica para el renderizado, como Direct3D, OpenGL o Vulkan,[19] que proporcionan una abstracción del software en la GPU.
Los motores de videojuegos usan mallas poligonales para mostrar objetos tridimensionales. A mayor cantidad de vértices tengan esos polígonos mayor será el detalle del objeto, pero también será más complejo para la computadora mostrarlo.
Por ello existen técnicas como el nivel de detalle que consiste en ir usando polígonos con mayor cantidad de vértices para los objetos cercanos y con menos vértices para los objetos lejanos, o la distancia de dibujado que consiste en dejar de mostrar objetos cuando están tan lejos que el jugador no pueda apreciarlos y así reducir la cantidad de polígonos la computadora debe mostrar.
Sistema de audio
Hoy en día los motores de videojuego soportan muchos formatos de archivo de audio, y de reproducir sonidos. Estos sistemas suelen gestionar música en bucle, efectos de sonido, y voces. Permitiendo ajustes dinámicos de volumen o tono.
El sistema de audio se encarga de cargar, decodificar y reproducir el sonido a través del hardware del usuario. En implementaciones más avanzadas, también incorpora efectos como reverberación, eco o efecto Doppler, o localización del sonido en tiempo real mejorando la inmersión. Para facilitar su desarrollo, se emplean APIs de abstracción como SDL Audio, OpenAL, o DirectSound, que simplifican la interacción con el hardware de audio.

Motor físico
El motor físico es el software responsable de simular ciertos sistemas físicos del motor de videojuego,[1] como las colisiones, la gravedad, la masa, la fricción, o la fuerza.[1][25]