Publicat per

Reto 5

Publicat per

Reto 5

Ejecutable HTML en SIMMER: Enlace al ejecutable en SIMMER: https://simmer.io/@Autenticorick/robot-fight Resumen del proyecto: En este último reto del semestre se buscaba mostrar como…
Ejecutable HTML en SIMMER: Enlace al ejecutable en SIMMER: https://simmer.io/@Autenticorick/robot-fight Resumen del proyecto: En este último reto del semestre se…

Ejecutable HTML en SIMMER:

Enlace al ejecutable en SIMMER: https://simmer.io/@Autenticorick/robot-fight

Resumen del proyecto:

En este último reto del semestre se buscaba mostrar como los robots diseñados, modelados, riggeados y modelados a lo largo del semestre eran aptos para ser usados en un juego sencillo de Unity.

Importación de los modelos de Maya a Unity:

En primer lugar, exporté los modelos desde maya a Unity. Una vez en Unity, tuve que ajustar ciertos parámetros. En primer lugar, el esqueleto de los robots. En mi caso, ambos eran robots con esqueletos humanoides que, durante el reto 3, ya comprobé que fuesen aceptados por Unity (Imagen 1). En segundo lugar, se dividieron las diferentes animaciones creadas en Maya en el reto anterior en diferentes frames, para diferenciarlas unas de otras (Imagen 2). Por último, se exportaron los materiales y texturas para cada robot (Imagen 3).

Imagen 1

Imagen 2

Imagen 3

Componentes y lógica de los robots:

Tras esto, a cada GameObject de los Robots les añadí diferentes componentes: Animator, Collider, RigidBody, PlayerInput y un script que contiene toda la lógica de control de los mismos (Robot Controller) (Imagen 4). Los controles para cada Robot son los siguientes:

Robot 1: W y S para movimiento, A para atacar y D para defender.

Robot 2: I y K para movimiento, J para atacar y L para defender.

Dentro del script de control, y gracias al componente Player Input, que emplea el nuevo sistema de inputs de Unity, he mapeado cada control a su funcionalidad. Además, al llamar a cada método que ejecuta esta funcionalidad, (moverse, atacar o defender), se ejecutan las animaciones correspondientes. Por otro lado, he añadido colliders como trigger para identificar cuándo un robot está pegando a otro, aplicando así el daño entre robots, haciendo que disminuyan sus puntos de salud de los 10 que tienen. Cuando lleguen a 0, el robot morirá y acabará la partida. Cuando un robot es atacado, recibe 2 puntos de daño, pero cuando es atacado mientras se defiende, recibe 1 punto de daño. Para cada una de estas acciones, existe un sonido asignado, para dar más credibilidad al juego y que el jugador pueda recibir feedback sonoro.

Imagen 4

Máquinas de estado:

Ambos robots tienen máquinas de estado similares. En este, se usa como estado principal el IDLE. En función de las acciones del jugador, se cambiará el estado, ejecutando la animación correspondiente, ya sea mediante booleanos o triggers. Por ejemplo, para caminar o defenderse, se emplea un booleano (isWalking o isDefending), de modo que la animación se ejecutará mientras estos sigan siendo ciertos. Por otro lado, atacar o morir se accionan como triggers, ya que son acciones que sólo realizarán una vez (al atacar, hará la animación 1 vez). Por otro lado, el estado de atacar cuenta con un script dentro del estado, que modifica una variable que se emplea en el script de control, permitiendo saber cuándo está atacando el robot. A continuación, adjunto imágenes de los dos controladores (Imágenes 5 y 6).

Imagen 5


Imagen 6

Sonido, decoración del escenario y menús:

El juego cuenta tanto como con una pista de audio que se ejecuta en bucle a lo largo de la partida, además de diferentes efectos de sonido que dan más sentido y ayudan al jugador a tener un feedback extra. Los efectos de sonido suceden cuando un robot es dañado (un sonido diferente en función de si se está defendiendo o no), cuando lanza un golpe y cuando acaba la partida. Dentro del script principal, se ejecutan los sonidos en los momentos correspondientes (Imagen 7).

Imagen 7

En cuanto a la ambientación, he escogido un escenario más bien sencillo, con estética Sci-Fi ambientada en una nave espacial. Por otro lado, se ha añadido un menú principal sencillo, con la opción de jugar o salir del juego. Los assets utilizados han sido obtenidos de la asset store de Unity.

Visión de futuro para el proyecto:

En caso de llevar adelante el proyecto, contando con un mayor número de desarrolladores, sería interesante desarrollar un juego al estilo Street Fighter, pero con estética Sci-Fi. En primer lugar, añadiría más personajes jugables, de diferentes formas y estilos. Ampliaría el abanico de ataques, habilidades y movimientos, haciéndolo un juego mucho más variado. En cuanto a como se jugaría, me imagino un juego tipo PvP, donde dos jugadores se enfrentan entre sí. También crearía assets tanto de sonido como de escenario propios, dándole un toque único al juego.

Conclusiones:

Para finalizar este reto y la asignatura, querría comentar que, tras modelar, texturizar, riggear, animar y luego ver el resultado final en el juego, puedo comprender más fácilmente el arduo trabajo que llevan a cabo las personas que se dedican a esto profesionalmente. Ya no solo por la complejidad y precisión que se debe tener para hacer modelos, sino por la gran cantidad de tiempo que se debe dedicar a estos.

En un principio no sabía si me iba a entusiasmar la asignatura, pues yo disfruto mucho más otros aspectos de la programación de videojuegos, pero tras esta asignatura valoro mucho más este otro aspecto, que a pesar de llevar muchas horas puede llegar a dar un resultado muy satisfactorio.

 

Debat0el Reto 5

No hi ha comentaris.

Publicat per

Reto 4 – Media para videojuegos

Publicat per

Reto 4 – Media para videojuegos

Modelos Sketchfab: Robot 1 Robot 2 Resumen: Para el desarrollo de este Reto, he seguido los pasos dados en los tutoriales de…
Modelos Sketchfab: Robot 1 Robot 2 Resumen: Para el desarrollo de este Reto, he seguido los pasos dados en…

Modelos Sketchfab:

Robot 1

Robot 2

Resumen:

Para el desarrollo de este Reto, he seguido los pasos dados en los tutoriales de la asignatura con tal de conseguir crear las diferentes animaciones para cada uno de los robots.  En primer lugar, empecé asignando al control rig los diferentes huesos de mis robots, de modo que la animación fuese más sencilla, ya que de este modo el cuerpo (o la parte que queramos de este) sigue el movimiento de las articulaciones.

Una vez asignado el control rig para cada robot, comencé con la animación IDLE, pues la considero la más sencilla, y de ahí he ido haciendo el resto.

Algo que me ha costado entender es como hacer diversas animaciones para un mismo modelo. Tras buscar por internet sin demasiado éxito, un comentario en el foro de la asignatura de un compañero con la misma duda resolvió el problema. Entonces, comencé a encadenar las diferentes animaciones en el Time Slider hasta tenerlas todas, momento en el que hice el bake para que estas se mapearan con el modelo. Una vez hecho esto, importé el modelo a Unity para comprobar que todo estaba bien. Desde Unity, pude ver que me importaba el modelo con una sola animación que contenía todas, y descubrí que desde el mismo Unity puedes dividir dicha animación en partes por frames, de modo que dividí mis animaciones y pude ver que todas estaban funcionando correctamente. Tras esto, repetí el proceso con el segundo robot y subí los modelos a Sketchfab.

A continuación adjunto algunas imágenes del proceso, donde se muestran las diferentes animaciones para cada robot:

Imágenes:

Robot 1: Diferentes poses (caminando, IDLE, atacando, defendiendo y pose de muerte)

 

 

 

 

 

 

 

 

 

Robot 2: Diferentes poses (IDLE, atacando, defendiendo, caminando y pose de muerte)

 

 

 

 

 

 

 

 

 

 

Vídeos:

A continuación, adjunto la playlist de videos de YouTube que contiene los diferentes videos con todas las animaciones para cada robot:

 

Reflexión:

Tras esta práctica, he llegado a diferentes conclusiones respecto a la animación de modelos 3D. En primer lugar, es un trabajo muy demandante, que requiere muchas horas, concentración, precisión y paciencia. En este caso han sido animaciones sencillas, y me han llevado bastantes horas, por lo que animaciones más concretas y complejas suponen una carga de trabajo increíble.

Gracias al desarrollo de esta práctica puedo empatizar, en parte, con las personas que se dedican a animar modelos. Si modelar y texturizar ya me pareció complejo, la animación va un paso más allá. Es una tarea que supone una carga mental (además de temporal) considerable y que puede llegar a ser muy frustrante.

Debat0el Reto 4 – Media para videojuegos

No hi ha comentaris.

Publicat per

Reto 3

Publicat per

Reto 3

Para el desarrollo de este reto, he seguido paso a paso los tutoriales proporcionados en los recursos de la asignatura, modelando manualmente…
Para el desarrollo de este reto, he seguido paso a paso los tutoriales proporcionados en los recursos de la…

Para el desarrollo de este reto, he seguido paso a paso los tutoriales proporcionados en los recursos de la asignatura, modelando manualmente en Maya, y he usado por otro lado el auto-rigger de Mixamo.

En primer lugar, empecé creando los esqueletos manuales en Maya, creando los diferentes huesos. En primer lugar, comencé con el tronco, los brazos y las piernas de manera individual. Una vez los ajusté correctamente al modelo, dupliqué brazos y piernas, haciendo que el robot sea lo más simétrico posible. Una vez los creé. los fui ordenando correctamente en la jerarquía. De este modo, nos aseguramos que los huesos están cohesionados y siguen una estructura ‘humanoide’. Para más ayuda, he ido ajustando los huesos para Unity, teniendo más o menos una jerarquía similar. Una vez ya comprobé que en Unity la configuración era correcta, me puse a ajustar los vértices de cada parte del cuerpo, de modo que se adaptaran al hueso correcto y evitando que hubiese deformaciones no deseadas. Como los dos robots son diferentes entre sí, los huesos de los mismos también han variado. Por ejemplo, para el robot 1 no utilicé el hueso ‘shoulder’, pero sí usé ‘toes’, mientras que para el robot 2 fue al revés. Además, el robot 2 cuenta solo con hips, spine, chest y head como tronco principal, al contrario que el robot 1, donde añado el upper chest.

