Análisis de las herramientas Unity y Blender para el desarrollo de videojuegos con un enfoque educativo

http://i.imgur.com/0owHG.png
http://i.imgur.com/23xOo.png

Muchas veces no entendemos hacia donde dirigirnos cuando somos estudiantes de computación. Son tantas las cosas a las que uno se puede dedicar, que es difícil entender qué desición será más satisfactoria y productiva.


HERRAMIENTAS

Para este proyecto nos hemos enfocado en usar la programación en conjunto con herramientas de diseño gráfico, con las que muchas personas han creado videojuegos.

Utilizamos la herramienta libre y gratuita Blender (desarrollada por la Fundación Blender, bajo la licensia GNU General Public License) y la herramienta Unity3D (desarrollada por Unity Technologies bajo licensia propietaria). Usar dos herramientas con diferente licencia nos permite evaluar la funcionalidad de ambos no solo desde un punto de vista técnico sino la eficiencia en programas de código abierto.


OBJETIVO

El objetivo del proyecto es crear un videojuego que crease conciencia en las personas sobre el medio ambiente, pero que al mismo tiempo este videojuego fuera más allá del ámbito educativo y cumpla el objetivo de un videojuego: Entretener al jugador.

¿Porqué pensar en educar a las personas con un videojuego si existen otras formas clásicas?.

Básicamente, porque estamos en una era donde ser competitivo es fundamental. La adaptación en un medio determinado es un rasgo evolutivo en los seres humanos que debe ser entrenada, para que el individuo se pueda desarrollar como profesional, uno altamente capacitado, siempre dispuesto a afrontar retos, y al cambio.

¿Esto que tiene que ver con los videojuegos? Permitiendo a las personas desempeñar un papel activo en su educación poniendolo en una situación construída con semejanza en la realidad, es como se logra educar a las personas mientras se entretienen. Esto se conoce como aprendizaje lúdico.

TEMÁTICA MEDIOAMBIENTAL

Siendo nuestro primer proyecto de este tipo tomamos la desición de usar como tema de trasfondo el de la protección del medio ambiente.

Queremos que el jugador vaya analizando la situación del medio ambiente y que se fuera haciendo preguntas tales como ¿Puedo hacer algo como individuo para mejorar? ¿Son mis esfuerzos suficientes?.

Bajo esta premisa, tomamos una serie de problemas medioambientales como la tala de árboles, los botaderos de basura, contaminación por chatarra, y muchos otros problemas para los cuales con hacer unas cuántas búsquedas en google y en la biblioteca pudimos enlistarlos.



http://i.imgur.com/U02a0.png

DESARROLLO DE LA TRAMA, LA AMBIENTACIÓN Y LOS PERSONAJES

En esta etapa es cuando se comienza a dar vida a los personajes. Generalmente se comienza con divagaciones sobre diferentes aspectos de los videojuegos, la jugabilidad, entre otros.

En esta etapa se definieron:
  • Género del Videojuego
  • Personajes Protagonistas y Coprotagonistas, así como Antagonistas, entre otros (trasfondo)
  • Ambientación
  • Historia
Algunos personajes se iban desechando conforme la trama iba tomando un poco más de forma. Esta trama, como la gran mayoría, toma elementos de otras sagas y al mismo tiempo el todo con la compone es lo que da su toque de originalidad, lo cual es indispensable para despertar la atención del jugador.

HISTORIA

La historia se desarrolla dentro y fuera de un personaje. Dentro de la mente del personaje, en sueños y alucinaciones, el personaje ve como era el mundo cuando todavía habían árboles, y muchas plantas y animales. En ese mundo lleno de naturaleza, al personaje se le muestran escenas donde hay basura botada por todas partes y elementos contaminantes. El personaje debe realizar misiones donde elimine el factor contaminante. Muchas veces estos sueños ayudan al personaje a solucionar problemas reales.

Por otra parte, el mundo real es un mundo postapocalíptico devastado por la gran contaminación, y es donde se desarrolla la mayor parte del juego.

http://i.imgur.com/4tcuy.jpg
Mundo devastado por el hombre

El protagonista utiliza tecnología avanzada para soportar estar en un lugar completamente contaminado. El principal enemigo del personaje es el medio ambiente, como el clima. El personaje debe reparar lo que el ser humano hizo en el pasado, para su propia supervivencia y para que las personas puedan volver a vivir su vidas normalmente.

