lunes, 24 de abril de 2017

Mejoras de físicas


Para finalizar con este proyecto preliminar, se realizó una revisión general del tipo de experiencia percibida por el usuario. En este caso, se decidió mejorar el manejo de físicas con respecto al manejo del movimiento del player. Para el proyecto en mención, al no tener fricción en el espacio, no es intuitivo manejar un vehículo usando las físicas normales del planeta tierra. Por tanto, la dirección del vehículo y el freno natural dado por la fricción deben ser manejadas de formas distintas.

Para este caso, se decidió aplicar del principio de aplicar rotación al vector de velocidad adicional al manejo usual de aplicación de fuerzas de Unity. En consecuencia, ya no se tiene parte del freno natural el cual representa la suma de vectores de direcciones diferentes, y por tanto la velocidad se acumularía rápidamente por la suma de velocidades. 

Frecuentemente en VR, la alta velocidad sin un límite es uno de los causante de sickness en el usuario. Por tanto, para evitar esto, se decidió manejar un límite en la velocidad máxima alcanzable por el usuario. De tal forma que esta no exceda un valor predeterminado y experimente sickness con la aplicación.


Adicionalmente, de las pruebas y comentarios de usuarios en pasadas pruebas, se decidió agregar igualmente Colliders a algunos elementos del ambiente, ya que estos se volvieron llamativos al usuario, y deseaban interactuar con ellos. Específicamente se agregó esto a las naves espaciales, para que el usuario pudiera aterrizar en ellas.


Finalmente, se probó la aplicación en usuarios, como se pueden observar en los siguientes vídeos. A partir de este punto, restará realizar pruebas con distintas configuraciones de ambientes, probando distintas formas de manejo de física y objetos. De tal forma que nos permita estudiar el fenómeno de sickness en escenarios VR con físicas diferentes a las tradicionales del mundo real. 


martes, 4 de abril de 2017

Mejoramiento de experiencia de usuario


Para el avance de esta semana, se trabajó para mejorar la experiencia del usuario con respecto a la mecánica de manejo de fuerzas; a la vez que se aumentó los elementos visibles en el ambiente.

Para esto, se agregaron elementos auxiliares como más estructuras, para que el usuario tuviera más opciones de exploración. Y de igual forma, se adicionaron naves espaciales, algunas de las cuales tenían movimiento. Esto ayudó al usuario a tener mayor número de referencias en el espacio, y poder gozar una mejor percepción de la velocidad y la posición del jugador. 
 

Y adicionalmente, se agregó a las opciones del usuario el reiniciar a la posición inicial; y el de 
reducir las fuerzas asociadas al movimiento del jugador a cero . Esto en la media que, pueden existir situaciones en las que el cambio de gravedad y el vector de fuerzas genere el movimiento que no desea realizar el usuario. Esta estrategia de frenado en seco le permite al jugador corregir su trayectoria y crear el movimiento deseado. 

Con las pruebas realizadas, se evidenció que esta mecánica es adecuada para el planteamiento de una experiencia de cambio de gravedad a voluntad del usuario. El resultado de este trabajo se puede verificar en los siguientes vídeos:


miércoles, 29 de marzo de 2017

Experimentación cambios de gravedad en Oculus Rift


Para el desarrollo de esta semana, se planteó realizar un experimento de experiencia de usuario, El cual buscaba a través de VR ver cómo sería el manejo de un vehículo en diferentes gravedades, como lo son estar en la Tierra, en la Luna, o en el espacio. Y de esta manera, poder evaluar el efecto de "VR sickness" y su relación con conceptos físicos como son la fuerza de gravedad.

Para esto, se desarrolló el código para cambiar las físicas del escenario, esto se puede hacer en Unity a través del atributo Physics.gravity. Y de igual manera, se le informa de esta modificación al usuario a través de los cambios de escenarios en el SkyBox del juego.

De esta forma, se generó una experiencia de usuario, en la cual, se notó una disminución en el "VR sickness", en la medida que el usuario estaba consciente del cambio de las físicas en el ambiente, que no son similares a las del mundo real, por lo que el mareo producido por la inmersión en el nuevo ambiente se disminuye con respecto a un escenario más realista. El resultado de este experimento se puede apreciar en los siguientes vídeos: 


sábado, 25 de marzo de 2017

Integración de Oculus Rift y G29 Driving Force


Durante el trabajo de esta semana, se buscó obtener una experiencia más real del ambiente virtual, a la vez que se disminuye el factor de "Virtual Reality Sickness". Para esto, se decidió integrar al Oculus Rift el G29 Driving Force manufacturado por Logitech.

De esta forma, definimos como control de juego el manubrio para girar de izquierda a derecha, y el acelerador y freno para mover el vehículo. Adicionalmente, se importó un asset de un vehículo para simular donde estaría ubicado el usuario.

El resultado final del experimento se muestra en los siguientes videos. Y se concluye que, efectivamente el tener una silla y un manubrio disminuye el factor de "Sickness" en el contexto de carros en realidad virtual. Es necesario trabajar con cuidado en aspectos como calibración de la aceleración y la velocidad de giro, para poder obtener una mejor experiencia de usuario.