Tras estos pasos, conseguí finalizar los esqueletos de mis dos robots:

  • Robot 1:

 

 

 

 

 

 

  • Robot 2:

 

 

 

 

 

 

A continuación adjunto los esqueletos generados a través de Mixamo:

  • Robot 2:

 

 

 

 

 

Como se puede apreciar, no está el esqueleto del robot 1 generado por Mixamo. Esto se debe a que su algoritmo de auto-rigging no ha sido capaz de generar un esqueleto para mi robot:

 

 

 

Como vemos con el esqueleto que sí ha podido generar, el algoritmo no es del todo preciso. En la sección de los brazos, sobre todo, falla al crear el esqueleto siguiendo las figuras del modelo. Por tanto, podemos concluir que el algoritmo de auto-rigging de Mixamo es útil pero para situaciones en las que cuentas con un modelo sencillo y sin demasiada complejidad, pero puede fallar fácilmente. De hecho, me ha sorprendido que no haya podido generar el esqueleto del robot 1 pero sí el del robot 2, ya que consdero que el robot 1 es algo más típico y sencillo. Por otro lado, únicamente nos será útil en caso de estar tratando con modelos humanoides.

Finalmente, adjunto la carpeta a Drive con los modelos, tanto manuales como generados por Mixamo, en formato fbx00: Drive

 

Debat0el Reto 3

No hi ha comentaris.

Publicat per

Reto 2 – Texturización de los robots

Publicat per

Reto 2 – Texturización de los robots

Para el desarrollo de esta práctica, he utilizado Maya y Adobe Substance 3d Painter. En primer lugar, y siguiendo con los tutoriales…
Para el desarrollo de esta práctica, he utilizado Maya y Adobe Substance 3d Painter. En primer lugar, y siguiendo…

Para el desarrollo de esta práctica, he utilizado Maya y Adobe Substance 3d Painter.

En primer lugar, y siguiendo con los tutoriales proporcionados en el aula, comencé creando los mapas de UV para los diferentes robots. Este proceso, aunque no es demasiado complejo, puede llegar a llevar mucho tiempo, en función de las partes que formen el robot, su forma, etc. Decidí empezar por el Robot 2, que es el que considero más complejo a nivel geométrico y consideré que es el que me llevaría más tiempo. Comencé pues mapeando las diferentes partes del cuerpo y, una vez acabado, dupliqué las partes simétricas (piernas, brazos, etc). Una vez acabado, me puse con el Robot 1. Tras varias horas realizando los UV, estos son los resultados obtenidos:

 

 

 

 

 

 

Así quedan en los robots las texturas de referencia:

 

 

 

 

 

Una vez los dos robots tenían los UV mapeados y correctamente colocados en el espacio, empleé la herramienta Adobe Substance 3D Painter, que se encuentra en los recursos del reto. Como era la primera vez utilizando una herramienta así, tuve que dedicar un rato a ver tutoriales para comprender el funcionamiento.

Tras esto, comencé a pintar las diferentes partes de los robots. Como no quería crear la ‘típica’ apariencia de robot, decidí que cada uno tuviera una estética diferente. En primer lugar, el robot 1 está pintado con pinturas y elementos que muestran como el paso del tiempo han ido oxidando el robot, dejándolo en un estado de desgaste que se puede ver fácilmente. Por otro lado, para el robot 2 he empleado texturas de telas / fibras. Tomé esta decisión ya que no las texturas que he ido encontrando no me convencían, por lo que empleé estas, que le dan un toque original y único. Así, cada robot cuenta con una estética claramente diferenciada.

Cabe destacar que todas las texturas empleadas han sido obtenidas del propip Adobe Substance 3D Painter, que cuenta con una librería de texturas interna.

 

 

 

 

 

Los UV tras aplicar las texturas, quedan así:

 

 

 

 

 

 

Los mapas de texturas generados son los siguientes:

Robot 1:

 

 

 

 

 

Robot 2:

 

 

 

 

 

 

Como conclusión final, tras el desarrollo de esta práctica he podido entender la cantidad de tiempo y esfuerzo debe invertirse para texturizar correctamente un modelo 3D, además de aprender los diferentes pasos para realizar dicha tarea.

Por último, adjunto los enlaces a Sketchfab para cada robot:

Robot 1:  https://skfb.ly/p8rV9

Robot 2: https://skfb.ly/p8rGw

Debat0el Reto 2 – Texturización de los robots

No hi ha comentaris.