¿Cómo se crean los juegos para diferentes plataformas?

9

¿Cómo se crean los juegos para diferentes plataformas?

Por ejemplo, Call of Duty: Modern Warfare 3 está disponible en PS3, Xbox 360, Wii y PC.

¿Están completamente reprogramados sin código común? ¿Hay algún código intermedio?

Adriano Silva
fuente
3
Por lo general, todo se hace en C ++ y las cosas específicas de la plataforma se relegan a un par de clases.
cenizas999

Respuestas:

11

La mayoría de los motores de juego de nivel de producción tienen lo que se conoce como una capa de abstracción de hardware. Esta es una API genérica que el motor del juego puede usar para hablar con el hardware sin tener que saber qué hardware es. Simplemente llaman a SoundManager.PlaySFX (SFX_ID) o similar. Debajo, en el administrador de sonido, sin embargo, sabrá en qué hardware está trabajando realmente y hará las llamadas apropiadas para que se reproduzca el efecto de sonido.

Esto permite que el motor se desarrolle utilizando esa capa de abstracción para que pueda ejecutarse en cualquier sistema siempre que se proporcione una API para ese hardware que coincida con la abstracción. EDITAR: como señaló Johnathan, se requiere una API para cada plataforma en la que desea ejecutar. Y para el punto de Trevor, al pasar de un sistema de memoria alta a una memoria baja (lo peor para mí fue PS3 a PSP) puede que tenga que abordar las diferentes limitaciones de hardware. Afortunadamente para mí, no tuve que reescribir un sistema completo debido a una plataforma, pero tuve que revisar y optimizar objetos para ocupar menos espacio.

El otro lado de las cosas está en el área de arte donde las resoluciones de texturas o modelos y similares son diferentes. Los activos del juego se pueden construir hacia un objetivo específico para que una PC obtenga sus archivos wav para sus efectos de sonido mientras se convierten en los formatos específicos que admite la PS3 y similares.

Espero que esto ayude.

James
fuente
1
Agregaré a esto que en la mayoría de los casos, PC / PS3 / Xbox360 compartirá una base de código común, mientras que Wii / PS2 / PSP compartirá una base de código diferente. Gameboy tendrá una base de código separada, y iPhone / Android generalmente compartirá una base de código. Esto se debe principalmente a los amplios niveles de potencia de procesamiento, la memoria disponible y las facultades gráficas de las diversas plataformas. Una vez tuve que portar un juego de Xbox 360 a PS2; Muy poco del código original sobrevivió al proceso, solo porque suponía que había mucha RAM disponible para su uso; Tuve que reescribirlo para usar menos memoria.
Trevor Powell
+1, No mencionaste explícitamente que el HAL es diferente entre plataformas (la razón por la que Psykocyber también respondió), ¿tal vez agregar que necesitas un HAL para cada plataforma? Además, usar ANSI C / ++ es probablemente un requisito, ya que necesita compilarlo de forma cruzada.
Jonathan Dickinson el
Trevor: ¿Gameboy? Maldición, debo haber viajado al pasado, mejor volver a mi máquina del tiempo ...
3

Las otras respuestas explican las cosas en los casos ideales. La mayoría del código es común para los juegos, y se utiliza una capa de abstracción limpia para las partes dependientes de hardware / plataforma.

Sin embargo, muchos juegos tienen puertos realizados por una empresa subcontratada, y el código diverge significativamente. Esto es especialmente cierto con las consolas, pero también es común en los puertos a OSX o Linux desde Windows.

En las consolas, el hardware es lo suficientemente diferente como para que a menudo se reescriban completamente fragmentos enteros de la representación central (y rara vez también otros sistemas). En la PC, puede hacer un resumen sobre D3D y OpenGL, ya que las API del sistema operativo difieren pero todo el hardware de la PC es más o menos el mismo.

