Cada vez que hago una pregunta sobre el desarrollo de juegos en un foro en línea, siempre recibo sugerencias como aprender algoritmos de dibujo lineal, manipulación de imágenes a nivel de bits y descompresión de video, etc.
Sin embargo, mirando juegos como God of War 3, me resulta difícil creer que estos juegos puedan desarrollarse utilizando técnicas de tan bajo nivel.
La genialidad de tales juegos desafía cualquier metodología de programación comprensible (para mí).
Además, el hardware de juego es realmente un monstruo hoy en día. Por lo tanto, es lógico que los desarrolladores trabajen en un nivel más alto de abstracción.
¿Cuál es la última metodología de desarrollo en la industria del juego? ¿Cómo es que un equipo de 30-35 desarrolladores (de los cuales la mayoría es peluquero de gestión y marketing) es capaz de hacer juegos tan alucinantes?
Si la pregunta parece demasiado general, ¿podría explicar la arquitectura de God of War 3? ¿O cómo harías para producir un clon? Eso creo que debería ser objetivamente responsable.
Respuestas:
Exención de responsabilidad: soy no un desarrollador de juegos de vídeo. Pero tengo un interés "aficionado" en ello.
La mayoría de los juegos AAA que ves están hechos con motores. No están escritos desde cero. Piense en un motor como un marco. Tiene .NET Framework, Java SDK, Cocoa toolkit.
Todo para facilitar su trabajo de crear software y abstraer el código del fregadero de la cocina. Es necesario, pero escribirlo cada vez es muy improductivo.
El uso de estos motores de desarrollador puede construir su juego y no tener que preocuparse por parte del código subyacente. ( No se equivoque, el desarrollo de juegos es una de las ramas más difíciles de la ingeniería de software ) .
Por ejemplo, Unreal Engine 4 tiene un kit de desarrollo y estudio asesino:
http://www.youtube.com/watch?v=MOvfn1p92_8
Hay muchos motores diferentes por ahí. Algunos pagaron, algunos gratis, algunos más hasta el metal, otros ofrecen una mayor abstracción.
Por ejemplo:
fuente
En referencia al comentario de gbjbaanb, algunas de las cosas que hacen que la programación del juego sea divertida es la vida útil limitada de la base del código y la falta de precisiones precisas. Por ejemplo, si está diseñando un juego FPS, y su algoritmo de movimiento a veces coloca a su personaje en unos pocos píxeles, no es gran cosa y es probable que nadie lo note. Si está diseñando una pieza de software empresarial y ocasionalmente su función de suma le ahorra unos pocos dólares, es un error mucho más grave. Entonces, al diseñar juegos, algunos aspectos pueden ser mucho menos precisos (y solo tienen que pasar pruebas humanas, en lugar de un conjunto de pruebas automatizadas que verifica que las respuestas sean correctas).
Mi experiencia ha sido que la programación de juegos, especialmente para juegos en tiempo real, es una experiencia muy diferente de ... casi cualquier otro desarrollo de software que haya realizado, tal vez excepto el trabajo de GUI. ¡Es algo que debes probar!
fuente
La respuesta es "motores". Muchos juegos están construidos sobre varios gráficos y motores de juego que son básicamente grandes bibliotecas o marcos.
En el mundo de OSS, eche un vistazo a Ogre, por ejemplo, para juegos comerciales que tiene cosas como Source.
Hay otros factores en juego, como que gran parte del código es desechable y no pasaría bien en un entorno empresarial, pero eso se debe a que la vida útil limitada de un juego y las escalas de tiempo de desarrollo acelerado significan que el código está (casi) diseñado solo para trabajar, no para ser mantenido.
fuente
Unity3D es realmente agradable. Aquí hay algunos puntos que me gustan:
http://en.wikipedia.org/wiki/Unity_(game_engine)#Major_features
http://unity3d.com/unity/licenses
http://unity3d.com/unity/editor/importing (desplácese hacia abajo un poco)
La codificación (scripting) se puede hacer en C #, que es un buen lenguaje, con una buena API y comprobaciones de tiempo de compilación. Viene con un buen entorno de desarrollo (IDE y todo). Si quieres algo diferente, también es compatible con Javascript.
Tiene muy buen soporte físico (colisiones, gravedad, fuerzas, etc.):
http://docs.unity3d.com/Documentation/Manual/Physics.html
Tiene una tienda de activos que le permite comprar varios modelos, scripts, animaciones, etc., y dependiendo de su habilidad (y billetera) puede obtenerlos / modificarlos para obtener rápidamente recursos decentes para su juego.
Por último, pero no menos importante, es decentemente rápido. Echa un vistazo a las demostraciones móviles, en mi humilde opinión, se mueven bastante bien y tienen gráficos muy decentes:
http://unity3d.com/gallery/made-with-unity/game-list
Aquí hay un buen proyecto de Unity que estoy esperando actualmente:
Wasteland 2 de Brian Fargo
Tienen una buena entrada en el blog sobre por qué eligieron Unity , y otros que discuten cómo funciona .
fuente
ID Software es uno de los proveedores que generalmente publica juegos de última generación. Unos años más tarde, a menudo los lanzan como código abierto. En http://fabiensanglard.net/quake3/index.php puede encontrar un análisis del código fuente de Quake3. Esta es una descripción bastante detallada y, aunque Quake3 es bastante antiguo, los conceptos aún deberían ser relevantes para los juegos modernos.
Y sí, si quieres construir un motor de juego moderno, rápido, competitivo y moderno, tendrás que conocer todas esas piezas de bajo nivel. Si no quieres preocuparte por eso: hay diferentes motores (motor quake3 o los de otras respuestas) disponibles pero bueno, entonces no estás creando un nuevo juego revolucionario ;-)
fuente
Como muchas respuestas mencionan, los motores de juego y las bibliotecas juegan un papel importante. Sin embargo, tenga en cuenta que esto se aplica a los juegos comerciales medianos más que a los pequeños juegos "indie".
Por ejemplo, en las plataformas móviles, la mayoría de los juegos se escriben usando solo un conjunto de bibliotecas relativamente primitivas en lugar de depender de los motores de juegos en toda regla y los marcos. Existen, pero en su mayor parte se trata de reutilizar su propio código de proyectos anteriores.
fuente