Por otra parte la tecnología también se ha vuelto enemiga. Por ejemplo hay unas máquinas taladoras de árboles, que no fueron apagadas nunca, y estas continúan talando los pocos árboles que quedan. El personaje debe combatir contra las mismas para apagarlas.

En este panorama de sueños y realidades, aparece un único enemigo humano que es su principal antagonista.

ETAPAS
http://i.imgur.com/xHiXT.png

Hemos organizado las etapas del juego en tres, de las cuales estamos desarrollando la primera y el inicio de la segunda:

  1. El Mundo (Primera etapa)
  2. Laboratorios Nature (Inicio de la segunda etapa)
  3. El llanto de los robots taladores (Pendiente)



En este video se muestra un screencast de las primeras pruebas para unión entre paisajes. Trabajamos mapas por separados compartiendo ideas y luego unimos ambos mapas. Muchos de los modelos fueron modelados, texturizados, riggeados y animados en Blender. En la galería de imágenes se muestran algunos cambios que se le aplicaron al videojuego en días posteriores.

Luego se exportaba el personaje o modelo con todas esas características.

Algunos modelos que son muy comunes a la hora de crear videojuegos vienen prefabricados tanto en Unity como en Blender. Tal es el caso del diseño de árboles:

http://i.imgur.com/g1kXW.png
Tree Creator de Unity


http://i.imgur.com/MCPPV.png
Complemento Sapling: Add Tree

El complemento para Blender fue programado por una persona ajena a la Fundación Blender, y viene desactivada por defecto en Blender. Se puede activar a través del menú de complementos.

Estos componentes son conocidos como Third-Party.

En el caso del programa Unity, estos complementos se conocen como Assets. Todo un proyecto hecho en Unity puede ser un Asset. Estos se componen de elementos gráficos como modelos, además de Shaders y Scripts.

Los lenguajes de programación utilizados son:

Blender: Python
Unity: Unityscript, Python (Boo), C#

Todos son lenguajes de alto nivel donde se presenta la posibilidad de utilizar programación orientada a objetos.

Blender posee además del manejo de scripts, un sistema por bloques lógicos llamado precisamente Logic Bricks

http://i.imgur.com/rFRZe.png
Logic Bricks en Blender

http://i.imgur.com/AXgG8.png
MonoDevelop-Unity

Todas las propiedades de estos lenguajes como variables estáticas, polimorfismo y herencia están disponibles, e incluso agregan otras posibilidades propias de las librerías UnityEngine y GameLogic, liberías principales de Unity y Blender respectivamente.


BLUEPRINT MODELADO

Para realizar los modelados primero se requiere usar Blueprint o Model Sheet, que son vistas frontales y laterales de objetos y personajes:

http://i.imgur.com/UjBcB.png
Blueprint de BGCT2040

Estos se introducen en Blender a manera de fondo y se puede modelar siguiendo los patrones de dibujos. Se requieren tantas vistas como detalles que se quieran añadir al modelo. Algunas veces un modelar puede crear todo el modelo basándose únicamente en una vista frontal. La habilidad del modelador se debe ir puliendo con la práctica y estudios sobre aspectos como lo es la topología, para lograr modelos eficientes.

http://i.imgur.com/M7Am5.png
Modelo de L2, Antagonista

Los modelos tridimensionales están constituidos por caras, vértices y aristas, son cuerpos volumétricos unidos a través de los vértices. Se dice que un personaje con pocos vértices es Low-Poly, de lo contrario es High-Poly. Dependiendo de si se busca calidad o si se busca rendimiento, se deben tomar en cuenta estos vértices y tratar de modelar de acuerdo a lo estipulado. El programa Blender muestra la cantidad de vértices y otros datos de importancia, para poder ir midiendo estos parámetros en tiempo real.


TEXTURAS Y MATERIALES

Las texturas y materiales sirven para darle realismo al modelo, ya sea un personaje, un objeto, o el mismo suelo.

Pueden requerirse texturas para un terreno, como por ejemplo de pasto, rocas, arena, madera y metal. Para este proyecto usamos una textura que simulara basura y la pegamos en un terreno que al elevarse pareciese un montículo de basura:

http://i.imgur.com/N0qfx.png
http://i.imgur.com/ehIff.png
http://i.imgur.com/vxX2A.png
Textura de basura para las montañas, El Mundo