En el espacio de la consola, es posible que su magnífico motor de renderizado súper eficiente sea absolutamente imposible de transferir directamente a una consola diferente, ya que las capacidades de la GPU son muy diferentes y literalmente necesita exprimir hasta el último porcentaje de rendimiento para obtener 7 años hardware antiguo para ejecutar tu juego moderno. Puede encontrar fácilmente casos en los que los pases de iluminación que funcionan mejor en la XBox son terriblemente lentos en la PS3, y donde el mejor enfoque en los perros de la PS3 en la XBox. Las otras diferencias de hardware y plataforma (por ejemplo, las SPU en la PS3 frente a la CPU de tres núcleos de la XBox) hacen que sea muy difícil confiar en una capa de abstracción de hardware delgada y simple como su única ruta de código dependiente de la plataforma.

Dado que cada plataforma también requiere una gran cantidad de experiencia para utilizarla adecuadamente, muchos juegos requieren una empresa de portación tercerizada especializada para llevar el juego a plataformas adicionales. En el espacio de la PC, a veces puede encontrar desarrolladores en solitario que hacen los puertos (como Ryan "icculus" Gordon, que hace muchos puertos de juegos Linux; trabajo directo generalmente, cambiando D3D a GL y Win32 a POSIX / SDL), mientras que en el espacio de la consola Hay compañías con todos los equipos para realizar trabajos de portabilidad bastante masivos para juegos más grandes.

Los puertos a algunas plataformas requieren reescrituras casi completas o rediseños de activos. Los puertos de Call of Duty de Wii, por ejemplo, los realizó una empresa subcontratada, y todo, incluidos los activos de arte, tuvieron que rehacerse para ajustarse a las limitaciones del hardware muy limitado de Wii. La Wii ni siquiera tiene sombreadores, por ejemplo, así que simplemente reutilizar el mismo motor y efectos / materiales era absolutamente imposible, y la memoria limitada y la CPU / GPU requerían texturas más pequeñas y modelos con menos detalles, además de limitaciones de juego, etc. Asimismo, los puertos a plataformas móviles generalmente se reescriben por completo, generalmente por un tercero.

Los motores más nuevos facilitan el puerto entre plataformas, pero los juegos más grandes generalmente todavía necesitan actualizar porciones considerables de su código y rehacer muchos activos para cambiar de plataformas y consolas de PC más capaces a plataformas más restringidas.

Sean Middleditch
fuente
2

La respuesta de James solo se relaciona con la PC y no con la implementación en plataformas específicas.
Si bien todos los motores resumen la plataforma para la gran mayoría del código del juego, algunas partes deben escribirse por plataforma. Esto incluye todas las E / S, incluida la red, el renderizado, el audio, la entrada del dispositivo y la salida de video Creo.
Compare el código de representación de say Unreal en Xbox y PS3. La Xbox usa la versión Xbox DirectX, mientras que la PS3 usa libgcm (la biblioteca OpenGl es demasiado lenta). Para simplificarlo un poco, en todas las plataformas los programadores del juego solo ven un "AudioSystem.PlaySound ( SoundName aquí ), mientras que para cada plataforma funcionan internamente llamarían a la API de las plataformas para la salida de sonido.
Vea también el comentario de Tatrad para más programación.

Peter Ølsted
fuente
1
Esto es exactamente lo que dijo James, simplemente se olvidó de mencionar que el HAL es diferente para cada plataforma.
Jonathan Dickinson el
De hecho, mencioné que se ejecutará en cualquier sistema para el que se proporcione una API HAL, pero lo dejé más claro ya que esto claramente estaba causando confusión. Además, no transfiere el código de la PC a otra PC a menos que vaya a cruzar el sistema operativo como un sistema Mac o Unix. Para los entornos de Windows, donde se ejecutan la mayoría de los juegos, son los controladores de hardware los que ya manejan esto, usted crea un búfer de datos DirectX u OpenGL a través de las llamadas del controlador y el hardware sabe qué hacer desde allí.
James