Integración de media con Unity

Índice
- Introducción
- Objetivos
- 1.Assets
- 2.Animación externa
- 2.1.Creando personajes con Fuse
- 2.2.Animando y preparando en Mixamo
- 2.3.Exportación de Fuse a Mixamo
- 2.4.Creando el sistema de huesos
- 2.5.Reducción de polígonos
- 2.6.Importando y animando elementos de Mixamo en Unity
- 2.6.1.Pasos previos
- 2.7.Terrenos
- 2.8.Creación de arboles
- 2.9.Creación de césped
- 2.10.Otros elementos naturales
- 2.11.El tratamiento de los gráficos en Unity
- 3.Audio
- 4.Animación
- 5.Transiciones
- Resumen
- Actividades
- Bibliografía
Introducción
Objetivos
-
Saber explorar y seleccionar recursos para Unity en los principales portales contenedores.
-
Saber identificar los Media específicos que sean susceptibles de ser aplicados a un proyecto determinado.
-
Saber integrar Media externos a un proyecto dentro de un entorno Unity.
-
Conocer y practicar con técnicas de modelado con programas específicos.
-
Conocer y practicar el funcionamiento del sistema de huesos
-
Saber aplicar acciones a los personajes en base a los principios de cinemática.
-
Saber optimizar geometrías de modelos aplicando técnicas de compresión y reducción de mallas y polígonos.
-
Saber definir y construir diferentes elementos orgánicos de una escena dentro de un entorno Unity.
-
Conocer y aplicar los principios de los ciclos de animación a un proyecto integral en Unity
-
Saber utilizar un lenguaje básico de programación para trabajar con assets pre definidos para la optimización de las animaciones y los elementos propios del control de personajes de Unity.
1.Assets
«Un asset es una representación de cualquier ítem que puede ser utilizado en su juego o proyecto. Un asset podría venir de un archivo creado afuera de Unity, tal como un modelo 3D, un archivo de audio, una imagen, o cualquiera de los otros tipos de archivos que Unity soporta. También hay otros tipos de asset que pueden ser creados dentro de Unity, tal como un Animator Controller, un Audio Mixer o una Render Texture.»
1.1.Importación de assets
«Importando desde la Asset Store
El Asset Store de Unity es el hogar de una creciente biblioteca de assets comerciales y gratuitos creados por Unity Technologies y miembros de la comunidad. Hay una gran cantidad de assets disponibles, desde texturas, modelos y animaciones hasta ejemplos de proyectos completos, tutoriales y extensiones del editor. Estos assets son accesibles desde una interfaz simple dentro del Editor Unity y son descargados e importados directamente en sus proyectos.
Los usuarios de Unity pueden volverse publicadores en el Asset Store, y vender contenido que estos han creado. Este proceso es documentado en más detalle más tarde de esta sección.»
1.2.Sistema organizativo de la Store Unity

