Trabajo de fin de grado Sistema de gestión de Blend Shapes Por David García Morán 4ª Curso de Grado en Diseño y Desarrollo de Videojuegos, Programación Investigación realizada en paralelo al videojuego “Reverie Island” Videojuego creado por Sweetcare Games Fecha de publicación: 25-8-2023
Sistema de gestión de Blend Shapes Agradecimentos Agradecimientos a todo el equipo de Sweetcare Games, mi familia y amigos. pág. 2
Sistema de gestión de Blend Shapes Índice Contenido 1. Resumen....................................................................................................................6 1. Abstract ......................................................................................................................7 2. Introducción................................................................................................................8 2.1 Marco del proyecto ..............................................................................................8 2.2 Motivación............................................................................................................8 2.3 Objetivos y metodología ......................................................................................8 2.4 Estructura del documento....................................................................................9 2.5 Parte grupal (Videojuego)..................................................................................10 2.5.1 Información del juego .................................................................................10 2.5.2 Relación con la investigación .....................................................................10 2.5.3 Tareas del videojuego ................................................................................11 3. Objetivos generales .................................................................................................12 3.1 Objetivos del videojuego....................................................................................12 3.1.1 Principales...................................................................................................12 3.1.2 Secundarios ................................................................................................12 3.2 Objetivos de la investigación .............................................................................12 3.2.1 Principales...................................................................................................12 3.2.2 Secundarios ................................................................................................13 4. Estado de la cuestión ..............................................................................................14 5. Metodología .............................................................................................................15 6. Desarrollo del proyecto............................................................................................16 pág. 3
Sistema de gestión de Blend Shapes 6.1 Parte del videojuego ..........................................................................................16 6.1.1 Roles de programación...............................................................................16 6.1.2 Análisis ........................................................................................................16 6.2 Parte de la investigación....................................................................................17 6.2.1 Roles de programación...............................................................................17 6.2.2 Análisis ........................................................................................................17 6.3 Realización de tareas ........................................................................................18 6.3.1 Tareas de desarrollo del videojuego ..........................................................18 6.3.2 Tareas de investigación..............................................................................19 7. Resultados y conclusiones ......................................................................................26 7.1 Resultados .........................................................................................................26 7.2 Conclusiones .....................................................................................................29 8. Post Mortem.............................................................................................................31 9. Anexos .....................................................................................................................32 9.1 Documentación del código ................................................................................32 9.1.1 Documentación de la investigación............................................................32 9.1.2 Documentación del videojuego ..................................................................35 9.2 Requisitos mínimos de los proyectos................................................................42 9.3 Estructura del proyecto......................................................................................42 9.3.1 Estructura de la investigación.....................................................................42 9.3.2 Estructura del videojuego ...........................................................................43 9.4 Manual del proyecto ..........................................................................................43 9.4.1 Manual de la investigación .........................................................................43 pág. 4
Sistema de gestión de Blend Shapes 9.4.2 Manual del videojuego................................................................................44 9.5 Archivos fuente ..................................................................................................44 9.6 Binarios distribuibles ..........................................................................................44 10. Referencias............................................................................................................45 pág. 5
Sistema de gestión de Blend Shapes 1. Resumen Hoy en día se puede ver el uso de las blend shapes en muchos videojuegos, un sistema de animación sencillo que permite deformar la malla de un modelo 3D para ajustar su aspecto visual modificando sus vértices, se utiliza principalmente en editores de personajes o para trabajar las animaciones faciales, sin embargo, no tienen un uso extendido en el ciclo principal de un videojuego, por lo tanto se buscó diseñar un sistema para gestionar y aplicar esas blend shapes y que así tengan más uso en tiempo real, como puede ser el crecimiento natural de un personaje y se estudiaron sus ventajas e inconvenientes comparándolo con la animación por huesos. En este documento se demuestra el crecimiento de un modelo 3D el cual se editó en Blender para crear las blend shapes y posteriormente se exportó al motor Unity, donde se implementó un sistema en forma de librería dll que permite vincular valores y animaciones de una forma sencilla. Como resultado se puede ver a una criatura que ha crecido gracias al sistema de blend shapes y un conjunto de clases que ayudarán a la implementación de más blend shapes en trabajos futuros. Se concluye que este sistema promueve el uso de las blend shapes y ayuda al desarrollo de videojuegos en 3D. Palabras clave: blend shapes, animación, videojuego, 3D, Unity pág. 6
Sistema de gestión de Blend Shapes 1. Abstract Nowadays you can see the use of blend shapes in a lot of videogames, a simple animation system that allows to deform the mesh of a 3D model to adjust its visual aspect by modifying its vertices, it is mainly used for character editors or to work facial animations, however, they do not have a widespread use in the main cycle of a videogame. However, they do not have a widespread use in the main cycle of a videogame, so I looked for a system to manage and apply these blend shapes to have more use in real time, such as the natural growth of a character and studied its advantages and disadvantages compared to bone animation. In this case we demonstrate the growth of a 3D model which was edited in Blender to create the blend shapes and then exported to the Unity engine, where we implemented a system that allows linking values and animations in a simple way. As a result, we can see a creature that has grown thanks to the blend shapes system in the form of a dll library and a set of classes that will help the implementation of more blend shapes in future works. In conclusion this system promotes the use of blend shapes and helps the development of 3D video games. Keywords: blend shapes, animation, videogame, 3D, Unity pág. 7
Sistema de gestión de Blend Shapes 2. Introducción 2.1 Marco del proyecto En los videojuegos es normal que haya deformaciones al animar los modelos 3D ya sea en la cara de un personaje, cuerpo o diferentes elementos del entorno, en este caso se busca una aplicación diferente a la técnica conocida como blend shapes o morph target animation la cual sigue una interpolación linear para modificar los vértices de un modelo 3D de una forma A moviéndolos hacia una forma B. (Torres, 2015). Normalmente se usa tan solo para la animación facial ya que es una técnica que consume bastante espacio en memoria, sin embargo, a poca escala se puede utilizar para más cosas como es el crecimiento de un modelo o animaciones de objetos sencillos. Para ello se crea una herramienta que facilita este trabajo y demuestra las ventajas de las blend shapes. 2.2 Motivación Se buscaba un sistema que pudiera modificar parámetros como la edad de un modelo 3D, lo cual era un problema complejo que requiere de la aplicación de algoritmos de red neuronal o equivalentes para obtener un resultado realista, por lo que se decide reducir el problema a la modificación de modelos en “tiempo real” como ocurre en un videojuego, al descartar estas opciones se decidió solucionar el problema mediante las blend shapes, un sistema sencillo de animación que no necesita de tanto manejo artístico como son los sistemas de huesos, y tampoco tiene problemas de rendimiento a la escala que se va a aplicar en este proyecto. 2.3 Objetivos y metodología En este proyecto se plantean unos objetivos principales como son la creación de un sistema que gestione blend shapes de una forma sencilla y la demostración de un resultado funcional en el motor Unity además del estudio de las ventajas e inconvenientes de esta técnica. Como objetivos secundarios se busca que el sistema sea compatible con la pág. 8
Sistema de gestión de Blend Shapes interpolación de texturas y la opción de añadir otros tipos de animación como es la de huesos para disponer de más opciones al trabajar en un modelo con este sistema. Se ha elegido el motor Unity debido a su uso extendido y compatibilidad con los sistemas de animación mencionados hasta ahora. También es un motor sencillo de aprender y con actualizaciones cada año las cuales permiten que siga siendo muy usado en la industria de los videojuegos, el lenguaje a usar en este proyecto es C#, en el editor Visual Studio que se puede instalar con Unity por defecto. Para generar las blend shapes se ha decidido usar el editor 3D Blender ya que es un editor muy cómodo a la hora de generar blend shapes, como no tenía bastante experiencia en este programa, se ha recurrido al aprendizaje con los tutoriales de Grant Abbit (Abbit, 2021) y Glauz (Glauz, 2016), gracias a ello se ha podido trabajar un modelo 3D sin mayor problema y editar sus blend shapes. En general el trabajo principal realizado se divide en 4 partes: • La creación de blend shapes en un modelo 3D usando Blender. • Diseño de la escena y UI en Unity. • Importar modelo en Unity y programación del sistema de gestión de blend shapes. • Pruebas de rendimiento. Como resultados se puede encontrar un conjunto de clases que representan el sistema de blend shapes y un proyecto ejecutable que muestra el resultado en una criatura 3D, la cual se ha modelado para el videojuego Reverie Island. 2.4 Estructura del documento Los apartados a continuación se pueden resumir de la siguiente forma: • 2.5 Parte grupal (Videojuego): Introducción sobre la parte grupal del videojuego. • 3. Objetivos generales: Enumera y detalla los objetivos perseguidos en esta investigación. pág. 9
Sistema de gestión de Blend Shapes • 4. Estado de la cuestión: Explica la situación de una forma clara y con ejemplos reales del uso de blend shapes. • 5. Metodología: Detalla el proceso seguido y sus aplicaciones en el motor Unity. • 6. Desarrollo del proyecto: Detalla las tareas y resultados obtenidos, también se analizan los requisitos y el rendimiento del proyecto. • 7. Resultados y conclusiones: Detalla los resultados obtenidos y conclusiones de esta investigación. • 8. Post mortem: Cierre del proyecto y posible trabajo futuro. • 9. Anexos: Dispone de todo el código fuente del proyecto y el videojuego, también incluye diagramas de clases y datos de rendimiento en el motor Unity. 2.5 Parte grupal (Videojuego) 2.5.1 Información del juego Reverie Island, es el videojuego hecho en conjunto a esta investigación, consiste en un simulador de cuidado de criaturas 3D, en el cuál tienes que satisfacer las necesidades de tus mascotas para que se mantengan felices y desbloquear nuevo contenido. Destaca su apartado visual y sonoro en una isla tropical, la cual te da ganas de seguir visitando para llevar un seguimiento diario de las diferentes criaturas. Jugabilidad en 1ª persona, mediante teclado y ratón, solo está disponible en Windows por ahora. Juego apto para todos los públicos. Publicado en itch.io: https://irlaluen.itch.io/reverie-island. 2.5.2 Relación con la investigación Se ha utilizado la criatura de agua llamada “Pisci”, modelo creado por Sara Jiménez, para la demostración de esta investigación, la idea inicial era que formara parte del ciclo principal del videojuego, pero no se llegó a un acuerdo para integrar como parte del juego final además de que una de las criaturas no disponía de pág. 10
Sistema de gestión de Blend Shapes bastante poligonación, por lo que se decidió llevar un desarrollo por separado de ambos proyectos, en principio, no habría ningún problema técnico, sin embargo habría que tener en cuenta las colisiones de los modelos si se busca que sean precisas acorde a los cambios generados. 2.5.3 Tareas del videojuego Tareas generales, se detallarán más a fondo en el apartado de tareas. • Inicio del proyecto y primeras pruebas de IA • Cámara • Diseño del Navigation mesh • Implementar acciones de las criaturas • Implementar juegos • Arreglo de bugs pág. 11
Sistema de gestión de Blend Shapes 3. Objetivos generales 3.1 Objetivos del videojuego 3.1.1 Principales • Crear juego con temática alegre y tranquila • Implementar funcionamiento completo a 2 criaturas • Interactuar con las criaturas • Jugar con las criaturas para desbloquear recompensas 3.1.2 Secundarios • Implementar las 4 criaturas • Escenario más grande • Minijuegos 3.2 Objetivos de la investigación 3.2.1 Principales • Crear un sistema que gestione blend shapes de una forma sencilla. Se deben apreciar unos cambios en la forma del modelo, en este caso será mediante el crecimiento de una criatura 3D del juego Reverie Island. • Demostrar un resultado funcional hecho con el motor Unity. El proyecto es un ejecutable creado en Unity, también está a disposición el sistema documentado con su código fuente para su uso futuro en otros proyectos. • Analizar las ventajas/inconvenientes del sistema de blend shapes A pesar de ser una técnica que tiene muchos años, tiene algunas desventajas sobre otros sistemas, por lo que se debe estudiar sus usos principales y rendimiento en un videojuego. pág. 12
Sistema de gestión de Blend Shapes 3.2.2 Secundarios • Sistema compatible con la interpolación de texturas Este sistema podría añadir nuevas funcionalidades permitiendo una animación de la textura, lo que daría muchas más opciones artísticas junto a las blend shapes como se planteaba inicialmente. • Añadir animación de huesos al sistema Al ser el sistema de animación más usado, estaría bien poder gestionar animaciones de huesos en este proyecto como una opción complementaria. pág. 13
Sistema de gestión de Blend Shapes 4. Estado de la cuestión Hoy en día muchos juegos principalmente aplican técnicas de blend shapes a la animación facial como en el videojuego “The Darken” en el que se puede apreciar ese uso. (Loginova, 2020). Aplican seguimiento facial real el cual optimizan a continuación mediante blend shapes. Hay muchas otras técnicas de animación como son los huesos o joints, pero no es una forma adecuada para este problema, ya que habría que generar huesos que no representan adecuadamente al modelo y no dan la misma libertad a la hora de deformar una malla, por ejemplo, Igor Santesteban (Santesteban, 2017), ha creado un sistema que modifica modelos de una forma procedural modificando los huesos y la textura. Con blend shapes puedes ver el resultado final exacto mientras las editas y no requieren de una configuración de huesos, sin embargo, en algunos casos son necesarios varios blend shapes correctivos para arreglar deformaciones no deseadas, por ejemplo, producidas por otras animaciones del modelo. También se ha descartado la técnica de nube de puntos mostrada por el plugin FM Points para Unity (Frozen Mist, 2020), no dispongo de acceso al plugin y requiere de mucho trabajo artístico para que genere cambios muy específicos en un modelo 3D, y no encaja para una evolución linear como se plantea en este proyecto. Por último, hay un proyecto relacionado con las blend shapes que resuelve la mayoría de los problemas planteados, llamado “MorphMixer” (Crazy Minnow Studio, 2018) , aquí se resuelve la organización de blend shapes que se buscaba, sin embargo está orientado a la animación, en el caso de esta investigación se genera un sistema parecido más centrado en los grupos de blend shapes que puedan agruparse sin la necesidad de crear copias de la malla original como hace este proyecto, además de permitir vincular tus blend shapes a eventos de tu juego, por lo que tendría un uso más diseñado para un programador, en forma de librería de código. pág. 14
Sistema de gestión de Blend Shapes 5. Metodología Se ha seguido un estudio cuantitativo, buscando ejemplos reales de la industria de los videojuegos y modelado 3D, se ha buscado información en Internet, ya que es el mayor medio de datos que hay actualmente y en los distintos repositorios de trabajos disponibles como Google Académico. Finalmente se ha decidido decantarse por las blend shapes, ya que tienen un uso bastante extendido y no tienen casi limitaciones técnicas a poca escala. Para elegir las herramientas a usar, el motor Unity y la herramienta de diseño 3D Blender, se ha tenido en cuenta el uso y conocimiento previo de estas herramientas, por lo tanto, se han descartado otras opciones como el motor de videojuegos Unreal Engine, ya que llevaría a un trabajo más complejo o fuera del tiempo permitido para este desarrollo. Para el desarrollo de código se ha seguido una metodología RAD, diseño rápido de aplicaciones, aunque no se sigue al pie de la letra ya que no es un producto destinado a la venta, en este caso solo se genera un prototipo según las necesidades iniciales para cumplir los objetivos descritos previamente. Se ha usado el lenguaje C# debido a su integración en Unity y experiencia previa. También se ha hecho un estudio del rendimiento mediante el profiler integrado en el motor Unity, una herramienta que permite ver los datos del uso de memoria y rendimiento mientras se ejecuta un proyecto. pág. 15
Sistema de gestión de Blend Shapes 6. Desarrollo del proyecto 6.1 Parte del videojuego El videojuego Reverie Island se ha realizado gracias a 2 programadores, 3 artistas, 1 diseñador y 1 músico. Se llevó mediante tareas semanales que se detallarán más adelante. 6.1.1 Roles de programación • Programación de gameplay: Criaturas, acciones principales. • Programación de IA: Movimiento y estado de ánimo de las criaturas. • Arreglo de bugs: Bugs cámara, paths… • Programación de interfaz: Interacción con los botones. 6.1.2 Análisis Es un videojuego destinado a la plataforma Windows, debido a su fácil acceso, uso familiar y mayor compatibilidad con videojuegos, se plantea un desarrollo a dispositivos móviles a futuro. Gráficos 3D en un entorno interactivo controlado con teclado y ratón. Desarrollado en Unity Engine, una de las herramientas más usadas en la industria de los videojuegos, usando el lenguaje de programación C#, permite un desarrollo rápido y ver los cambios al momento. Controles mediante teclado y ratón, no se ha tenido en cuenta una mayor accesibilidad por ahora, se plantean controles VR a futuro. Requisitos gráficos recomendados: • 8GB de RAM • Procesador: AMD Athlon X4 | Intel Core i5 4460 • Gráfica Nvidia GTX 950 | AMD R7 370 • DirectX11 Espacio necesario: 500mb de espacio libre para el ejecutable, 4 GB para el proyecto debido a sus archivos temporales si se quiere trabajar en él. pág. 16
Sistema de gestión de Blend Shapes 6.2 Parte de la investigación Esta investigación de ha desarrollado en 2 partes: • Proyecto demo para demostrar el uso de las blend shapes en tiempo real. • Librería de enlace dinámico en lenguaje C# con clases que ayudan al manejo de esas blend shapes en un proyecto para Unity Engine, no está pensada para otras plataformas. Las tareas mencionadas a continuación, serán explicadas en el apartado 6.3.2 con más detalle. A parte de los roles de programación se ha hecho un trabajo de diseño/arte que se explicará más adelante para generar las blend shapes. 6.2.1 Roles de programación • Creación de una librería dll, que permite un mayor control de blend shapes en Unity. • Clase que define una Blend shape. • Clase que agrupa varias blend shapes para cambiar los valores de estas en un grupo. • Clase que permite controlar las animaciones de blend shapes, se podría mejorar para que sea compatible con transiciones del sistema de animación de Unity. • Creación de un proyecto demo que contiene una criatura 3D con blend shapes. • Control de rotación de la criatura para ver mejor los cambios. • Control del tiempo para hacer un seguimiento de los cambios. • Botón que modifica el parámetro de hambre el cual modifica una de las blend shapes. 6.2.2 Análisis Este proyecto de investigación se ha realizado gracias a las herramientas Blender y Unity las cuales tienen los siguientes requisitos: Requisitos Blender. • Windows 8.1, 10, and 11Aaaa pág. 17
Sistema de gestión de Blend Shapes • 64-bit quad core CPU with SSE2 support • 8 GB RAM • Mouse, trackpad or pen+tablet • Graphics card with 2 GB RAM, OpenGL 4.3 Requisitos Unity. • SO: Windows 7 / 8 / 10. • Procesador: Core 2 Duo ó superior. • Memoria: 1 GB de RAM. • Gráficos: DirectX11 Compatible GPU con 512 MB Video RAM. • Almacenamiento: 100 MB de espacio disponible. • Tarjeta de sonido: DirectX compatible Tarjeta de sonido. Proyecto destinado a la demostración del uso de Blend shapes, destinado a Unity por su uso extendido en el desarrollo de videojuegos. Build generada para el sistema Windows, debido a su fácil acceso y uso general. Control a teclado y ratón, es la opción más sencilla y adecuada para esta demo técnica, las teclas A, W, S, D controlan la criatura para verla en distintos ángulos, el ratón sirve para pausar la escena o para alimentar a la criatura. 6.3 Realización de tareas 6.3.1 Tareas de desarrollo del videojuego Se han llevado a cabo en forma de sprints semanales, serán enumeradas en orden cronológico sin especificar fechas, el cronograma de tareas del está adjuntado como anexo, en la hoja llamada “Sprints semanales” del archivo excell. No habrá una descripción detallada de cada tarea ya que no es el tema principal de esta investigación. • Cámara parametrizable. pág. 18
Sistema de gestión de Blend Shapes • Zoom de la cámara. • Generar Navigation mesh. • Máquina de estados. • Juego de la pelota. • Ajustes de colisiones. • Sistema de acariciar y comer. • Sistema de expresiones. • Implementar las animaciones. • Añadir parámetro a las criaturas. • Arreglar cualquier bug o mejoras al proyecto. 6.3.2 Tareas de investigación Se han llevado de una forma más libre en el transcurso del proyecto ya que no siguen el trabajo semanal principal, por lo que no hay un cronograma para estas tareas. Se pueden dividir de la siguiente forma: Estudio previo a la investigación Incluye el estudio de las distintas técnicas posibles para conseguir el objetivo original de la investigación: un sistema que modifique modelos 3D en tiempo real, se han tenido en cuenta técnicas de animación de huesos, nubes de puntos, shaders y el propio modelado a mano de variaciones, pero se llegó a la conclusión de trabajar las BlendShapes debido a su sencillez y forma sencilla de aplicar. Edición en Blender Este programa permite el modelado, escultura, animación... de objetos 3D, en este caso se aplicó esta técnica siguiendo un tutorial (Glauz, 2016). A continuación, se explica en detalle el trabajo seguido en este programa: Primero, se decidió usar el modelo del pez, creado para el videojuego Reverie Island, ya que posee una buena distribución de polígonos y no daba mayores problemas, se importó sin animaciones ya que distraerían del objetivo pág. 19
Sistema de gestión de Blend Shapes principal de la investigación, además se muestra una animación mediante blend shapes en el propio proyecto de demo. Después, en el modo de objeto se crean las blend shapes y escalas el modelo según tus necesidades. Ver Figura 1. Figura 1 Cuadro para añadir blend shapes en Blender. Se han generado las siguientes BlendShapes: • Belly_Max • Belly_Min • Arm_Max • Antenna_Max • Fin_Max • Tail_Max • Anim_Fin_Left • Anim_Fin_Right • Extra_Antenna Por último, se han editado esas blend shapes en el modo edición, usando las distintas herramientas para mover vértices y polígonos. También se ha hecho uso de las herramientas de selección suave, que permiten seleccionar esos vértices de una forma que no aplica las transformaciones en todos los puntos de una forma directa, pág. 20
Sistema de gestión de Blend Shapes por lo que ayuda a generar deformaciones más adecuadas para el trabajo con blend shapes. Importar modelo a Unity Después de terminar el trabajo en Blender, se consigue un modelo con BlendShapes integradas, por lo que se pasa a exportar en formato FBX, un formato que incluye todo lo necesario para usar un modelo 3D en un videojuego además de la información de las blend shapes. Al importar en el motor Unity, se puede apreciar que su MeshRenderer incluye las blend shapes generadas previamente. Esto permite modificar sus valores entre 0 y 100 para que se apliquen los cambios de las blend shapes. Diseño del código Se decide generar una librería de enlace dinámico que permite la agrupación de blend shapes y la modificación de sus parámetros. Además, se crean unas clases en el proyecto principal de Unity que representan a la criatura y el paso del tiempo, destinadas a la demostración del uso de esta librería. Las clases del proyecto principal de Unity son las siguientes: Creature.cs La criatura tiene los siguientes parámetros: • int hunger: Representa un parámetro de hambre • int age: Representa un parámetro de edad • bool fastGrow: Indica si la criatura puede crecer de una forma más rápida. • BlendShapeList bsList: Lista que se inicializa con los valores de las blendshapes del modelo. • BlendShapeGroup groupBelly: agrupa blend shapes que representan el estómago de la criatura. pág. 21
Sistema de gestión de Blend Shapes • BlendShapeGroup groupAntenna: agrupa blend shapes que representan la antena de la criatura. • BlendShape bellyUp: referencia a una de las blend shapes. • BlendShape bellyDown: referencia a una de las blend shapes. • Animator animator: referencia al animator del objeto. • BlendShapeAnimation blendShapeAnimation: grupos de blend shapes que forman una animación. • SkinnedMeshRenderer skinRef: referencia al skin renderer del modelo. Estos parámetros permiten la modificación de las BlendShapes en tiempo real, especialmente el hambre ya que es un parámetro que puede aumentar o disminuir, lo que afectará a la BlendShape del vientre, y la edad afecta al resto de BlendShapes. La animación de las blend shapes no hace uso de código en este caso, pero su clase permite pausar y reanudar dicha animación, se puede apreciar en la aleta de la criatura. Se ha implementado código para que la criatura crezca de una forma más rápida, tan solo hay que pulsar el botón “Fast Grow” y los cambios ocurrirán de una forma mucho más directa. Además, hay botón que reduce el parámetro de hambre para poder comprobar los cambios en tiempo real y con la interacción del usuario. También se puede girar la criatura para verla desde distintos ángulos y apreciar mejor los cambios, simplemente girando con las teclas AWSD. Por otro lado, en esta clase se inicializan las blend shapes para su correcto funcionamiento en la librería y se asignan ciertos métodos a los delegados para poder tener un acceso cómodo a la hora de modificar una blend shape, por ejemplo el método increaseAge(int id) se asigna al delegado valueUp, ya que se va a pág. 22
Sistema de gestión de Blend Shapes modificar cuando incrementa el valor de la edad, y así llamo a ese método en cada blend shape (aletas y cola), para que crezcan con el paso del tiempo. TimeCount.cs Tiene los siguientes parámetros: • float timePassed: tiempo que ha pasado mientras estás en la demo. • int seconds: segundos del tiempo. • int minutes: minutos del tiempo. • int timeGrown: tiempo en el que ha crecido la criatura y así evito que crezca de una forma indefinida en un frame. Respecto a la clase que controla el tiempo, se puede observar cuanto tiempo ha pasado, los cambios siempre ocurrirán cada 5 segundos, se plantea a futuro dejar a decisión del usuario cuanto tiempo tarda en crecer la criatura en esta demo. Por último, hay un botón de pause que permite parar el tiempo para observar los cambios de una forma relajada. Por parte de la librería dl hay las siguientes clases: BlendShape.cs Tiene en cuenta cierta personalización en caso de no querer valores de 0 a 100, guarda la información básica de una blend shape y algunos métodos. Esta clase tiene los siguientes parámetros: • SkinnedMeshRenderer modelSkinShapes: referencia al skin renderer del objeto. • float maxValue: valor máximo de esa blend shape. • float minValue: valor mínimo de esa blend shape. • string name: nombre de la blend shape. • int id: Posición en la lista de la blend shapes. • float currentValue: valor actual del peso de la blend shape. pág. 23
Sistema de gestión de Blend Shapes • bool isAnimOrGroup: si es una animación o un grupo de shapes. Tiene las siguientes funciones: • float valueScaled(float valueToScale, float maxValue = 100f): Escala el peso asignado a una blend shape, tiene utilidad con los grupos ya que el valor máximo en el caso de un grupo no equivale a 100. • void setWeight(float value): asigna el peso indicado a la blend shape. Los siguientes métodos son delegados destinados a la asignación de distintos eventos posibles para un manejo más cómodo de la librería sus métodos asignados se guardan en la propia blend shape: • delegate void OnValueUp(int id). • delegate void OnValueDown(int id). • delegate void OnClick(int id). • delegate void OnButtonPress(int id). BlendShapeList.cs Agrupa las blend shapes en una lista para un acceso más sencillo. Tiene los siguientes parámetros: • List<string> blendShapeNames: Lista que guarda los nombres de blend shapes. • List<BlendShape> list: Lista que guarda las blend shapes. También dispone de un método para encontrar blend shapes por su nombre, pero se podría usar otro método ya que la lista tiene acceso público, se debería mejorar a futuro. BlendShapeGroup.cs Junta varias blend shapes en un solo grupo, puede ayudar a un incremento lineal en los valores de las blend shapes. pág. 24
Sistema de gestión de Blend Shapes Tiene los siguientes parámetros: • List<BlendShape> shapes: lista de las shapes del grupo. • int shapeCount: cuantas shapes hay en la lista. • int activeShape: cual es la última shape activa. • float maxGroupValue: máximo valor total de todas las shapes del grupo. Su método principal es: void scaleGroupValues(bool increasing, float valueToScale, float maxValue = 100f), esta función tiene en cuenta si está aumentando o disminuyendo un valor como optimización. Escala los valores de una forma lineal como se puede apreciar en la antena de la criatura, por lo tanto, puedes encadenar el progreso de varias blend shapes como si fueran una sola. Como pendiente de mejora habría que guardar la active shape y reutilizarla para optimizar el proceso en el caso de haber varias shapes, también una forma de agrupar varios grupos se podría tener en cuenta, así se podrían generar grupos más generales como cara, torso... y estos dispondrían de grupos o blend shapes sueltas. BlendShapeAnimation.cs Esta clase es un BlendShapeGroup que representa una animación, solo dispone de funciones para iniciar o parar una animación. Documentación del proyecto Se ha optado por usar la herramienta Doxygen, ya que estoy familiarizado con ella y genera un formato web muy completo, además se ha creado un archivo MainPage.cs para Doxygen en el cual al abrir la web se puede acceder al Manual de usuario o a las clases directamente. Se puede encontrar en ambos proyectos, se pueden apreciar los diagramas de clases generados aquí. Ver Anexo Clases. Se podrán apreciar mejor dentro de los archivos del proyecto. pág. 25
Sistema de gestión de Blend Shapes 7. Resultados y conclusiones 7.1 Resultados Se han obtenido varios resultados con esta investigación, primero he creado un proyecto demo con una criatura que dispone de unas blend shapes que se pueden modificar gracias a la librería de código creada posteriormente. Después se han probado las distintas blend shapes con la clase que controla el tiempo, usando el botón de fast grow, ya que ayuda a apreciar un crecimiento más directo, pero no sería necesario según el tipo de juego o si el usuario ajusta el crecimiento con otros parámetros. Se puede apreciar como crecen los brazos y la aleta, además de la antena y cola. Ver Figura 2 y Ver Figura 3. También hay una animación de blend shapes integrada que se puede comprobar en la aleta dorsal, se puede apreciar en el ejecutable de los anexos sin mayor problema mientras el dispositivo Windows cumpla los requisitos mínimos. 9.6 Binarios distribuibles. Figura 2 Criatura edad 1 año, hambre 1, es su forma base. pág. 26
Sistema de gestión de Blend Shapes Figura 3 Criatura edad 100 años, hambre 100 Este resultado ocurre de una forma natural cada 5 segundos, podría llevarse a cabo cada segundo, pero se decidió hacerlo así, con el botón de crecimiento rápido a parte, ya que encajaría mejor en un juego. Si alimentas a la criatura el vientre cambiará hacia el estado de estar lleno otra vez. Como único problema a destacar es que la textura se acaba deformando, por lo que un cambio demasiado brusco, se notaría que es algo no intencionado y daría problemas, por lo tanto, habría que plantear un cambio de textura si el departamento artístico lo permite. La librería dll creada posteriormente, permite agrupar blend shapes por lo que se han generado nuevas blend shapes como “Antenna_Extra” y generan un resultado adicional al aumentar la edad del modelo, siguiendo la misma progresión lineal, esto permite agrupar un gran número de blend shapes si se busca este tipo de progresión. Ver Figura 4 Se han ajustado todas las blend shapes a esta librería y se puede ver su funcionamiento en el código de “Creature.cs”. pág. 27
Sistema de gestión de Blend Shapes Figura 4 Por la parte de rendimiento se han hecho distintas pruebas con ayuda del profiler de Unity, la herramienta que analiza el rendimiento en este motor, en el caso base no hay ningún problema a nivel de scripts, aunque es posible que el renderizado de blend shapes produzca alguna caída de Fps. Ver Figura 5. En el caso de probar con 15 criaturas no hay nada fuera de lo normal tampoco, y se ve el mismo tiempo de renderizado, suben un poco los picos respecto a los bucles que controlan el escalado de los valores, pero no es nada fuera de lo normal. En general las blend shapes están teniendo un buen rendimiento. Ver Figura 6. Figura 5 pág. 28
Sistema de gestión de Blend Shapes Figura 6 7.2 Conclusiones El proyecto tuvo retrasos importantes debido a la falta de un modelo 3D adecuado hasta principios del año, aún así se han cumplido los objetivos principales seguidos. Sobre los objetivos cumplidos, se ha conseguido generar una librería compatible con Unity, que permite modificar blend shapes, gracias al uso de delegados y organización en clases se pueden asignar ciertos métodos que permiten tratar estas deformaciones de una forma satisfactoria, sin embargo aún hay mucho margen de mejora y visual para poder llegar a una herramienta como es “Morphmixer” (Crazy Minnow Studio, 2018), aun así la ventaja en este caso es que no es necesario crear una copia del modelo con otras blend shapes y que está más orientada a la programación, por lo que puede ayudar a quien quiera trabajar con esta técnica al programar un videojuego. El proyecto funciona sin ningún problema de rendimiento por lo que ese objetivo está cumplido sin ningún problema, y se puede aplicar a mayor escala según el estudio de rendimiento realizado. Por último, se ha tenido en cuenta que otras técnicas podrían ser una alternativa como el sistema de huesos, pero no se ha hecho un estudio exhaustivo ya que no son fáciles de configurar y llevarían a generar un código diferente para su funcionamiento, actualmente no se considera que esta técnica tenga muchas desventajas de rendimiento mientras sea a baja escala y es usada por muchos estudios de videojuegos como se puede pág. 29
Sistema de gestión de Blend Shapes ver en “The Darken” (Loginova, 2020). Es algo que hay que tener más en cuenta, pero no hay duda de que esta técnica puede abarcar muchos usos y debería extenderse más en la industria. Como desventajas, el resultado visual no es el ideal, ya que esta técnica necesita mucho cuidado artístico y podrían aplicarse diferentes texturas para adaptar la deformación generada, por lo que es un trabajo artístico complejo. Tampoco se han cumplido los objetivos secundarios, el primero debido a la falta de una textura adecuada para generar cambios, aunque no es un tema que esté directamente relacionado a las blend shapes. Por otro lado, el sistema de huesos llevaría mucho trabajo prepararlo y que resulte en resultados equivalentes, por lo que no se ha realizado tampoco esta parte, aún así en la industria es normal combinar las dos técnicas para animaciones complejas. Como último apunte, no es buena idea aplicar esta técnica en un modelo de baja poligonación, ya que no habría una superficie adecuada para deformar. pág. 30
Sistema de gestión de Blend Shapes 8. Post Mortem Hay que mejorar los tiempos y plazos en general, aún así el videojuego Reverie Island y esta investigación se han llevado sin mayor problema. Tampoco hubo una forma adecuada de vincular esta investigación al gameplay principal, pero se plantearía como mejora a futuro, por ejemplo, para la blend shape del estómago de las criaturas. Sobre los objetivos sin cumplir hay que investigar mucho más, ya que no es tan sencillo combinar técnicas de textura, y podría ser un tema muy amplio. Las animaciones de huesos serían un problema más fácil de solucionar y se buscaría que usen clases lo más parecidas posibles a las blend shapes para que funcionen igual. En el videojuego se han cumplido los objetivos principales, excepto un sistema de recompensas completo, por lo que ese es el primer objetivo en el trabajo a futuro. Seguidamente hay que pulir muchas mecánicas del juego, como la de comer ya que la criatura no se alinea correctamente antes de comer un alimento. Por último, el equipo se centrará en cumplir los objetivos secundarios y mejoras recibidas en el feedback recibido a lo largo del desarrollo del proyecto. Como línea a futuro habría que implementar un sistema de serialización para guardar todos los objetivos cumplidos por el jugador, estado de las criaturas y más datos importantes. pág. 31
Sistema de gestión de Blend Shapes 9. Anexos 9.1 Documentación del código Generada mediante Doxygen, dispone de una página principal index.html con los principales requisitos e información del proyecto. Por la parte del videojuego se hará una explicación de la estructura de clases que también se podrá ver dentro de los archivos generados por Doxygen. 9.1.1 Documentación de la investigación Se puede encontrar en el siguiente enlace, abrir el archivo index.html: https://drive.google.com/file/d/1OeeJK7uGrxuQsN86XfVf5dlQNgF8WuSW/view?usp=sharin g Componentes La división de los componentes de ambos proyectos, Unity y dll sería la siguiente: • Criatura Representa a la criatura que muestra el uso de blend shapes. • Tiempo Parte que controla el tiempo en la demo. • Blend shape Datos de deformación de un modelo 3D, es el principal elemento que se maneja en la librería. pág. 32
Sistema de gestión de Blend Shapes Clases Diagramas proyecto dll y Unity pág. 33
Sistema de gestión de Blend Shapes pág. 34
Sistema de gestión de Blend Shapes 9.1.2 Documentación del videojuego Todo el código es de mi autoría excepto los scripts creados por Raúl López Martín: CinemachineManager, controladores de la música, controlador del cursor, controladores de los menús. Se decidió aplicar una máquina de estados en este proyecto porque es la mejor forma de organizar comportamientos complejos de una forma modular y separa el código de una forma limpia que lleva a menos problemas al cambiar código. También se aplica una factoría para generar esos estados, sin embargo, se podría mejorar guardando los estados en un “Diccionario” para no tener que generarlos cada vez. Se documentarán aquí todas las clases para que tengan constancia. Componentes En grandes rasgos, se puede dividir en 3 componentes principales: • Máquina de estados Representa la máquina de estados básica de una criatura y lo que define sus comportamientos • Juguetes Son objetos variados con propiedades físicas distintas que sirven para jugar o interactuar con las criaturas • Interfaz Incluye por un lado el menú radial de las criaturas para guiar al usuario y por otro el menú del juego. pág. 35
Sistema de gestión de Blend Shapes Clases Diagramas videojuego pág. 36
Sistema de gestión de Blend Shapes pág. 37
Sistema de gestión de Blend Shapes pág. 38
Sistema de gestión de Blend Shapes pág. 39
Sistema de gestión de Blend Shapes A continuación, pondré todas las clases indicando su herencia junto a una breve explicación de cada una en caso de que no quede clara su función. Se abreviarán las herencias a MonoBehaviour como MB, la clase interna de Unity para agregar scripts a objetos de la escena. • Singleton: MB Clase que implementa una versión genérica del patrón Singleton, usado para el acceso de variables en el GameManager. • GameManager: Singleton Guarda eventos generales como salir del juego u otros datos. • CinemachineManager: MB Clase que maneja la cámara y todos sus eventos. • ToyBase: MB Estructura y propiedades generales de un juguete • Ball: ToyBase • Food: ToyBase • PetData: ScriptableObject • CameraData: ScriptableObject • LoadScene: MB • CursorManager: MB • AudioManager: MB • MusicChange: MB • MainMenu: MB Es el menú principal del juego al iniciarse el juego. • PauseMenu: MB Menú que aparece al pulsar escape y para el juego. • QuestMenu: MB Menú que activa o desactiva la bitácora y lleva el progreso de misiones. pág. 40
Sistema de gestión de Blend Shapes • CreatureRadialMenu: MB Menú que representa las acciones con las que se puede interactuar con una criatura. • ExpresionesOjos: MB Script que gestiona los cambios en los ojos de una criatura. • CreatureStateManager: MB Gestiona todas las variables de la criatura y las envía al estado activo. • CreatureStateFactory Construye los estados cuando son necesarios. • CreatureBaseState Clase base abstracta de todos los estados. • BallGameState: CreatureBaseState Estado que gestiona el juego de la pelota. • CleanThePetState: CreatureBaseState Estado que permite limpiar a la criatura. • EatState: CreatureBaseState Estado que permite alimentar a la criatura. • IdleState: CreatureBaseState Estado que gestiona la criatura y sus paths mientras no estás interactuando con ella. • PetModeState: CreatureBaseState Estado donde la criatura espera a que elijas una opción del menú radial mientras está en animación idle. • PetThePetState: CreatureBaseState Estado que permite acariciar a la criatura. La documentación de las fuentes completa se puede encontrar en este enlace abriendo index.html: pág. 41
Sistema de gestión de Blend Shapes https://drive.google.com/file/d/17Uk_tmNR1geiOlC5Wisjh90n7QrcoBW8/view?usp=s haring 9.2 Requisitos mínimos de los proyectos Estos mínimos se aplican a los dos proyectos desarrollados en Unity, se podrá abrir y generar una build funcional para Windows 10 según estos requisitos: • Sistema con Windows 10 o compatible con Unity • Procesador: Intel Core 2 Duo E4500 @ 2.2GHz or AMD Athlon 64 X2 5600+ @ 2.8 GHz. Memoria: 4 GB RAM. • Tarjeta gráfica: GeForce 240 GT o Radeon HD 6570 – 1024 MB • DirectX: Versión 9.0c. • Espacio: 5GB en disco para el videojuego, 2GB para la parte de investigación. • Versión 2021.3.11f1 del motor Unity para poder abrir el proyecto en el engine. 9.3 Estructura del proyecto 9.3.1 Estructura de la investigación La estructura general es la siguiente, no hay subcarpetas a destacar: pág. 42
Sistema de gestión de Blend Shapes 9.3.2 Estructura del videojuego La estructura es la siguiente: Estructura carpeta de scripts 9.4 Manual del proyecto 9.4.1 Manual de la investigación Se puede encontrar dentro de la propia documentación de Doxygen en la página del index, incluido en el apartado “Documentación de la investigación”. pág. 43
Sistema de gestión de Blend Shapes 9.4.2 Manual del videojuego Este es el manual del videojuego: https://docs.google.com/document/d/1f3e5_fD99c5- IkB1xeGgdito3FDRFPIj/edit?usp=sharing&ouid=112429158742493388817&rtpof=true&sd=t rue 9.5 Archivos fuente Se pueden encontrar en el siguiente enlace de drive con permisos reservados a UDIT y alumnos. • Videojuego https://drive.google.com/file/d/1LyXJkVvkB9qztvV- X1OY9mP9DbJ_4UBu/view?usp=sharing • Investigación https://drive.google.com/file/d/1UDqtYZQmPYFyy- STV4PJ3Un8iTYfstqz/view?usp=sharing 9.6 Binarios distribuibles Se pueden encontrar en los siguientes enlaces: • Videojuego https://irlaluen.itch.io/reverie-island • Investigación https://drive.google.com/file/d/1OftwSUz7GjHGY- a8bxDhCPVOqWDo1196/view?usp=sharing pág. 44
Sistema de gestión de Blend Shapes 10. Referencias Abbit, G. (5 de 12 de 2021). Blender 3 - Complete Beginners Guide. Obtenido de Youtube: https://www.youtube.com/watch?v=jnj2BL4chaQ&list=PLn3ukorJv4vuU3ILv3g3xnUy EGOQR-D8J Crazy Minnow Studio. (17 de 12 de 2018). Obtenido de crazyminnowstudio: https://crazyminnowstudio.com/unity-3d/morphmixer/ Frozen Mist. (15 de 2 de 2020). Capture & Morph Unity3D GameObject. Obtenido de Youtube: https://www.youtube.com/watch?v=zjr2CRJ6K70 Glauz. (10 de 9 de 2016). Unity Character Customization with Blendshapes. Obtenido de Youtube: https://www.youtube.com/watch?v=ypRhJAfJXAc&list=PLBk4jmgxHOA179JBhZjqDu 6Zxxz_8CmjC&index=17 Loginova, D. (2020). AAA Games Animation with Motion Capture Systems. Obtenido de 80lv: https://80.lv/articles/aaa-games-animation-with-motion-capture-systems/ Santesteban, I. (2017). Obtenido de https://addi.ehu.es: https://addi.ehu.es/handle/10810/23787?locale-attribute=es Torres, M. S. (24 de 4 de 2015). Morph target animation: Prezi. Obtenido de Prezi: https://prezi.com/widtawy8rccb/morph-target-animation/ pág. 45
Search
Read the Text Version
- 1 - 45
Pages: