lunes, 6 de octubre de 2014

Tecnologías en los Videojuegos Modernos

Hola, mi nombre es Federico Volker y este es un trabajo para la materia Nuevas Tecnologías de la Información y la Conectividad y espero que disfruten este blog, ya que es un tema que a mi me interesa y espero que a ustedes también. Lo haré de forma individual.

The Elder Scrolls V: Skyrim
Actualmente se utilizan diferentes programas de diseño gráfico, programación, animación, sonido, actuación, etcétera. En sí mismos son utilizados por una sola persona (videojuegos de desarrollador independiente, como por ejemplo "Slender").
Slender
O por muchos profesionales que se encargan de una parte especifica del videojuegos, como por ejemplo en programas de diseño gráfico, en esta parte se pueden ver empresas de videojuegos como CAPCOMKONAMI o Naughty Dog, entre otros...
En estas empresas se pueden ver juegos muy conocidos como FIFA 14, Metal Gear Solid, Uncharted, Resident Evil, etcétera.
Distintos Metal Gear Solid a través de la historia
Trilogía de Uncharted
Los videojuegos comerciales para PC y videoconsolas son normalmente financiados por una distribuidora y tardan varios años en desarrollarse. Los videojuegos independientes pueden tomar menos tiempo y pueden ser producidos a bajo precio por individuos y pequeños desarrolladores. La industria de videojuegos independientes ha visto un aumento en los últimos años con el crecimiento de los nuevos sistemas de distribución en línea y el mercado de juegos para móviles.
Los primeros videojuegos fueron desarrollados en la década de 1960, pero requerían grandes ordenadores y no estaban disponibles para el público en general. El desarrollo del videojuego comercial comenzó en 1970 con la llegada de la primera generación de consolas de videojuegos y ordenadores domésticos. Debido a los bajos costos y bajas capacidades de las computadoras, un programador solitario podría desarrollar un juego completo. Sin embargo, al acercarse el siglo 21, el cada vez mayor poder de procesamiento y las aumentadas expectativas del consumidor hicieron que sea difícil que un único programador produzca un videojuego para ordenador o videoconsola. El precio promedio de la producción de un videojuego lentamente aumentó de $1-4 millones de dólares en 2000 a más de $5 millones en 2005, y luego a más de $20 millones en 2010. Sin embargo, los videojuegos independientes para móviles, o basados en la web pueden costar mucho menos.1
PAC-MAN Clásico juego arcade de los principios de los videojuegos

Proceso:

El desarrollo de un videojuego generalmente sigue el siguiente proceso:

  • Concepción de la idea del videojuego
  • Diseño
  • Planificación
  • Producción
  • Pruebas
  • Mantenimiento

El proceso es similar a la creación de software en general, aunque difiere en la gran cantidad de aportes creativos (música, historia, diseño de personajes, niveles, etc) necesarios. El desarrollo también varía en función de la plataforma objetivo (PC, móviles, consolas), el género (estrategia en tiempo real, rpg, aventura gráfica, plataformas, etc) y la forma de visualización (2d, 2.5d y 3d).
Videojuego en 2D
Videojuego en 2.5D
Videojuego en 3D
(Una imagen vale mas que mil palabras, ¿verdad?)

Concepción:
En esta etapa es necesario definir los aspectos fundamentales que conformarán el videojuego, entre los que se encuentran:

  • Género: Dentro de que género o géneros se va a desarrollar el juego. De no corresponder a un género conocido, se deben especificar las características.
  • Game play: Lo que generará diversión a la hora de jugarlo.
  • Story board: Algunas ideas sueltas acerca de cómo debe lucir el juego en cuanto a personajes, ambientación, música, etc.