1.3.Acceso a la Asset Store e importación
«Los Assets creados afuera de Unity deben ser traídos a Unity al tener el archivo ya sea guardado directamente a la carpeta “Assets” de su proyecto, o copiado a esa carpeta. Para muchos formatos comunes, usted puede guardar su archivo fuente directamente a la carpeta Assets de su proyecto y Unity será capaz de leerlo. Unity va a notar cuando usted ha guardado nuevos cambios al archivo y va a re-importarlo si es necesario.»
«Cada tipo de asset que Unity soporta tiene un conjunto de Import Settings (ajustes de importación), que afectan cómo el asset aparece o se comporta. Para ver los import settings de un asset, seleccione el asset en el Project View. Los import settings para este asset van a aparecer en el Inspector. Las opciones que son mostradas van a variar dependiendo en el tipo de asset que fue seleccionado.»
«El Asset Store de Unity es el hogar de una creciente biblioteca de assets comerciales y gratuitos creados por Unity Technologies y miembros de la comunidad. Hay una gran cantidad de assets disponibles, desde texturas, modelos y animaciones hasta ejemplos de proyectos completos, tutoriales y extensiones del editor. Estos assets son accesibles desde una interfaz simple dentro del Editor Unity y son descargados e importados directamente en sus proyectos.»
1.4.AssetsPackges (Paquetes de assets)
«Los packages de Unity son una manera útil de compartir y re-utilizar proyectos al igual que colecciones de assets; Los Standard Assets de Unity e ítems en la Asset Store de Unity son proporcionados en packages (paquetes), por ejemplo. Los Packages son una colección de archivos y datos de proyectos de Unity, o elementos de proyectos, los cuales son comprimidos y almacenados en un solo archivo, similar a archivos Zip. Al igual que archivos Zip, un package (paquete) mantiene su estructura original de directorios cuando es desempacado, al igual que los meta-datos acerca de los assets (al igual que ajustes de importación y vínculos a otros assets).
En Unity, la opción del menú Export Package comprime y almacena la colección, mientras que el Import Package desempaqueta la colección a su proyecto de Unity abierto.»
1.5.Elementos diversos de Unity para Video Juegos
2.Animación externa
2.1.Creando personajes con Fuse
-
Cabeza
-
Dorso
-
Piernas
-
Brazos
-
Brazos
-
Rostro
-
Cabeza
-
Piernas
-
Dientes
-
Dorso
2.2.Animando y preparando en Mixamo
2.3.Exportación de Fuse a Mixamo
2.4.Creando el sistema de huesos
-
Standart Skeleton (65)
-
Chain Fingers (49)
-
Chain Fingers (41)
-
No fingers (25)


-
Dirección del golpe
-
Violencia del golpe
-
Velocidad del golpe
-
Distancia del golpe en relación a los brazos
-
Recorte del golpe


2.5.Reducción de polígonos
-
Ubique los gráficos que tienen alto impacto
-
Optimización CPU
-
GPU: Optimizando la geometría de un modelo
-
Lighting performance (rendimiento de iluminación)
-
GPU: Compresión de Textura y mipmaps
-
Distancias LOD y cull per-layer
-
Sombras en tiempo real
-
GPU: Tips para escribir shaders de alto rendimiento
-
Mantenga el número de materiales diferentes por escena bajo, y comparta tantos materiales que pueda entre objetos como sea posible.
-
Configure la propiedad Static en un objeto que no se mueva para permitir optimizaciones internas como static batching.
-
Utilice una única luz pixel light (preferiblemente directional) afectando su geometría, en cambio de varias.
-
Use la iluminación (static) en vez de usar una iluminación dinámica.
-
Utilice formatos de textura comprimidos cuando pueda, y utilice texturas 16-bit en vez de texturas de 32-bit.
-
Evite utilizar fog (niebla) cuando sea posible.
-
Utilice Occlusion Culling para reducir la cantidad de geometría que está visible y drawcalls en casos de escenas estáticas complejas con mucho occlusion. Diseñe sus niveles con occlusion culling en mente.
-
Utilice skyboxes para distancias de geometría “falsas”.
-
Utilice sombreadores de píxel o combinadores de texturas para mezclar varias texturas en vez de un enfoque multi-pass.
-
Utilice variables de precisión half cuando sea posible.
-
Minimice el uso de operaciones matemáticas complejas como pow, sin y cos en pixel shaders.
-
Escoja fewer textures per fragment (menos texturas por fragmento).
-
Utilización un solo Renderizador Skinned Mesh
-
Utilización de tan pocos materiales como sea posible
-
Utilización del menor número de huesos posible.
-
Cantidad de polígonos
-
Cinemáticas hacia adelante y hacia atrás separadas

100% = 5330 polígonos |
75% = 3997 polígonos |
50% = 2665 polígonos |
25% = 1337 polígonos |

2.6.Importando y animando elementos de Mixamo en Unity
2.6.1.Pasos previos