miércoles, 15 de marzo de 2017

Oculus Rift + Unity 5


Para el desarrollo de esta semana, una vez instalado y configurado Oculus Rift en el PC, lo que resta es integrarlo con nuestra aplicación para convertirla en VR. En el caso de Unity 5, desarrollamos una pista de carreras en primera persona para este fin. Mostraremos entonces los pasos necesarios para convertir nuestra aplicación a VR.

Lo primero es, ir a Edit -> Project Settings -> Player. Esto nos ubicará una serie de opciones en el inspector de Unity acerca de la configuración del jugador. 

Las opciones se dividen en este caso, dependiendo si el proyecto se enfoca en VR para dispositivos móviles (v.g. Android), o aplicaciones de PC. En este caso, al ser la aplicación para PC, nos centraremos en la pestaña con símbolo "download". Y en la sección Other Settings elegiremos la opción de Virtual Reality Supported; y seleccionamos Oculus en caso que este no se detecte automáticamente.

Con esto, hemos configurado nuestro dispositivo para que la cámara principal pueda ser controlada por el HMD ofrecido por Oculus, y que este mismo refleje el escenario de nuestra aplicación vista desde la cámara. En el caso de nuestra aplicación, al ser primera persona, es suficiente agregar la cámara principal como hijo del Player, y controlar su movimiento por medio de scripts.

El resultado de este proceso se puede apreciar en los siguientes videos, por lo que en la próxima ocasión, se revisará el tema de buenas prácticas en el desarrollo de aplicaciones VR.


sábado, 11 de marzo de 2017

Introducción e instalación de Oculus Rift

Para el segundo ciclo de aprendizaje, se decidió trabajar en la tecnología Oculus Rift. El Oculus Rift, es un sistema de realidad virtual el cual integra HMD (Head Mounted Device), constellation sensor, y controles. Para poder usar este sistema, se requiere configurar el computador a través del instalador de Oculus, el cual se puede encontrar en el siguiente enlace. Una vez realizado este proceso, y de conectar y configurar el hardware de Oculus, es posible probar el dispositivo.

A través de la interfaz visible al usuario desde el HMD, es posible seleccionar/comprar aplicaciones y juegos compatibles con este sistema:


Uno de los aplicaciones ofrecidos por Oculus es el Dream Deck, el cual expone diferentes escenas a modo de muestra del tipo de experiencia que se le puede ofrecer al usuario con este dispositivo.

Por lo tanto, durante las siguientes semanas, se explorarán las buenas prácticas para el desarrollo de ambientes virtuales y su integración con otros ambientes de desarrollo como Unity.

miércoles, 8 de marzo de 2017

Finalización del ciclo de trabajo de Haptic


Después de varias semanas de aprendizaje, se concluye el ciclo de desarrollo de Haptic a través del demo de tower defense en primera persona. En este caso, se agregó la funcionalidad de "shield" a la aplicación. Con el fin de poder extender las mecánicas del juego.

En este caso, el jugador podrá invocar un escudo que lo protegerá de máximo tres ataques enemigos antes que este desaparezca del escenario. Este escudo podrá ser movido por el usuario a voluntad sobre el escenario a través del uso del Haptic. Una vez el escudo ha desaparecido del escenario, este tardará un tiempo en recargarse antes de poder volver a ser usado.

Finalmente, una vez cargado el 100% del escudo, el jugador será capaz de invocarlo nuevamente en el escenario a través del botón secundario del Haptic.

Adicional a esta mecánica, se implementó un sistema de puntuación, el cual le da 10 puntos al jugador por derrotar a enemigos usando bombas, y 5 puntos por defenderse usando el escudo. Y de igual manera, se implementa un sistema para aumentar la velocidad de los enemigos gradualmente  a medida que el jugador avanza en la partida; para aumentar la dificultad del mismo.

Con esto se muestran los resultados obtenidos en los siguientes videos, y se continuará con el proceso de aprendizaje de una tecnología HMD (Head Mounted Device) en la siguiente iteración:



miércoles, 1 de marzo de 2017

Creacion de juego interactivo con Haptic y Assets Unity 5



Para el trabajo de esta semana, se decidió crear un juego simple que integrara los Assets presentes en Unity con el uso del Haptic de Geomagic Touch.

Para esto, se creó un juego de tipo Tower defense en primera persona, en la cual la mecánica principal es usar el Haptic a modo de plataforma móvil para desplazar bombas en orden de derrotar enemigos específicos y evitar que alcancen al jugador.

Para esto, se importaron de la tienda de Unity asserts para la reconstrucción de un escenario forestal, en el cual el jugador será perseguido por tres tipos de enemigos, robots, osos, y zombies


Para defenderse, el jugador tendrá la oportunidad de hacer aparecer de forma aleatoria tres tipos de bombas en el escenario, "Atom" que sirve para derrotar a los robots, "Spikes" a los osos, y "Bombs" a los zombies. De forma que, un enemigo solo puede ser derrotado con el tipo de bomba adecuada.