Diseño:
En esta fase se detallan todos los elementos que compondrán el juego, dando una idea clara a todos los miembros del grupo desarrollador acerca de cómo son. Entre estos elementos tenemos:
  • Historia: forma en que se desenvolverán los personajes del juego y la historia del mundo representado avanza. Casi todos los juegos tienen historia.
  • Guión: el proceso comienza con una reunión de todo el equipo de desarrollo, para que todo el mundo tenga la oportunidad de aportar sus ideas o sugerencias al proyecto. A partir de aquí el equipo de Guión trabaja por conseguir un borrador en el que queden plasmados cuales serán los objetivos en el juego, las partes en las que se dividirá, el contexto en el que se desarrollará la acción, y cuales y cómo serán los principales personajes del juego.
  • Arte conceptual: se establece el aspecto general del juego. En esta etapa un grupo de artistas se encargan de visualizar o conceptualizar personajes, escenarios, criaturas, objetos, etc. Estos artistas se basan en las ideas originales de los creadores y luego entregan una serie de propuestas impresas o digitales de cómo lucirá el juego. Posteriormente el director de arte se encargará de escoger de entre las opciones aquellas que se apeguen más a la idea original. Algunas veces los artistas conceptuales permanecen durante todo el proceso de producción, pero lo usual es que sólo participen en las primeras etapas del proceso.
  • Sonido: detallada descripción de todos los elementos sonoros que el juego necesita para su realización. Voces, sonidos ambientales, efectos sonoros y música.
  • Mecánica de juego: es la especificación del funcionamiento general del juego. Es dependiente del género y señala la forma en que los diferentes entes virtuales interactuarán dentro del juego, es decir, las reglas que rigen éste.
  • Diseño de programación: describe la manera en que el videojuego será implementado en una máquina real (un PC, consola, teléfono móvil, etc) mediante un cierto lenguaje de programación y siguiendo una determinada metodología. Generalmente en esta fase se generan diagramas de UML que describen el funcionamiento estático y dinámico, la interacción con los usuarios y los diferentes estados que atravesará el videojuego como software.
De toda la fase de diseño es necesario generar un documento llamado Documento de Diseño, que contiene todas las especificaciones de arte, mecánicas y programación.

Planificación
En esta fase se identifican las tareas necesarias para la ejecución del videojuego y se reparten entre los distintos componentes del equipo desarrollador. También se fijan plazos para la ejecución de dichas tareas y reuniones clave, con la ayuda de herramientas de diagramación de actividades como GANTT y PERT.

Producción:
Aquí se llevan a cabo todas las tareas especificadas en la fase de planificación, teniendo como guía fundamental el documento de diseño. Esto incluye entre otras cosas la codificación del programa, la creación de spritestiles y modelos 3d, la grabación de sonidos, voces y música, la creación de herramientas para acelerar el proceso de desarrollo, entre otras.

  • Programación: la mayoría de los juegos se programan utilizando el lenguaje C++ dado que es un lenguaje de alto nivel que permite un rápido acceso a los componentes de hardware de una computadora o consola de juegos que lo hace más accesible.
  • Ilustración: los juegos 2D deben ser ilustrados por artistas experimentados, quienes trabajan tomando en consideración las limitaciones técnicas del hardware sobre el cual correrá el juego, esto incluye: Cantidad de colores disponibles, tamaño de los sprites, resolución final de los sprites y formatos a utilizar. Los artistas 2D también son los encargados de elaborar las animaciones del juego.
  • Interfaz: es la forma en que se verán los elementos de la interfaz gráfica de usuario y el HUD, mediante los cuales el usuario interactuará con el juego.
  • Animación y Modelado 3D: los artistas utilizan herramientas comerciales de modelado y animación tridimensional como 3DS Max, Maya, XSI/Softimage, Blender(el cual no es comercial), etc. Pero además usan herramientas desarrolladas internamente que facilitan algunas de las funciones más comunes del proceso de creación de juegos.
  • Sonido: los ingenieros de sonido se encargan de crear sonidos para cada objeto o personaje del juego. Pueden crear sonidos desde cero o utilizar sonidos del ambiente y modificarlos según sus necesidades.
Pruebas:
Al igual que en otros tipos de software, los videojuegos deben pasar por una etapa donde se corrigen los errores inherentes al proceso de programación y a diferencia de aquellos, los videojuegos requieren un refinamiento de su característica fundamental, la de producir diversión de manera interactiva (jugabilidad). Generalmente esta etapa se lleva a cabo en dos fases:
  • Pruebas alpha: Se llevan a cabo por un pequeño grupo de personas, que con anterioridad estén involucradas en el desarrollo, lo que puede incluir artistas, programadores, coordinadores, etc. El propósito es corregir los defectos más graves y mejorar características de jugabilidad no contempladas en el documento de diseño.
  • Pruebas beta: Estas pruebas se llevan a cabo por un equipo externo de jugadores, bien sea que sean contratados para la ocasión o que sean un grupo componente del proyecto (grupo QA). De estas pruebas el videojuego debe salir con la menor cantidad posible de defectos menores y ningún defecto medio o crítico.
Fuente: Wikipedia.


Motor de Videojuegos:

También en la etapa de la producción es bueno decir que los motores que se usan son prácticamente el esqueleto del videojuego en desarrollo como se va a desarrollar a continuación:
Uno de los motores más usados actualmente.

Un motor de videojuego es un término que hace referencia a una serie de rutinas de programación que permiten el diseño, la creación y la representación de un videojuego. Del mismo modo existen motores de juegos que operan tanto en consolas de videojuegos como en sistemas operativos. La funcionalidad básica de un motor es proveer al videojuego de un motor de renderizado para los gráficos 2D y 3D, motor físico o detector de colisionessonidosscriptinganimacióninteligencia artificial, redes, streaming, administración de memoria y un escenario gráfico. El proceso de desarrollo de un videojuego puede variar notablemente por reutilizar o adaptar un mismo motor de videojuego para crear diferentes juegos.1
Hoy en día existen una gran variedad de motores completos y motores gráficos como OGRE 3D que es un motor gráfico gratuito con "open-source" para que el usuario pueda crear aplicaciones desde el lenguaje C++. Desarrolladoras grandes de videojuegos como Epic, Valve y Crytek han lanzado al público sus motores o SDKs para que los usuarios interesados en el desarrollo de videojuegos puedan descubrir como se elaboran y así tener una introducción amplia a la industria y el desarrollo. Otros ejemplos de motor de juego seria el motor gráfico Doom engine, Quake Engine, GoldSrc desarrollado por Valve en el cual se desarrolló el exitoso juego de Half-Life 1, Source también creado por VALVe y BLAM! Engine desarrollado por Bungie lo cual crearon la famosa saga de Halo.

Glosario de aspectos relacionados


Assets


Los assets pueden ser traducidos como elementos que serán introducidos al videojuego. Estos elementos incluyen Modelos 3D, personajes, texturas, materiales, animaciones, scripts, sonidos, y algunos elementos específicos de cada motor. Cada motor trabaja de una manera distinta a otros lo cual puede aceptar "Assets" que otros motores no pueden manejar, sin embargo los ejemplos mencionados antes, son elementos que todos los motores de hoy en día usan.

Application Programming Interface (Interfaz de Programación de Aplicaciones)

Es un sistema de rutinas, de protocolos y de herramientas para desarrollar programas de aplicación. Un buen API hace más fácil desarrollar un programa proporcionando todos los bloques del desarrollo del programa. El programador pone los bloques juntos.
Entre estos los más importantes son el DirectX (de Microsoft) y el OpenGL (que trabaja con la mayoría de los sistemas operativos).


Render (Renderización)

El render o renderización, es el proceso de la computadora en mostrar en pantalla el aspecto visual de nuestro juego. El render se encarga de mostrar al jugador todo el poder gráfico que el desarrollador haya configurado en el motor, el render muestra todo lo que es el Terreno o BSP, Modelos, animaciones, texturas y materiales. El render contribuye todo el aspecto visual del juego.

Objetos 3D

Los objetos 3D son objetos "secundarios" podría decirse, que se agregan al escenario del videojuego (Ej: Baños, puertas, árboles, muebles, adornos, etc) Los objetos o modelos 3D son clasificados por polígonos al igual que todo elemento que tenga una composición tridimensional.
  • Low-Poly: Traducido como "Polígonos bajos" son modelos que su composición de polígonos es baja lo cual es probable que el modelo tenga un muy mal detalle y no se obtenga un resultado favorable. Estos modelos se usan para optimizar el rendimiento del videojuego y el "Low-Poly" es efectivo en modelos que no requieren mucho detalle (Ej, una caja o un jabón)
  • Mid-Poly: Traducido como "Polígonos medios" son modelos que su composición de polígonos es media y logran dar mejor detalle que los "Low-Poly" aun que su velocidad de procesamiento es más tardada. Estos modelos son más usados para modelos que requieren un poco más de detalle (Ej, Un arma, una casa)
  • High-Poly: Traducido como "Polígonos altos" son modelos que su composición de polígonos es alta y llegan a dar un detalle magnífico pero su procesamiento es más complejo y tiende a ralentizar el ordenador, dependiendo de la potencia que el Hardware de la computadora o consola cuente. Estos modelos son usados para modelos que precisan de un buen grado de detalle (Ej Un personaje, un vehículo).