Conceptos de importación modelos originarios de otros programas de modelado 3D.
https://docs.unity3d.com/es/current/Manual/HOWTO-importObject.html
https://docs.unity3d.com/es/current/Manual/ModelingOptimizedCharacters.html
2.7.Terrenos
«El sistema del Terrain de Unity permite agregar vastos paisajes a los juegos. En el tiempo de ejecución, la renderización de terreno es altamente optimizada para una eficiencia de renderización mientras que en el editor, una selección de herramientas está disponible para crear terrenos de manera fácil y rápida. Esta sección explica las varias opciones disponibles para terrenos y cómo hacer uso de estos.»
«Usted puede agregar imágenes de textura a la superficie de un terreno para crear coloración y un detalle fino. Ya que los terrenos son objetos tan grande, es una práctica estándar utilizar una textura que se repite sin problemas y agruparla encima de la superficie (generalmente la repetición no es perceptible desde el punto de vista de un personaje cerca del suelo). Una textura servirá como la imagen de “fondo” sobre el paisaje pero usted también puede pintar áreas de diferentes texturas para simular diferentes superficies de suelo tales como pasto, desierto y nieve. Las texturas pintadas pueden ser aplicadas con una transparencia variable para que usted tenga una transición gradual entre un paisaje de césped y una playa arenosa, por ejemplo.»
2.8.Creación de arboles

-
Cantidad de hojas
-
Distribución
-
Geometría
-
Forma
-
Frondosidad
-
Viento
-
Crecimiento en el tiempo
2.9.Creación de césped
2.10.Otros elementos naturales
2.11.El tratamiento de los gráficos en Unity
«Global illumination, or ‘GI’, is a term used to describe a range of techniques and mathematical models which attempt to simulate the complex behaviour of light as it bounces and interacts with the world. Simulating global illumination accurately is challenging and can be computationally expensive. Because of this, games use a range of approaches to handle these calculations beforehand, rather than during gameplay.»
«By default, lights in Unity - directional, spot and point, are realtime. This means that they contribute direct light to the scene and update every frame. As lights and GameObjects are moved within the scene, lighting will be updated immediately. This can be observed in both the scene and game views.»
«These ‘lightmaps’ can include both the direct light which strikes a surface and also the ‘indirect’ light that bounces from other objects or surfaces within the scene. This lighting texture can be used together with surface information like color (albedo) and relief (normals) by the ‘Shader’ associated with an object’s material.
With baked lighting, these light textures (lightmaps) cannot change during gameplay and so are referred to as ‘static’. Realtime lights can be overlaid and used additively on top of a lightmapped scene but cannot interactively change the lightmaps themselves.»
«Whilst traditional, static lightmaps are unable to react to changes in lighting conditions within the scene, Precomputed Realtime GI does offer us a technique for updating complex scene lighting interactively.
With this approach it is possible to create lit environments featuring rich global illumination with bounced light which responds, in realtime, to lighting changes. A good example of this would be a time of day system - where the position and color of the light source changes over time. With traditional baked lighting, this is not possible.»
«In Unity, precomputed lighting is calculated in the background - either as an automatic process, or it is initiated manually. In either case, it is possible to continue working in the editor while these processes run behind-the-scenes.
When the precompute process is running, a blue progress bar will appear in the bottom right of the Editor. There are different stages which need to be completed depending on whether Baked GI or Precomputed Realtime GI is enabled. Information on the current process is shown on-top of the progress bar.»
«The advantages of this approach is that it can be very fast - meaning hardware requirements are lower than alternatives. Additionally, Forward Rendering offers us a wide range of custom ‘shading models’ and can handle transparency quickly. It also allows for the use of hardware techniques like ‘multi-sample anti-aliasing’ (MSAA) which are not available in other alternatives, such as Deferred Rendering which can have a great impact on image quality.»
«In 'Deferred' rendering, on the other hand, we defer the shading and blending of light information until after a first pass over the screen where positions, normals, and materials for each surface are rendered to a ‘geometry buffer’ (G-buffer) as a series of screen-space textures. We then composite these results together with the lighting pass.
This approach has the principle advantage that the render cost of lighting is proportional to the number of pixels that the light illuminates, instead of the number of lights themselves. As a result you are no longer bound by the number of lights you wish to render on screen, and for some games this is a critical advantage.»
3.Audio
3.1.Introducción
3.2.Elementos principales
3.3.Importación de elementos sonoros
Formato |
Extensión |
---|---|
MPEG layer 3 |
.mp3 |
Ogg Vorbis |
.ogg |
Microsoft Wave |
.wav |
Audio Interchange File Format |
.aiff / .aif |
Ultimate Soundtracker module |
.mod |
Impulse Tracker module |
.it |
Scream Tracker module |
.s3m |
FastTracker 2 module |
.xm |

