¿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?
¿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?
Respuestas:
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.
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.
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.