Esto es en pocas palabras el LOD o Level of Detail (Nivel de Detalle).
Modelo 3d del personaje Altair del videojuego Asassinss Creed, 

Higher-order surfaces (superficies de alto orden)

Es una forma de renderización especialmente para terreno en un videojuego. Videojuegos de nueva generación como Gears Of War, Halo 4, Battlefield 4, Crysis 3, utilizan esta técnica para crear terreno de manera suavizada y realista.. Esta técnica se puede utilizar para otros modelos pero es exclusivo para modelos High-Poly puesto que se especializa en deformar con curvas.
Battlefield 4, como se puede ver en la imagen se ve un paisaje muy suavizado

Culling

Codificado que logra que los objetos que no se ven en determinado cuadro de la animación por causa de objetos que los obstaculizan (como una pared) no tomen tiempo derenderizado. Así se reduce la cantidad de trabajo del motor. El Culling es más fácil de implementar en juegos en donde la visión es controlada como los RTS en comparación con lo FPS. Un método de Culling puede ser por “Árboles BSP

BSP Tree Hierarchy (BSP Árbol de Jerarquía)

El BSP (Binary Space Partioning) es el modelo o terreno base que nuestro videojuego siempre va a renderizar en todo momento, el BSP se diferencía por se la base de nuestro mundo o nivel, es lo que conforma el ecosistema y estructura de nuestro nivel (Ej. Un desierto, un mar, un castillo, un bosque etc) Un BSP se puede crear de muchas maneras pero hoy en día las técnicas más utilizadas son mediante Brushes y Heightmaps.

  • Brushes: Los Brushes es una herramienta codificada del software del motor, no todos los motores lo utilizan pero motores de nueva generación como Unreal y CryEngine lo utilizan y manejan High-Order surfaces para deformar la superficie mediante vértices. También, se pueden crear BSPs con Brushes que crean figuras geométricas simples como: Cuadrado, Esfera, Cilindro, Cono, etc.
Un terreno creado mediante Brushes en Schorched3D

  • Heightmaps: Los Heightmaps son mapas que funcionan a escalas de grises al igual que sus "hermanos" displacement maps. Los heightmaps están más codificados para deformar una superficie High-Poly o HOS mediante escala de grises y pixeles y solo modifican la altura. El color negro representa una altura nula osea que no es modíficada, y mientras más blanco sea el pixel representa más altura a la superficie.

Tesselation

Técnica usada por la característica de TruForm de ATI que consiste en agregar más polígonos a un modelo o a una superficie convirtiéndolo en un objeto High-Poly para poder agregar más detalle visual.

Iluminación (lighting)

La iluminación es un proceso de renderización en la que el motor ilumina todo lo que sea 3D ya sea por pixel o por vértice. La iluminación varia dependiendo la configuración que haya establecido el usuario al motor. La iluminación puede ser de las cosas más complejas al desarrollar un videojuego puesto que una iluminación cercana a lo "perfecto" puede dar un aspecto visual al juego espectacular, pero claro que no es fácil de obtener. Por lo general la iluminación es influenciada por APIs, como DirectX y OpenGL, por obvias razones, versiones más nuevas de esta API demuestran mejores resultados de iluminación. El sombreado es otro factor sumamente importante y que reacciona mediante la luz, si el mundo obtiene buena iluminación también tendrá un buen sombreado.

Vertex Lighting

Se determinan cuantos polígonos cruzan el vértice, se toma el total de todas las orientaciones de los polígonos (Normal) y se asigna la normal al vértice. Para cada vértice, un polígono dado reflejará la iluminación en una forma levemente distinta. La ventaja es que al hardware le toma menos tiempo el procesarlo, pero este tipo de iluminación no produce sombras.