-
MilkyTracker para OSX
-
OpenMPT para Windows
3.4.Trabajar audio desde Unity
3.5.Filtros de audio
-
Filtro de Audio Low Pass. El sonido se propaga según la interacción del mismo con los elementos de la escena.
-
Filtro de Audio High Pass Filter Evalúa las oscilaciones y resonancia de los sonidos.
-
Filtro de Audio Echo. Propagación del sonido de acuerdo con el tipo elementos de la escena.
-
Filtro de Audio Distortion. Simulación de distorciones sonoras.
-
Filtro de Audio Reverb. Personaliza la reverberación del sonido.
-
Filtro de Audio Chorus. Transforma el sonido en simulación tipo coro.
4.Animación
4.1.Introducción
-
Los clips animados
-
Los avatares
-
Los controles de animación
-
¿Qué es “Mecanim”?
-
¿Importa el orden de las capas que importo de los clips?
-
¿Cómo las animaciones que tiene Curvas se mezclan con aquellos que no?
4.2.El flujo de trabajo
4.3.Los Clips de animación
4.3.1.Animaciones humanoides y no humanoides
4.3.2.Animator Controller

4.3.3.Rendimiento y Optimización
4.3.4.Ciclos de animación – Ejemplo practico


using System.Collections; using System.Collections.Generic; using Unity Engine; public class NewBehaviourScript : MonoBehaviour { public float speed = 6.0F; public float jumpSpeed = 8.0F; public float gravity = 20.0F; private Vector3 moveDirection = Vector3.zero; void Update() { CharacterController controller = GetComponent<CharacterController>(); if (controller.isGrounded) { moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); moveDirection = transform.TransformDirection(moveDirection); moveDirection *= speed; if (Input.GetButton("Jump")) moveDirection.y = jumpSpeed; } moveDirection.y -= gravity * Time.deltaTime; controller.Move(moveDirection * Time.deltaTime); }
«Un asset Animator Controller es creado dentro de Unity y le permite a usted arreglar y mantener un conjunto de animaciones para un personaje u objeto. En la mayoría de situaciones, es normal tener múltiples animaciones y cambiarles entre sí cuando ciertas condiciones de juego ocurren. Por ejemplo, usted puede cambiar de una animación de caminar a una saltando cuando la barra de espacio sea presionada. Sin embargo, incluso si usted solo tiene un clip de animación, usted todavía necesita colocarlo a un animator controller para utilizarlo en un Game Object.
El controller tiene referencias a los clips de animación utilizados dentro de él, y maneja los varios estados de animación y las transiciones entre estos utilizando algo llamado un State Machine, que puede ser pensado como un tipo de diagrama de flujo, o simplemente un programa escrito en un lenguaje de programación visual dentro de Unity.»
4.4.Utilizando ciclos de animación tipo assets
5.Transiciones
«Las Animation transitions (transiciones de animación) le permite al state machine (maquina de estado) cambiar o mezclar de un animation state (estado de animación) a otro. Las Transitions (transiciones) definen no solo el tiempo de cambio entre los dos estados debería tomar, sino que también bajo qué condiciones debería estar activa. Una transición puede ser configurada para que solo ocurra cuando una cierta condición sea cierta, y estas condiciones son basadas en los valores de los parámetros configuradas en el Animator Controller.
Por ejemplo, su personaje podría tener un estado de patrullar y un estado durmiente. La transición entre patrullar y dormir puede ser configurada para que ocurra solamente cuando el valor del parámetro “alertness” caiga debajo de cierto nivel.»