Un motor de juego es un marco de software diseñado principalmente para el desarrollo de videojuegos y generalmente incluye bibliotecas relevantes y programas de soporte como un editor de niveles. [1] La terminología "motor" es similar al término " motor de software " utilizado más ampliamente en la industria del software .
El motor de juego también puede referirse al software de desarrollo que respalda este marco, generalmente un conjunto de herramientas y características para desarrollar juegos. [2] [3]
Los desarrolladores pueden utilizar motores de juegos para construir juegos para consolas de videojuegos y otros tipos de computadoras . La funcionalidad principal que normalmente proporciona un motor de juegos puede incluir un motor de renderizado ("renderizador") para gráficos 2D o 3D , un motor de física o detección de colisiones (y respuesta a colisiones), sonido , secuencias de comandos , animación , inteligencia artificial , redes , transmisión, gestión de memoria , subprocesamiento , soporte de localización , gráfico de escena y soporte de video para cinemáticas . Los implementadores de motores de juegos a menudo economizan en el proceso de desarrollo de juegos al reutilizar/adaptar, en gran parte, el mismo motor de juego para producir diferentes juegos [4] o para ayudar a portar juegos a múltiples plataformas.
En muchos casos, los motores de juegos proporcionan un conjunto de herramientas de desarrollo visual además de componentes de software reutilizables. Estas herramientas se proporcionan generalmente en un entorno de desarrollo integrado para permitir un desarrollo rápido y simplificado de juegos de una manera basada en datos . Los desarrolladores de motores de juegos a menudo intentan adelantarse a las necesidades de los implementadores desarrollando paquetes de software robustos que incluyen muchos elementos que un desarrollador de juegos puede necesitar para crear un juego. La mayoría de los paquetes de motores de juegos proporcionan funciones que facilitan el desarrollo, como gráficos, sonido, física y funciones de inteligencia artificial (IA). Estos motores de juegos a veces se denominan " middleware " porque, como en el sentido comercial del término, proporcionan una plataforma de software flexible y reutilizable que proporciona toda la funcionalidad básica necesaria, lista para usar , para desarrollar una aplicación de juego al tiempo que reduce los costos, las complejidades y el tiempo de comercialización, todos factores críticos en la industria altamente competitiva de los videojuegos . [5]
Al igual que otros tipos de middleware, los motores de juego suelen proporcionar abstracción de plataforma , lo que permite que el mismo juego se ejecute en varias plataformas (incluidas las consolas de juegos y las computadoras personales) con pocos cambios, si es que se realizan alguno, en el código fuente del juego . A menudo, los programadores diseñan motores de juego con una arquitectura basada en componentes que permite que sistemas específicos del motor se reemplacen o amplíen con componentes de middleware de juego más especializados (y a menudo más costosos). Algunos motores de juego comprenden una serie de componentes de middleware de juego conectados de forma flexible que se pueden combinar de forma selectiva para crear un motor personalizado, en lugar del enfoque más común de extender o personalizar un producto integrado flexible. Independientemente de cómo se logre, la extensibilidad sigue siendo una alta prioridad para los motores de juego debido a la amplia variedad de usos para los que se aplican. A pesar de la especificidad del nombre "motor de juego", los usuarios finales a menudo reutilizan los motores de juego para otros tipos de aplicaciones interactivas con requisitos gráficos en tiempo real , como demostraciones de marketing , visualizaciones arquitectónicas , simulaciones de entrenamiento y entornos de modelado . [6]
Algunos motores de juegos solo proporcionan capacidades de renderizado 3D en tiempo real en lugar de la amplia gama de funcionalidades que necesitan los juegos. Estos motores dependen del desarrollador del juego para implementar el resto de esta funcionalidad o ensamblarla a partir de otros componentes de middleware del juego. Estos tipos de motores generalmente se conocen como "motor gráfico", "motor de renderizado" o "motor 3D" en lugar del término más amplio "motor de juego". Esta terminología se usa de manera inconsistente, ya que muchos motores de juegos 3D con todas las funciones se conocen simplemente como "motores 3D". Algunos ejemplos de motores gráficos incluyen: Crystal Space , Genesis3D , Irrlicht , OGRE , RealmForge, Truevision3D y Vision Engine . Los motores de juegos o gráficos modernos generalmente proporcionan un gráfico de escena , una representación orientada a objetos del mundo del juego en 3D que a menudo simplifica el diseño del juego y se puede usar para una representación más eficiente de vastos mundos virtuales. [ cita requerida ] La mayoría de los motores de juegos o motores gráficos usan una API de gráficos , que le permite comunicarse fácilmente con la GPU . Pero los juegos más antiguos no tenían aceleración de hardware ni GPU y tenían que construir su propio renderizador de software.
A medida que la tecnología envejece, los componentes de un motor pueden quedar obsoletos o resultar insuficientes para los requisitos de un proyecto determinado . Dado que la complejidad de programar un motor completamente nuevo puede generar demoras no deseadas (o hacer necesario reiniciar un proyecto desde el principio), un equipo de desarrollo de motores puede optar por actualizar su motor existente con funciones o componentes más nuevos.
Antes de los motores de juegos, los juegos se escribían típicamente como entidades singulares: un juego para Atari 2600 , por ejemplo, tenía que ser diseñado desde abajo hacia arriba para hacer un uso óptimo del hardware de visualización; esta rutina de visualización central es hoy llamada kernel por los desarrolladores de juegos para sistemas más antiguos. Otras plataformas tenían más margen de maniobra, pero incluso cuando la pantalla no era una preocupación, las limitaciones de memoria generalmente saboteaban los intentos de crear el diseño con gran cantidad de datos que necesita un motor. Incluso en plataformas más adaptables, muy poco podía reutilizarse entre juegos. El rápido avance del hardware de arcade , que era la vanguardia del mercado en ese momento, significaba que la mayor parte del código tendría que desecharse de todos modos después, ya que las generaciones posteriores de juegos usarían diseños de juego completamente diferentes que aprovecharían recursos adicionales. Por lo tanto, la mayoría de los diseños de juegos hasta la década de 1980 se diseñaron a través de un conjunto de reglas codificadas con una pequeña cantidad de niveles y datos gráficos. Desde la edad de oro de los videojuegos de arcade , se volvió común que las compañías de videojuegos desarrollaran motores de juego internos para usar con software de primera parte.
Un ejemplo notable de un motor de juego interno en las consolas domésticas a mediados de la década de 1980 fue el motor de desplazamiento lateral suave desarrollado por el equipo de Shigeru Miyamoto en Nintendo para el Nintendo Entertainment System (NES). El motor que habían desarrollado para el juego de carreras de desplazamiento lateral Excitebike (1984) se utilizó más tarde para el juego de plataformas de desplazamiento Super Mario Bros. (1985). Esto tuvo el efecto de permitir que Mario acelerara suavemente de caminar a correr, en lugar de moverse a una velocidad constante como en los juegos de plataformas anteriores. [7]
Si bien los motores de juegos de terceros no eran comunes hasta el auge de los gráficos de computadora en 3D en la década de 1990, hubo varios sistemas de creación de juegos en 2D producidos en la década de 1980 para el desarrollo de videojuegos independientes . Estos incluyen Pinball Construction Set (1983), ASCII 's War Game Construction Kit (1983), [8] Thunder Force Construction (1984), [9] Adventure Construction Set (1984), Garry Kitchen's GameMaker (1985), Wargame Construction Set (1986), Shoot-'Em-Up Construction Kit (1987), Arcade Game Construction Kit (1988) y, más popularmente, los motores RPG Maker de ASCII a partir de 1998. Klik & Play (1994) es otra oferta heredada que todavía está disponible. [10]
El término "motor de juego" surgió a mediados de la década de 1990, especialmente en relación con los juegos en 3D, como los juegos de disparos en primera persona con un motor de disparos en primera persona . Epic Games, fundada por el desarrollador Tim Sweeney, debutó con Unreal Engine en el año 1998. [11]
Tal fue la popularidad de los juegos Doom y Quake de Id Software que, en lugar de trabajar desde cero, otros desarrolladores licenciaron las partes principales del software y diseñaron sus propios gráficos, personajes, armas y niveles : el "contenido del juego" o "recursos del juego". La separación de las reglas y los datos específicos del juego de los conceptos básicos como la detección de colisiones y la entidad del juego significó que los equipos podían crecer y especializarse. [10]
Juegos posteriores, como Quake III Arena de id Software y Unreal de Epic Games de 1998 fueron diseñados con este enfoque en mente, con el motor y el contenido desarrollados por separado. La práctica de licenciar dicha tecnología ha demostrado ser una fuente de ingresos auxiliar útil para algunos desarrolladores de juegos, ya que una licencia para un motor de juego comercial de alta gama puede oscilar entre 10.000 dólares estadounidenses y millones de dólares, y el número de licenciatarios puede llegar a varias docenas de empresas, como se vio con Unreal Engine . Como mínimo, los motores reutilizables hacen que el desarrollo de secuelas de juegos sea más rápido y sencillo, lo que es una ventaja valiosa en la competitiva industria de los videojuegos . Si bien hubo una fuerte rivalidad entre Epic e id alrededor del año 2000, desde entonces el Unreal Engine de Epic ha sido mucho más popular que id Tech 4 y su sucesor id Tech 5. [ 12]
Los motores de juegos modernos son algunas de las aplicaciones más complejas que se han escrito, y a menudo cuentan con docenas de sistemas finamente ajustados que interactúan para garantizar una experiencia de usuario controlada con precisión. La evolución continua de los motores de juegos ha creado una fuerte separación entre la representación, la creación de scripts, el diseño gráfico y el diseño de niveles . Ahora es común, por ejemplo, que un equipo de desarrollo de juegos típico tenga varias veces más artistas que programadores reales. [13]
Los juegos de disparos en primera persona siguen siendo los principales usuarios de motores de juego de terceros, pero ahora también se están utilizando en otros géneros . Por ejemplo, el videojuego de rol The Elder Scrolls III: Morrowind y el MMORPG Dark Age of Camelot se basan en el motor Gamebryo , y el MMORPG Lineage II se basa en el Unreal Engine. Los motores de juego también se utilizan para juegos desarrollados originalmente para consolas domésticas; por ejemplo, el motor RenderWare se utiliza en las franquicias Grand Theft Auto y Burnout .
El subprocesamiento está adquiriendo más importancia debido a los modernos sistemas multinúcleo (por ejemplo, Cell ) y a las mayores demandas de realismo. Los subprocesos típicos implican renderizado, streaming, audio y física. Los juegos de carreras normalmente han estado a la vanguardia del subprocesamiento con el motor de física ejecutándose en un subproceso separado mucho antes de que se trasladaran otros subsistemas centrales, en parte porque el renderizado y las tareas relacionadas necesitan actualizarse a solo 30–60 Hz. Por ejemplo, en PlayStation 3, la física se ejecutaba en Need For Speed a 100 Hz frente a Forza Motorsport 2 a 360 Hz.
Aunque el término se utilizó por primera vez en la década de 1990, hay algunos sistemas anteriores en la década de 1980 que también se consideran motores de juegos, como los sistemas Adventure Game Interpreter (AGI) y SCI de Sierra, el sistema SCUMM de LucasArts y el motor Freescape de Incentive Software (en 1986 [14] ). A diferencia de la mayoría de los motores de juegos modernos, estos motores de juego nunca se usaron en ningún producto de terceros (excepto en el sistema SCUMM, que fue licenciado y utilizado por Humongous Entertainment ).
A medida que la tecnología de los motores de juegos madura y se vuelve más fácil de usar, su aplicación se ha ampliado. Ahora se utilizan para juegos serios : visualización, entrenamiento, aplicaciones médicas y de simulación militar , siendo CryEngine un ejemplo. [15] Para facilitar esta accesibilidad, los motores de juegos se están dirigiendo ahora a nuevas plataformas de hardware, incluidos los teléfonos móviles (por ejemplo, teléfonos Android , iPhone ) y navegadores web (por ejemplo , WebGL , Shockwave , Flash , WebVision de Trinigy , Silverlight , Unity Web Player , O3D y DHTML puro ). [16]
Además, se están construyendo más motores de juego sobre lenguajes de nivel superior como Java y C# /. NET (por ejemplo, TorqueX y Visual3D.NET ), Python ( Panda3D ) o Lua Script (Leadwerks). Como la mayoría de los juegos en 3D están ahora limitados en su mayoría por la GPU (es decir, limitados por la potencia de la tarjeta gráfica), la posible desaceleración debido a los gastos generales de traducción de los lenguajes de nivel superior se vuelve insignificante, mientras que las ganancias de productividad ofrecidas por estos lenguajes funcionan en beneficio de los desarrolladores de motores de juego. [17] Estas tendencias recientes están siendo impulsadas por empresas como Microsoft para apoyar el desarrollo de juegos independientes . Microsoft desarrolló XNA como el SDK de elección para todos los videojuegos lanzados en Xbox y productos relacionados. Esto incluye el canal Xbox Live Indie Games [18] diseñado específicamente para desarrolladores más pequeños que no tienen los amplios recursos necesarios para empaquetar juegos para la venta en las tiendas minoristas. Se está volviendo más fácil y económico que nunca desarrollar motores de juego para plataformas que admitan marcos administrados . [19]
Los productores de motores de juegos deciden cómo permiten a los usuarios utilizar sus productos. Así como los juegos son una industria , también lo son los motores en los que se basan. Los principales motores de juegos tienen distintos precios, ya sea en forma de tarifas de suscripción o pagos de licencias. [20] Unity y Unreal Engine son actualmente las dos opciones más populares para los desarrolladores de juegos. [21] Aunque las diferencias entre los diferentes motores de juegos se difuminan a medida que construyen sus propias herramientas sobre ellos, es posible que los diferentes desarrolladores de juegos estén demasiado acostumbrados a un sistema como para cambiarlo, o que se sientan atraídos por los enormes beneficios de dichos motores independientemente de los muros de pago.
En el sentido más amplio del término, los motores de juego en sí mismos pueden describirse como middleware. Sin embargo, en el contexto de los videojuegos, el término "middleware" se utiliza a menudo para referirse a subsistemas de funcionalidad dentro de un motor de juego. Algunos middleware de juego hacen solo una cosa, pero la hacen de manera más convincente o más eficiente que el middleware de propósito general.
Los cuatro paquetes de middleware más utilizados [22] que proporcionan subsistemas de funcionalidad incluyen Bink de RAD Game Tools , Firelight FMOD , Havok y Scaleform GFx. RAD Game Tools desarrolla Bink para renderizado de video básico, junto con audio de Miles y renderizado 3D de Granny . Firelight FMOD es una biblioteca de audio y un conjunto de herramientas robustos de bajo costo. Havok proporciona un sistema de simulación de física robusto, junto con un conjunto de aplicaciones de animación y comportamiento. Scaleform proporciona GFx para una interfaz de usuario Flash de alto rendimiento y reproducción de video de alta calidad, y un complemento de editor de métodos de entrada (IME) para soporte de chat asiático en el juego.
Se utiliza otro middleware para optimizar el rendimiento; por ejemplo, " Simplygon " ayuda a optimizar y generar mallas de nivel de detalle , y " Umbra " agrega optimizaciones de eliminación de oclusión a los gráficos 3D.
Algunos programas de middleware contienen el código fuente completo , mientras que otros solo proporcionan una referencia de API para una biblioteca binaria compilada . Algunos programas de middleware pueden licenciarse de ambas formas, generalmente por una tarifa más alta para el código fuente completo.