Flat Shading Lighting (Iluminación de Sombreado Plano)

Consiste en que cada polígono represente un valor leve que se pase al polígono completo que genere una imagen plana del mismo, a esta imagen también se le asigna un color determinado.
  • Vertex Shading (Sombreado de Vértice, Gouraud shading): solicita al motor de renderizado un color para cada vértice, luego por medio de interpolación se renderiza cada píxel por la distancia en relación con su respectivo vértice.
  • Phong Shading: es similar al Gouraud Shading, trabajan con la textura, solo que el Phong Shading usa a los píxeles en lugar de lo vértices.
El Phong Shading toma más tiempo de procesamiento que el Vertex Shading pero su resultados son mucho mejores en cuestión de suavizado de texturas.
  • Light Map Generation (Generación del mapa de luz): se usa una segunda capa de textura (mapa de luz) que dará el efecto de iluminación a los modelos, es un efecto excelente pero debe tomarse antes del renderizado pero si se tienen Luces Dinámicas (o sea luces que se mueven, encienden o apagan sin intervención de programa) se debe estar regenerando los mapas en cada Frame de animación lo que toma mucha cantidad de memoria (pero son de render rápido).
  • Textura: es esencial para que las escenas 3D se vean reales, en si las texturas son imágenes que se rompen en los distintos polígonos del modelo, muchas imágenes tomarán mucho espacio en la memoria por eso se debe usar técnicas de compresión:
  • Mapeo MIP: consiste en preprocesar las texturas creando múltiples copias del mismo cada una la mitad del anterior, esto porque si la textura solo es pegada al polígono cada textura es a cada píxel y tomara más tiempo de render; así cada Texel (elemento de Textura) toma menos espacio.
  • Texturas Múltiples: requiere múltiples renderizados por lo que para obtener buen resultado se necesita una tarjeta con Acelerador de Gráficos, provee mejor calidad que el simple mapeo. Se puede colocar una imagen sobre otra (más transparente) para dar el sentido de movimiento pulso o hasta sombra.
  • Bump Mapping: técnica vieja de texturas que tratan de mostrar como la luz se refleja en el objeto. Solo hasta hace poco se vuelto a retomar.
  • Antialiasing: El anti-aliasing revisa los polígonos y difuminará las bordes y vértices, para que los bordes no se vean como dentados. Esta técnica se puede hacer de dos maneras. La primera se realiza de modo individual, entremezclando polígonos para sobreponerlos unos delante de otros.
La segunda manera se hace por medio de tomar todo el marco y quitarle los bordes dentados, pero esto requiere de mucha memoria.
  • Vertex and Pixel Shaders (Vértices y Sombreo de Pixeles): Con este método se pueden extraer y utilizar directamente las características y facilidades de la tarjeta de video, sin tener que utilizar mucho la API. Pero no es utilizable en todas las tarjetas.
  • Stencil Shadowing (Plantilla de Sombreado): la idea es renderizar una vista de un modelo desde la perspectiva de la fuente de luz y después utilizar esto para crear o para generar un polígono con la forma de esta textura sobre las superficies afectadas por el modelo. Así se obtiene una iluminación que parece real. Pero es costosa, porque usted está creando texturas “en vuelo”, y hace múltiple render de la misma escena.
El manejo del cache de textura es imprescindible para que el juego se desarrolle rápido (y para cualquier motor), ya que si se presenta un constante swapping de las texturas en la tarjeta el juego se vera lento y tedioso, algunos APIs descargan cada textura cuando esto pasa, pero eso haría que en cada cuadro se refresquen las texturas dando más lentitud. Todo se trata de cargar la menor cantidad de veces una misma textura, pero eso también depende del API que se utilice. Otra técnica es la compresión de texturas, comprimir texturas es como comprimir MP3, los algoritmos de compresión logran una relación 4:1 que no es mucho pero ayuda.
  • LOD (level of detail, nivel de detalle): el sistema de nivel de detalle está relacionada con la complejidad geométrica de los modelos. Algunos sistemas necesitan que se hagan múltiples versiones del modelo, para que dependiendo de cuan cerca se este del modelo así será su cantidad de polígonos. Otros sistemas ajustan dinámicamente esta característica pero en este caso da más carga al CPU
  • Depth Testing (prueba de profundidad): Con esto se empieza a eliminar los píxeles ocluidos y se pone en práctica el concepto de sobre dibujado. La prueba de profundidad es una técnica utilizada para determinar que objetos están delante de otros en la misma localización del píxel.
  • Sobre Dibujado: es la cantidad de veces que se ha dibujado un píxel en un frame. Se basa en la cantidad de elementos existentes en la tercera dimensión (profundidad).

