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: