2010-06-08 13 views
16

A menudo vemos que se lanzará un nuevo juego en Xbox 360, PS3 y PC con Windows.¿Cómo manejan las compañías de juegos la programación para múltiples plataformas?

¿Cómo lo hacen las compañías de juegos? ¿Es un código fuente común compilado usando diferentes compiladores? ¿Se requieren códigos fuente diferentes?

ejemplo, el artículo de prensa anunciando esto: http://www.gameranx.com/updates/id/502/article/dungeon-siege-3-announced-to-be-developed-by-obsidian/

+0

espero que utilizan código común por encima de la capa específica de hardware, por lo que en XBox pueden usar DirectX y también lo han hecho las bibliotecas de esa capa, pero tendrán la misma interfaz para la capa de OpenGL en Linux, por lo que sólo hay que cambiar las bibliotecas de gráficos/audio/IO para ir de una plataforma a otra. –

+0

XNA es un ejemplo razonablemente bueno de lo que James Black está hablando: en teoría, al menos, reduce significativamente el esfuerzo de desarrollo tanto para Windows como para Xbox al mismo tiempo. –

Respuesta

14

En general, la gran mayoría de los títulos multiplataforma "triple-A" se implementan en la parte superior de un motor como Unreal, Source u otros motores más pequeños. Cada uno de estos motores se implementa de forma personalizada y se optimiza para cada plataforma y puede usar una API de nivel inferior, como DirectX/OpenGL, que a su vez usa la consola. Cada uno de estos motores también tiene complementos para cosas específicas de la plataforma (por ejemplo, controles de movimiento) que interactúan con los controladores oficiales o las API del hardware.

Muchos de estos motores de apoyar a sus propios lenguajes de script o ganchos para muchas cosas, por lo que es escribir una vez.

Por ejemplo, echar un vistazo al motor irreal: http://www.unrealtechnology.com/technology.php

La mayoría de los motores más grandes, como Unreal son tan flexibles y robustos que permiten a los desarrolladores escribir todo tipo de juegos. Por ejemplo, el motor Unreal se usó no solo para tiradores, sino también para juegos de disparos como Mass Effect.

Recuerde que la mayoría de la mano de obra en la fabricación de juegos está dedicado a los gráficos, escenógrafos, diseño de audio, diseño de niveles, etc., y hay editores personalizados para todo eso. Muchas de las piezas configuradas generalmente se programan a través de lenguajes de scripting. Solo una pequeña parte de la gente en las compañías de juegos realmente escribe código en lenguajes de bajo nivel como C.

3

Muchos lugares tienen equipos distintos, responsables de diferentes versiones. Es por eso que siempre ves algunas pequeñas diferencias. Sin embargo, si se elige un idioma portátil, estos equipos pueden intercambiar códigos.

Si la empresa produce un motor de juego, los desarrolladores pueden desarrollarse además de eso, dejando el motor para manejar las características de la plataforma cruzada.

Supongo que el departamento de arte/medios es el mismo para todas las plataformas.

2

Esto se logra a menudo con una máquina virtual que maneja mecánicas de juegos que no son de tiempo crítico y una capa de abstracción para operaciones de tiempo crítico pero específicas de la plataforma.

Los métodos particulares son altamente privados, secretos, y son uno de los activos más valiosos del creador de juegos.

1

Esto es toda una suposición porque no trabajo para una compañía que hace juegos de consola, pero hablando por experiencia como desarrollador de software lo que imagino sucede muchas veces es que las bibliotecas externas se usan contra el código fuente que está escrito en un lenguaje común, como C++ o algo así. Se puede usar gran parte del código central del juego (bucle del juego, material de física, etc.) porque la sintaxis es la misma en todas las plataformas.

Sin embargo, hay un gran grado de código que debe escribirse (y probarse) que es exclusivo de la plataforma. Por ejemplo, la mayoría (si no TODO) del código relacionado con la tarjeta gráfica tendría que ser diferente para la Xbox 360 frente a la PS3.

Esto permite un alto grado de portabilidad en las funciones básicas y luego las cosas de la interfaz de usuario y los elementos relacionados con los gráficos son específicos de la plataforma (no siempre para la interfaz de usuario).

Además, las compañías de juegos grandes tienen cientos de desarrolladores trabajando en un proyecto, por lo que tienen muchos más recursos que algunos desarrolladores independientes.

Sin embargo, nunca es perfecto. Siempre tiene que portar ALGÚN código. A menos que esté utilizando Adobe AIR, pero su juego es para consolas (¿y quién usa Adobe AIR para desarrollar juegos REALES?)

+0

Tengo serias dudas de que un proyecto de juego grande tenga cientos de desarrolladores. Los desarrolladores son caros y los grandes equipos de desarrolladores son incluso más caros, con todos los gastos administrativos adicionales. La mayoría de las tiendas preferirían tener solo unos pocos desarrolladores, reutilizar los motores existentes y luego invertir el presupuesto de su proyecto en contenido (arte, niveles, historia, etc.) –

+1

Muchos juegos tienen cientos de personas trabajando en ellos, pero la mayoría de ellos son artistas . Creo que los desarrolladores de software actuales están en el rango de 10 a 30, dependiendo de la cantidad de desarrollo que se desarrolle en el juego. –

3

En realidad, existen algunos marcos que se pueden ejecutar en múltiples plataformas.