Scripting Systems(Sistemas de scripting)

  • Pre-scripted Cinematics: usada normalmente en una situación que necesita la explicación en una manera controlada. Para presentar las escenas de la historia, ahora se utilizada el cortar-escenas que presenta la historia en vídeo digital y luego por medio de transiciones se pasa a las gráficas reales del juego.
El scripting le permite al diseñador tomar mando de la escena y manipularla, como colocar objetos o eventos que el jugador no controla. En muy complicado, se necesita de una mente muy metódica y lógica, la mayoría de estos scripts se basan en lenguaje C.
  • Visual Scripting Systems: como lo dice su nombre, permite manejar el script en un ambiente gráfico en lugar de un código escrito, se maneja un carácter real en un ambiente del juego real.

Sonido


Creative Labs ahora ha proporcionado sus extensiones manejadores de sonido EAX para DirectX, y la nueva iniciativa de OpenAL (biblioteca audio abierta). OpenAL, como suena, es un API para los sistemas de los sonidos de la misma manera que OpenGL es un API.
Para el procesado de sonido es muy similar al procesado de los modelos, muchas veces un software los procesa antes de pasar al hardware respectivo, por ejemplo DirectSound hace al sonido para la Tarjeta de sonido lo que Direct3D hace al modelado antes de llegar al la Tarjeta 3D. Esto es llamado “premezcla” en el software.

Música/Pistas de Audio


El sonido de un videojuego se llega a manejar de muchas maneras y esto depende de las capacidades que tenga el motor. Hoy en día los motores de nueva generación soportan muchos formatos de sonido pero los más populares son el ".wav" y ".ogg" y en algunas casos, exigen configuraciones exactas dependiendo el motor. La administración de pistas de audio larga son amplias puesto que motores de nueva generación permiten modificación para poder meter un "looping" a la pista, modificar el tono, etc.

Inteligencia Artificial (IA o AI)

En los videojuegos de deportes, la defensa o el ataque
del equipo contrario es manejada por la IA

Es la característica más importante que se le atribuye a un motor al lado de la representación de modelos o Render. La IA provee de estímulo al juego. Es crítico en la parte de la forma de juego (game play).
La inteligencia artificial de determinado juego puede tornarse muy compleja, primero se debe definir la línea base del comportamiento de los NPC (Non Player Characters - Personajes no Jugables), primero debe definirse quée hace el NPC (patrulla, guarda, etc.), luego se delimita su “visión del mundo”, que es lo es el NPC puede ver del mundo del juego; se debe tomar en cuenta que el personaje no sólo estará en medio del mundo del juego sino que también interactuará con él, después vienen las rutinas de Toma de Decisión: si el NPC está patrullando, y hay un sonido, ¿debe darle importancia o no?, ¿investiga su origen o no?, etc.
Es un sistema de reglas para las acciones que responden (o inician) y que el jugador debe responder, esto es un concepto más general de IA.
Fuente: Wikipedia

Bueno, esa es toda la información que tengo hasta el momento. Como lo dije antes, este blog fue hecho con fines académicos, para un Trabajo Prácticos para NTICx.
Espero que hayan disfrutado el blog, y bueno... finalmente saqué la conclusión de que esto de diseñar videojuegos es muy entretenido, pero muy complejo y más difícil de lo que pensé (tomando el punto de vista teórico y visto en este blog, en la práctica aún no le he intentado).
Por último les quiero dejar un video de un gameplay de un videojuego en 3d ya terminado y con la parte que más nos gusta a todos... JUGARLO.
Metal Gear Solid 4: Guns of the Patriots. Final Boss

Bueno, espero que les haya gustado. Dios los bendiga.

No hay comentarios.:

Publicar un comentario