Para el caso de los personajes que requieren texturas no repetitivas, se utilizan Mapas UV que asociados a cada patrón forman el efecto deseado.

http://i.imgur.com/9J0pr.jpg
Mapa UV de la Oveja

http://i.imgur.com/GylTy.png
Modelo con la textura de la Oveja

Por otra parte el material da las propiedades de brillo y opacidad, entre otros aspectos. Por ejemplo la madera es más opaca que el metal así que esto se puede definir desde el panel de materiales. Los materiales y las texturas se pueden mezclar a gusto.


RIGGING Y ANIMACIÓN

El rigging sirve para colocar estructuras con las que las partes del personaje se moverá de manera uniforme.

http://i.imgur.com/C3HIS.png
Manejo de huesos en Blender

Hay elementos que no son personajes pero aún así requieren este tipo de estructuras porque llevan una animación específica. Por ejemplo mecanismos robóticos o partes del cuerpo humano:

http://i.imgur.com/DRBFA.png
Rigging de Pulmones

Estos pulmones fueron utilizados como parte del HUD donde el personaje verificaba la calidad de su respiración.

http://i.imgur.com/dpBPp.png
HUD de respiración del personaje

En el programa Blender se realizan las animaciones moviendo los huesos con las tres transformaciones básicas que son Rotación, Translación y Escalamiento.

Los huesos están pegados a la maya del modelo, y su interacción está determinada por los pesos, que son zonas donde los huesos tienen mayor o menor control de la maya.

http://i.imgur.com/iF6eS.png
Cada peso está dado por una zona de un color determinado

Para mover los huesos se debe seleccionar cualquier hueso y entrar en modo pose. Se aplican las transformaciones y se van guardando en fotogramas especificados en la zona timeline de Blender.

Una vez terminado el modelo se exporta en uno de los formatos permitidos y luego desde el programa Unity se debe importar. Este importará el modelo, las texturas y el esqueleto del personaje, así como las respectivas animaciones.

SCRIPTING

El scripting también puede ser usado para animar. Estas animaciones pueden ser en forma de partículas, transformaciones o elementos del GUI ya sea para el HUD o para las tablas de estadísticas, y en general, la animación de los eventos del videojuego.

Si se tiene un objeto en Unity este objeto puede tener un script. En el script se puede acceder a las propiedades del objeto. Un ejemplo de animación por Scripting es el de la rotación del asta de los molinos de viento utilizadas en el capítulo de El Mundo:

http://i.imgur.com/r1mJU.png
Molino de Viento en el sueño

En el que se debe aplicar una operación de rotación a las astas alrededor de un punto de pivote específico, que puede ser externo al modelo.

Así mismo el estado en el que se encuentra el juego puede ser representado por un número flotante o por un bloque de condicionales anidados uno dentro de otro. Si el juego se encuentra en un determinado estado, que puede ser un rango o un número en específico, el comportamiento general de todos los elementos del juego deben ser interpretados de una determinada forma.

Mostrar el GUI, ocultar el GUI, transportar el personaje a un lugar en específico o saber si este ha recogido un arma del el suelo, reiniciar el juego o pasar a un nivel siguiente, son algunas situaciones que pueden ser calculadas a través de script.

En el caso de Blender, este posee dos modos, un modo de renderizado, para las personas que desean crear videos o imágenes que serán exportadas en formatos multimedia.

La otra modalidad es utilizando el Blender Game Engine, el cual se usará para realizar un videojuego. La principal característica del BGE es el sistema Logic Bricks, que permite unir expresiones lógicas con funcionalidades específicas del juego. Por ejemplo que al presionar un botón, el personaje se mueva a la derecha, esto consiste mediante scripting en sumar un valor flotante a la coordenada que corresponda a la derecha del personaje.

En Unity vienen scripts predefinidos para mover un personaje en primera o tercera persona, mientras que en Blender estos scripts hay que realizandos, mezclando código junto con los Logic Bricks.

Se considera al Logic Bricks como un sistema muy bueno para las personas que están aprendiendo a programar, e incluso para las personas que no son programadores y quieren aprender a programar con Blender, de una forma interactiva.

En un videojuego siempre se deben estar averiguando cómo se realizan algunas tareas, siempre hay retos nuevos.

Por ejemplo para el caso nuestro, el personaje recoge un ítem, unos Glex que se los pone en los ojos y estos le permiten saber el índice de contaminación en una zona específica. Cuando este personaje se los coloca, estos le avisan que la corrosión ha dañado un satélite gigante que vuela cerca de un pueblo, y él debe evitar el impacto de este satélite.

http://i.imgur.com/wdIOc.png 
Estallido aéreo del satélite

Se da un tiempo específico, que debe ser suficiente para que el personaje llegue al pueblo y realice una serie de maniobras que son, subir al satélite, revisarlo, verificar que no funciona, bajar, buscar un arma, subir a un lugar alto, apuntar con el arma y destruirlo.

Se requiere establecer una relación entre el tiempo disponible y la cantida flotante que debe ser sumada a las coordenadas de la posición inicial del satélite hasta la posición destino que es un sitio específico en el suelo del pueblo contra el cual este va a impactar.

Hay algorítmos específicos, cálculos ya realizados, y muchas cosas que debemos aprender a reutilizarlas, porque han sido analizadas y depuradas por años, y son más eficientes que una solución que, aunque podemos analizarla y dar un buen funcionamiento, no están optimizadas en una relación rendimiento/evento.

En la escena de los robots taladores se requieren algoritmos de inteligencia artificial para que los robots apunten al jugador y esquiven los disparos. En versiones furutas de este u otros juegos profundizaremos mucho más en estos algoritmos.

PARTÍCULAS

Las partículas permiten crear efectos de polvo, fuego, agua, nieve entre otros. Estas reproducen un modelo a grandes escalas, aplicando transformaciones de manera diferente. Una partícula puede contener varios elementos. Por ejemplo el fuego tiene luz, un elemento externo y uno interno, así como el humo que es una partícula independiente, juntas dan el efecto de fuego.

http://i.imgur.com/DSCMP.jpg
Fuego del despertar en El Mundo


Cabe destacar que el sistema de partículas de Blender es incompatible con el sistema de partículas de Unity. De hecho, el sistema de partículas de Blender no puede ser usado en el Blender Game Engine, sino que solo se puede usar para hacer animaciones y renderizado de imágenes, pero no juegos.

Para simular estas partículas en el Blender Game Engine, se debe acudir a soluciones externas, como scripts o efectos dados por factores diversos. Es posible que en esto sea mejorado en las versiones futuras de Blender.

Por otra parte, Unity tiene su propio sistema para crear nuestras partículas, e incluso trae algunas ya definidas como fuego, agua, humo, chispas, burbujas y nieve.

La calidad del agua obtenida en Unity mejora cuando se compra la licencia Unity Pro. Además existen desarrolladores que comparten sus trabajos, como por ejemplo los efectos de electricidad y truenos:

http://i.imgur.com/udFoF.png
Script para efecto de truenos

Se pueden crear scripts que utilicen algoritmos de figuras fractales y simulen estructuras arboladas como los truenos o los mismos plugin que satisfacen la necesidad de una utilidad para crear árboles.

TERRENOS, TEXTURA, RENDERIZADO, CALIDAD Y COMPILACIÓN

http://i.imgur.com/FviQ6.png
Mapa de nuestro terreno

Hay que tener muy bien planeado el aspecto de los terrenos. Un terreno no se vuelve lento solo por ser grande. De hecho el tamaño en sí mismo no afecta en nada. Es la cantidad de vértices y texturas las que vuelven lento el renderizado.

Aún cuando existen técnicas que renderizan el terreno por partes, como la del Dyamic Terrain Loading, esto lo realiza en la compilación. Pero muchas veces se vuelve lento incluso en modo diseño. Por esto debe planearse antes como estará fragmentado el terreno. Esto además es importante a la hora de cargar las escenas, porque el tiempo de carga se reduce.

Debe existir una armonía entre la cantidad de texturas y elementos gráficos (su vértices por ende) que serán introducidos en la escena, y el tamaño del terreno.

Hay que investiga y probar en diferentes máquinas un terreno para ver si la velocidad es óptima, y tomar en cuenta la plataforma y los requierimientos mínimos.

DISEÑO DEL GUI

El GUI en un juego del género FPS suele llamarse HUD y permite al jugador ver las estadísticas del juego. Los elementos que las conforman suelen ser texturas en dos dimensiones, así como texto, entre otros.

Tanto Blender como Unity permiten utilizar este tipo de texturas para la creación de menús de juego y el muestreo de estadísticas. Los efectos se pueden aplicar a través de scripting

http://i.imgur.com/5dHfD.png
Prototipo de GUI para Nature

El GUI también puede tener elementos en 3D, como se puede ver en esta imágen los pulmones que están animados con Blender y están constantemente respirando, se muestran en todo momento.

La edición de los gráficos en dos dimensiones se puede realizar con programas de edición gráficas como GIMP, Photoshop y Fireworks, por citar algunos. En estos mismos programas también se pueden realizar las texturas.

Existen componentes de pago en Unity que tienen un sistema gestor de componentes del GUI, tales como Labels, Buttons, Scrollbars, entre otros, con lo cual se evitar el trabajo de tener que editar todo desde Mono-Developer.

COMPLEJIDAD DE LOS NIVELES

Los capítulos del juego que se tenían previstos son los siguientes:

  1. El Mundo
  2. Laboratorios Nature
  3. El llanto de los robots taladores

Como desarolladores amateurs, esto no fue planeado así por azar. Primero analizamos qué tipo de diseño sería el mejor para empezar, y decidimos que este sería el diseño natural. Colocar árboles, animales, sonidos de viento, conaminación y todo este tipo de elementos, sería algo muy bueno para familiarizarnos y al mismo tiempo lograr un buen trabajo. Eso es precisamente el capítulo de El Mundo, una ventana al inicio de la programación de videojuegos en 3D.

Ya teníamos conocimientos de programación de videojuegos por la ponencia de SpaceBlaster, un videojuego en dos dimensiones donde comprendimos los conceptos de colisiones y las posiciones de los objetos tridimensionales, por lo que en esta etapa nos abstraímos de todos esos conceptos claves y entramos de lleno al modelado, texturizado, rigging, diseño de terrenos, y todos los aspectos más relacionados con el diseño.

http://i.imgur.com/6QerH.png
Entrada a los Laboratorios Nature

http://i.imgur.com/gVRvU.png
Prototipo para interior del laboratorio

En la segunda etapa deberían trabajarse mas las luces, los interiores, es más complejo diseñar un entorno encerrado, y además es un laboratorio por lo que deben modelarse los instrumentos utilizados, lo cual es más dificil que modelar rocas y colocar árboles.

Se han estado creando prototipos en Blender para probarlos. Se pueden modelar y luego exportar a Unity, pero al mismo tiempo se pueden realizar las pruebas con el Blender Game Engine, previas al entorno real donde estará la estructura final.

GRUPO DE TRABAJO

Por mi parte me gustar programar y estaba muy concentrado en los algoritmos en 3D. Pero mis compañeros dieron el gran salto de acelerar el proceso y me comentaron que debíamos empezar a utilizar las herramientas en 3D.

Mi compañero Obviedo tiene bastante afinidad con el diseño en 3D y comenzó a trabajar en algunos motores. Finalmente decidimos utilizar estas dos herramientas.

Actualmente estamos investigando otras herramientas como el UDK y el CryEngine, así como las librerías OpenGL, para comenzar con un proyecto que vaya orientado a su comercialización.

Y para eso no solo hay que investigar su funcionalidad sino las licencias.

Geovanny Méndez Marín
Ingeniería en Computación, SSC
Instituto Tecnológico de Costa Rica
Enlace de la ponencia: Pendiente

4 comentarios:

Anónimo dijo...

Muy bueno el articulo

Daniel de Montevideo Uruguay

dabraz@adinet-com.uy

Anónimo dijo...

Exelente gracias me sirvio de mucho

Anónimo dijo...

Saludos. Primero que todo felicidades por esta entrada y el blog.

Bueno, tengo una duda acerca del movimiento de huesos en Unity a partir de scriptings. Mi problema es que al importar los huesos desde Blender e intentar rotarlos mediante instrucciones de C# en el método Quaternion.Lerp no me funciona. Dicen que hay que crear un objeto vacío y adjuntar el hueso allí, girar el objeto vacío. Sin embargo no me ha funcionado.

Agradezco su ayuda.

TU ELECTROTECNICO dijo...

vale, me sirvió mucho esta informacion.

Publicar un comentario

gmendezm
Portada
Lista Principal