Por ejemplo:

  • El XNA Framework puede ejecutar en Windows, Xbox y Windows Phone con casi la misma base de código. (Aproximadamente el 90% del mismo código C# puede ejecutarse en todas las plataformas.)
  • Unity 3D es compatible con PC, MAC, navegadores, iPhone, Wii, y pronto también será compatible con Android.

También hay otros frameworks similares.

Además, la mayoría de los motores de juegos populares (por ejemplo, Unreal, etc.) se transportan a través de plataformas múltiples.

+0

Unity3D (http: // unity3d.com /) es compatible con PC, MAC, navegador, iPhone, Wii, sson Android. – bertelmonster2k

+0

@ bertelmonster2k - Gracias, también es un buen ejemplo. Lo agregué a mi respuesta si no te importa. :) – Venemo

+0

Estoy seguro de que unity3d pronto dejará de admitir iPhone teniendo en cuenta la mierda de iOS 4.0. http://arstechnica.com/apple/news/2010/04/steve-jobs-weighs-on-iphone-os-dev-controversy.ars Pero quién sabe. Apple es bastante voluble. – NotMe

5

El motor se encarga de esto proporcionando una capa independencia de la plataforma. Cosas que varían entre las plataformas, por ejemplo, la biblioteca de gráficos. enhebrado, reloj y sistema de archivos, etc .; se implementan para cada plataforma en el motor del juego.

Puedo hacer una llamada al motor para representar un modelo 3D que consiste en triángulos. El motor, a su vez, representa este modelo llamando a la capa de independencia de la plataforma que utiliza una implementación para la plataforma actualmente utilizada.

4

hay dos empresas modos de juego hacen esto:

1) Escritura/uso de un motor multiplataforma 2) Trasladar un juego

Un motor multiplataforma contará con abstracciones para las acciones específicas de la plataforma (haciendo un equipo con Windows Llamada a la API, representación en DirectX frente a OpenGL, etc., etc. para que todo el trabajo se pueda hacer una vez y luego se pueda crear para ambas máquinas. Por lo general, se trata de escribir métodos de envoltura simples para cosas como llamadas Direct3D y otras cosas. La mayoría de los motores de juegos más nuevos se están construyendo desde cero con soporte multiplataforma. Otros están agregando soporte multiplataforma.

Si un motor de juego no es multiplataforma, tiene que convertirse para ejecutarse en la plataforma de destino. Esto es generalmente una operación de dos partes. En primer lugar, todas las llamadas a la API y las interfaces con el hardware deben rehacerse para la plataforma objetivo. La segunda parte implica la depuración y optimización del juego para el rendimiento. Normalmente, un puerto directo no funcionará muy bien, ya que el código ofrecerá optimizaciones específicas de la plataforma que no se aplican a la nueva plataforma objetivo.

Por diversas razones, los juegos portados pueden sufrir problemas de rendimiento, por lo general a pesar de efectos visuales diluidos. Eche un vistazo a The Orange Box en PS3 o CoD: Modern Warfare para Wii para ver dos ejemplos de puertos que salieron mal. Para el OB, Valve subcontrató la tarea de portar el (los) juego (s) a EA. En la segunda instancia, Activision decidió que tenía más sentido llevar un juego en un motor diseñado para hardware más potente a una plataforma más débil en lugar de construir el juego sobre un nuevo motor diseñado para sacar el máximo provecho de la Wii.

1

Las compañías de juegos utilizan middleware comercial, como RenderWare que no es barata. La mayoría de las plataformas de juegos también admiten un entorno de C++ para compilar el código. Además, la mayoría de las consolas vienen con una versión de Desarrollo (Playstations do) y hay simuladores para probar la mayoría del código. Este middleware ahora es propiedad de EA (que es como el jugador gigante en el campo). Crear juegos en 3D no es solo un marco. La mayor parte del juego proviene de un documento de diseño, que documenta el flujo del juego y el juego. La obra de arte se realiza en otro software (Maya y Lightwave, por ejemplo) y los "modelos" que son los personajes del juego.

A pesar de que puede parecer horrible mucho trabajo, cuando se trata de codificación, no es gran cosa. Escribir la funcionalidad principal lleva una semana u ocho, el resto es más en diseño y planificación. Solo recuerda que 3D es solo el 10% del juego en general. Estos son mis dos centavos como antiguo desarrollador de juegos.

2

Recuerdo haber leído una entrevista (o tal vez fue un archivo/blog .plan) que John Carmack dio hace unos años. Él estaba discutiendo el desarrollo de múltiples plataformas. (Si la memoria sirve, esto fue en el momento en que lanzaron títulos para plataformas móviles). El consejo que dio fue dirigirse siempre a la plataforma con las especificaciones de sistema más bajas que planea apoyar primero. Su razonamiento fue que es mucho más fácil escalar que bajar. Si te enfocas en los últimos gráficos de gama alta, es probable que termines dependiendo de las características que solo están disponibles en el extremo superior. Por lo que es muy difícil reducir el tamaño de los sistemas principales y de gama baja. De todos modos, pensé que era un buen consejo.

+0

Eso va más o menos para cualquier tipo de desarrollo, ¿no es así? – Rook

0

Yo diría "en gran medida no lo hacen". Todo el dinero está en Windows o en consolas y muchas consolas quieren una licencia exclusiva. He visto algunos puertos pero siempre son una base de código separada de una versión anterior.

0

Muy a menudo utilizan #define (por ejemplo, en código C++) así que antes de la compilación para la plataforma especificado el código apropiado se incluye o se utiliza. En proyectos más grandes, a veces las partes de un juego son totalmente diferentes y están escritas en diferentes IDE y compiladas en compiladores diferentes (específicos de la plataforma).

Ejemplo de mi experiencia: Cuando estaba trabajando en un juego para Nintendo Wii, estábamos usando el motor de juego Torque. Estábamos programando en PC y compilando código para PC. Cuando alguna funcionalidad estaba lista usamos Metrowerks CodeWarrior (con un conjunto especial de bibliotecas, etc.) para compilarla para Nintendo Wii, enviarla al devkit y luego ejecutarla desde la consola Nintendo Wii.

Cuestiones relacionadas