# data[].attributes.body
Usado para proyectar el ejecutable

# data[].attributes.body
Motor grafico utilizado para crear e interconectar todas las tecnologias

# data[].attributes.body
Detección de manos, por medio de una cámara

# data[].attributes.body
Modelado de objetos y texturizado

# data[].attributes.headline
Importar los modelos hacia unity como .fbx/.obj 

# data[].attributes.subject
Importar los modelos hacia unity como .fbx/.obj 

# data[].attributes.body
Mantienen los materiales designados en blender

# data[].attributes.body
Para compartir imágenes es necesario habilitar el paquete KlakSpout en Unity. Este paquete permite la comunicación entre ambas aplicaciones utilizando Spout, una tecnología que facilita el intercambio en tiempo real de texturas

# data[].attributes.body
Para conectar OpenCV con Unity, es necesario utilizar una biblioteca que permita integrar las funcionalidades de OpenCV en proyectos de Unity

# data[].attributes.body
Pensamos utilizar un objeto, que iba a seguir las coordenadas del mouse en pantalla, con un efecto de lazy mouse, todo esto por medio de un script.

# data[].attributes.body
Modelamos una aurora en blender y creamos su material con shader nodes

# data[].attributes.body
Decidimos generar la aurora dentro de unity, debido a que el modelo de blender era muy difiicl de maniobrar y modificar.

# data[].attributes.body
Unity tiene un efecto visual, que generaba un movimiento bastante bueno. Este efecto deja un rastro al desplazar el objeto

# data[].attributes.body
Utilice el Shader Graph, que se encuentra en el package manager de unity. Esto te permite generar materiales interesantes (similar al node shader de Blender)

# data[].attributes.body
Viendo este video logre generar un efecto de desplazamiento constante en la Aurora, alterando o produciendo un desplazamiento en los vertices de su textura dentro de Shader Graph.

# data[].attributes.attachment_link.title
Unity3d Graphics with Unity3d LWRP and creating a vertex displacement shader

# data[].attributes.body
Al finalizar el material deseado, se lo aplique al Trail y este al desplazarse se veía raro

# data[].attributes.body
Buscando como mejorar el movimiento me encontré con esto, muy útil e interesante .A pesar de que utiliza una textura para generar un desplazamiento mas natural. logre obtener casi el mismo resultado a pesar de utilizar Shader Graph

# data[].attributes.attachment_link.title
Unity 3D Trail Effect Script - MoveToTrailUV

# data[].attributes.body
Empezamos intentando usar MediaPipe para la detección de manos. Sin embargo, debido a algunas dificultades técnicas y limitaciones con la integración en Unity, decidimos buscar una solución alternativa.

# data[].attributes.attachment_link.title
Detección de objetos con MediaPipe en imágenes 🖼️ | Python - OpenCV

# data[].attributes.body
Después de encontrar algunas dificultades con MediaPipe, decidimos utilizar OpenCV, que es una herramienta más flexible y con más soporte para integrarse en Unity a través de bibliotecas externas

# data[].attributes.body
Para conectar OpenCV a Unity, instalamos el paquete adecuado (como OpenCV for Unity) y lo configuramos dentro de Unity, asegurándonos de que los scripts y bibliotecas de C# pudieran interactuar con las funcionalidades de OpenCV.

# data[].attributes.body
Realizamos pruebas en tiempo real para ajustar los parámetros de detección, como el umbral de color, la forma de la mano y el tamaño de la detección. El sistema empezó a detectar las manos con mayor precisión.

# data[].attributes.headline
Generación de detección de manos con OpenCV

# data[].attributes.subject
Generación de detección de manos con OpenCV

# data[].attributes.body
El proceso de modelado fue sencillo, comenzando con un cubo. Este cubo puede ser manipulado usando las herramientas de extrusión y escalado para crear la forma básica de la pajarera

# data[].attributes.body
Para el texturizado, se utilizó un material basado en Shader Nodes. Los Shader Nodes permiten crear materiales complejos y detallados sin necesidad de imágenes de texturas externas

# data[].attributes.body
El desafío surgió al intentar exportar el modelo a otros programas usando formatos como FBX o OBJ. Estos formatos no son capaces de traducir correctamente los materiales creados con Shader Nodes complejos, ya que estos nodos son específicos de Blender y no se interpretan de la misma manera en otros programas

# data[].attributes.body
Para solucionar este problema, se utilizó el proceso de Baking del material. Consta en el que los efectos visuales generados por los nodos, como sombras, luces y texturas, se "hornean" en una textura 2D que puede ser exportada y aplicada al modelo en otros softwares. Este paso convierte el material dinámico en una textura estática, asegurando que los detalles visuales creados en Blender se conserven durante la exportación.

# data[].attributes.headline
Posicionamiento y exportación de objetos y texturas. 

# data[].attributes.subject
Posicionamiento y exportación de objetos y texturas. 

# data[].attributes.body
Una vez bakeada la textura, posicionamos nuestro objeto en la escena y aplicamos su textura

# data[].attributes.body
Configuramos el script de Spout en Unity para compartir la cámara. Esta integración es bastante directa, pero requiere ajustar algunos parámetros para asegurarse de que la salida de Unity se refleje correctamente en Resolume

# data[].attributes.body
Después de configurar Spout en Unity, realizamos los ajustes necesarios en Resolume para recibir la señal de la cámara desde Unity. Esto implicó asegurarnos de que el canal adecuado estuviera seleccionado para capturar la textura generada desde Unity.

# data[].attributes.body
Realizamos varias pruebas de la conexión entre Unity y Resolume. Afortunadamente, una vez configurados correctamente, todo comenzó a funcionar perfectamente. La imagen de Unity se proyectó sin problemas en Resolume.

# data[].attributes.body
Comenzamos a realizar pruebas con el variando el posicionamiento del proyector y ajustamos las luces para verificar cómo se comportaba la proyección de Resolume

# data[].attributes.body
Comenzamos buscando sonidos en páginas de recursos de audio, eligiendo aquellos que encajaran con la estética visual generada. Optamos por una ambientación tranquila que complementara la experiencia visual de las auroras, con tonos suaves y etéreos que evoquen calma y conexión con la naturaleza

# data[].attributes.body
Este sonido puede representar algo como viento suave, texturas sonoras espaciales o un zumbido ambiental, creando una atmósfera inmersiva para el usuario desde el principio

# data[].attributes.body
Finalmente, realizamos pruebas en el escenario con la proyección visual y el audio para ajustar los niveles de volumen, asegurándonos de que la música ambiental y los sonidos reactivos no compitan entre sí, sino que trabajen juntos para mejorar la experiencia.

# data[].attributes.body
En Unity, utilizamos Audio Sources para reproducir los sonidos y controlar su comportamiento:

El sonido ambiental se asigna a un Audio Source con un loop habilitado.

Los sonidos reactivos se añaden como Audio Sources adicionales, activados mediante scripts conectados a los eventos de detección de OpenCV.