Estas bombas aparecerán de forma aleatoria a la izquierda, al frente, y a la derecha del jugador al presionar las teclas "A", "S", y "D" respectivamente. Mientras que se esté presionando la tecla, la bomba estará en el aire cambiando de forma aleatoria, una vez se suelta la tecla, esta cae y el jugador debe usar rápidamente el Haptic para impulsarla en el escenario. 

En caso que el jugador falle y lo alcance un enemigo, aparecerá la cara del zombi enfrente del enemigo y será Game Over, para reiniciar el nivel se puede presionar la tecla "N".


Finalmente, se muestran videos de los gameplays resultantes del trabajo de esta semana:


lunes, 20 de febrero de 2017

Creación de Laberinto Interactivo con Haptics Plug + Unity 5

El objetivo de esta semana fue crear una primera aplicación interactiva para el Geomagic Touch usando Unity 5 y Haptic Plug.


Para esto, se creo un laberinto interactivo. En el cual el objetivo es usar el Geomagic Touch para mover una pelota en el extremo del laberinto hacia la salida del mismo. Para la realización del mismo se tuvieron en cuenta las siguientes anotaciones.

En el caso del laberinto, se usaron cubos estáticos, que interactuan con el Geomagic, pero no pueden ser trasladados por este. En este caso, se agrega el componente Haptic Properties al GameObject, se define el tag del objeto como "Touchable", y se marca que el objeto está fijo.


En el caso de la esfera, el proceso es similar al anterior; con la mayor diferencia que el objeto debe poder ser trasladable por el Geomagic Touch. En este caso, basta con no marcar la opción de estar fijo en el momento de definir sus propiedades.


Finalmente, es necesario definir un GameObject (puede ser vacio) que se encargue de ejecutar el script principal el cual controla los drivers de Geomagic. En este caso, lo principal es definir el modo de interacción (1 para Object Manipulation Mode), Y a su vez, es importante asociar al script los siguientes GameObjects en el escenario:

  • La cámara principal de la escena.
  • El Work Spaces del escenario, el cual define dónde se puede mover el Geomagic Touch.
  • El Haptic Cursor, el cuel es el objeto que representará el Geomagic en el escenario; y es el encargado de interactuar con los demás objetos del escenario.




Por medio de este procedimiento, se puede observar el resultado en el siguiente demo:



sábado, 11 de febrero de 2017

Geomagic Touch + Unity 5

Aplicación y uso del Haptics Plug para Unity 5


Una vez seleccionada la tecnología, es necesario escoger el ambiente de desarrollo y las herramientas necesarias para poder apropiarse de cada una de ellas. En el caso del Geomatic Touch, vamos a trabajar el desarrollo de aplicaciones a través de Unity 5.5 haciendo uso del Haptics Plug.

Haptics Plug es desarrollado por School of Simulation and Visualization (DSS), Glasgow School of Art, The Hub, Pacific Quay, G51 1EA.Glasgow, United Kingdom como solución para el uso de técnicas simples a través del Geomatic Touch. 

Para su uso e instalación, se debe contar con una cuenta en Unity, y desde la aplicación importar "Unity 5 Haptic Plugin for Geomagic OpenHaptics 3.3 (HLAPI/HDAPI)" desde la Asset Store. 


Adicional a este trabajo, se debe incluir en la carpeta raíz del ejecutable del proyecto Unity los archicos "glut32.dll", "hd.dll" y "hl.dll". Los cuales están incluidos en el directorio de instalación del Geomatic Touch.


Finalmente, es necesario mover los plugins localizados en la carpeta "Assets\Haptic Project Components\HapticPlugins" a la carpeta raiz de "Assets\", de esta forma serán funcionales las aplicaciones dentro de Unity.


De esta forma, se muestran entonces escenarios de prueba del tipo de aplicaciones simples que se pueden desarrollar en esta plataforma:



sábado, 4 de febrero de 2017

Instalación y trabajo con Geomagic Touch



El primer paso en este proceso fue la instalación y calibración del Geomagic Touch. Este es un dispositivo de navegación tridimencional y retroalimentación de fuerza.

Una de las aplicaciones más intuitivas es en esculpido virtual, en el cual se puede percibir los materiales y entidades virtuales como objetos físicos reales. Se puede apreciar una explicación más detallada del tipo de posibilidades de estos dispositivos en el siguiente vídeo:



Su proceso de instalación se puede revisar en el siguiente enlace. Y de igual manera, es conveniente tener en cuenta la instalación de los drivers en caso que estos no estén con el dispositivo.



Inicio de Proyecto en Ambientes 3D



El objetivo de este blog es llevar un registro acerca de mi progreso en el aprendizaje y apropiación de tecnologías para la construcción de ambientes interactivos en 3D.

Para esto publicaré cada avance que realice durante los siguientes meses, mi principal objetivo inmediato es aprender a usar las tecnologías HMD (Head Mounted Device) tales como Oculus Rift o Vive. Y complementarlo con tecnologías como Geomagic Touch o Phantom Omni.