Quantcast
Channel: Intermédiaire
Viewing all articles
Browse latest Browse all 677

Diseño de aplicaciones para la tecnología Intel® RealSense™

$
0
0

Por Ryan Clark, Chronosapien Interactive

 

Download PDF[PDF 571KB]

 

 

Introducción

Cuando diseñamos para tecnologías de medios emergentes (por ejemplo, control de gestos), nuestra meta como desarrolladores de aplicaciones es que la experiencia sea entretenida para el usuario, además de resultarle intuitiva y familiar, y que le despierte entusiasmo. El diseño de navegación debe ser lo suficientemente intuitivo como para que, cuando los usuarios inicien una aplicación por primera vez, comiencen de inmediato a explorar sus funcionalidades. En nuestros experimentos más recientes con la tecnología Intel® RealSense™, nos esforzamos por crear una aplicación en la cual el usuario pudiera meterse de lleno, e intercalar a la vez suficientes funcionalidades interesantes de gestos como para mantenerlo cautivado. En lugar de pensar en la tecnología Intel RealSense como reemplazo de la entrada estándar de información, nos concentramos en las ventajas de los gestos naturales y en las funcionalidades exclusivas que ofrece el Kit de Desarrollo de Software (SDK) de Intel RealSense. Nuestra primera aplicación, Space Between, se centra en el seguimiento de manos y rostro, mientras que nuestra segunda aplicación incorpora más exclusividades del SDK, incluidas la detección de emociones y la segmentación de usuarios. En nuestro trabajo, aprendimos varias lecciones que a los desarrolladores podrían resultarles útiles, como diseñar gestos para facilitar el uso, hacer corresponder gestos con la mecánica de juego diseñada, desarrollar interfaces que se vuelvan familiares para el usuario y crear menús fáciles de usar y entender.

Diseño de información de entrada para la tecnología Intel® RealSense™


Figura 1:Space Between, desarrollada para usar la tecnología Intel® RealSense™.

Cuando creamos nuestra primera aplicación con Intel RealSense, comenzamos el proceso de diseño con la plataforma en mente. En lugar de determinar cómo portaríamos un estilo de juego al control de gestos, pensamos en las interacciones singulares disponibles mediante el control de gestos y qué experiencias podríamos concebir en función de ellos. Como nuestro desarrollo comenzó con el SDK de Intel® Perceptual Computing (el predecesor de la tecnología Intel RealSense), dirigimos nuestra atención a la posición bidimensional de las manos y su apertura como principales interacciones del usuario, las cuales forman la base de nuestra mecánica de juego. Con solo estas dos interacciones simples, queríamos dar a los usuarios una amplia variedad de interacciones posibles de juego. La mayoría de los cambios en las interacciones provenían simplemente de modificar la orientación de la mano del usuario, lo cual daba una sensación diferente a los gestos, aunque los valores medidos eran los mismos.

La principal aplicación que desarrollamos con la tecnología Intel RealSense es Space Between. Se trata de un juego desarrollado en Unity* en el que el jugador controla diferentes criaturas para explorar las profundidades del océano [Fig. 1]. Está dividido en múltiples minijuegos (que siguen un orden) y cada uno se centra en una criatura y una modalidad de entrada de información diferente. Cada gesto se usa de una manera que imita el movimiento de la criatura correspondiente y dirige a los personajes en forma directa. Por lo general se usan “uno a uno”: la mano se orienta de modo tal que se alinea con la criatura y tiene un efecto inmediato en el movimiento del personaje, por eso los controles son fáciles de entender y aprender.

Al diseñar estos minijuegos, sabíamos que necesitábamos comenzar con la entrada de gestos en mente. A partir de allí, iteramos en cada uno hasta que se adecuara. Después de usar el seguimiento de manos, el seguimiento de rostro y el reconocimiento de voz del SDK de Intel Perceptual Computing, llegamos a la conclusión que el módulo de seguimiento de mano era lo que más nos entusiasmaba. Al hacer la transición al SDK de Intel RealSense, nos encontramos con que los mejores módulos eran los relacionados con el seguimiento de manos, aunque la fortaleza del SDK radica en la cantidad de módulos que ofrece. Los minijuegos comenzaron todos con el seguimiento de manos como control principal, y se usaba el seguimiento de cabeza para atenuar los problemas con los gestos prolongados (hablaremos de esto más adelante).


Figura 2:Movimiento de ola en la etapa The Sunlight Zone.

En nuestro primer minijuego, The Sunlight Zone, el jugador controla una tortuga de mar en la vista de perfil. El diseño del juego comenzó con la idea de usar un gesto que imitara sacar la mano por la ventanilla de un automóvil; es decir, mover con fluidez la mano hacia arriba y hacia abajo con un movimiento similar al de una ola [Fig. 2]. La tortuga imita el movimiento de la mano del jugador y gana velocidad con cada ola que se completa. Originalmente, la única información de entrada era la posición de la mano del usuario sobre el eje y en la ventana de visualización como meta del personaje que controlaba el jugador. Después de la etapa de elaboración de prototipos, pudimos lograr un gesto más preciso con el uso del ángulo de la mano. Con este método, podíamos hacer que la tortuga reaccionara según el ángulo de la mano del usuario, lo cual daba la sensación de que la interacción era más sensible. Para obtener el ángulo de la mano a partir de la orientación de la palma del módulo de seguimiento de manos, seleccionamos un eje [Fig. 3].


Figura 3:Ejemplo de código de selección de un eje a partir de los datos de la mano.

Este era un gesto fácil de enseñar a nuevos jugadores, pero después de las pruebas observamos que resultaba extenuante después de menos de un minuto. Por esta consecuencia física, aprendimos acerca de la “resistencia consumida” [Fig. 4], que es la medida de cuánto se cansan los brazos cuando están levantados mientras realizan gestos. El problema era que el codo debía levantarse de manera perpendicular al cuerpo, de modo que aquel no podía sostener el resto del brazo. Este resulta ser uno de los gestos más agotadores.


Figura 4:Fórmula de resistencia consumida (fuente: Consumed Endurance (CE) – Measuring Arm Fatigue during Mid-Air Interactions, de http://blog.jhincapie.com/projects/consumed-endurance-ce-measuring-arm-fatigue-during-mid-air-interactions/).

Nos seguía gustando el movimiento de ola para controlar el personaje, pero para jugar con comodidad (y durante períodos prolongados), los usuarios tenían que poder apoyar los codos. Agregamos al juego una velocidad crucero, en la cual el personaje no avanza tan rápido y se lo puede controlar exclusivamente con el ángulo de la mano. Esto permite seguir jugando sin sentirse penalizados ni con la obligación de hacer el gesto de movimiento de ola durante mucho tiempo seguido.

Incluso después de agregar el ángulo de la mano para reducir el cansancio, los jugadores seguían necesitando tiempo para recuperarse antes del siguiente minijuego, The Midnight Zone. La manera de darles un respiro fue agregar un minijuego que no usaba gestos de mano. Para controlar el personaje en The Twilight Zone, el jugador simplemente se inclina en cualquiera de las cuatro direcciones, imitando el movimiento del personaje (una ballena). En cuanto al código, el seguimiento de estos movimientos de inclinación proviene del seguimiento de la posición central de la cabeza, tanto la profundidad como la posición en x en la ventana de visualización.

Diseño de interfaces para la tecnología Intel® RealSense™

No nos llevó mucho tiempo darnos cuenta de que diseñar aplicaciones basadas en gestos no era un proceso directo. Para nuestra versión de demostración de Space Between, necesitábamos incluir controles simples para la selección de los minijuegos. El caso de uso para estos controles era el de botones simples: solo necesitábamos una manera de seleccionar una opción y aceptarla. Nuestra primera interfaz basada en gestos reemplazó al control por mouse [Fig. 5]. La posición de la mano se utilizó para seleccionar, mientras que el gesto de pulsar (y más adelante, pulgares arriba) se usó para aceptar, con control por voz como respaldo. Si bien se trataba de una solución rápida (y temporal), vimos que usar la mano para seleccionar de un menú con este método era difícil y tedioso. A menudo, al hacer un gesto el cursor cambiaba de posición, por lo que se necesitaban botones con áreas de selección grandes. Nuestra iteración de esto fue dividir la ventana de visualización en tres y, para seleccionar, solo usar la posición de la mano sobre el eje x.


Figura 5:Nuestro menú inicial para seleccionar minijuegos de la demo de Space Between.

Nuestra siguiente iteración fue agregar un gesto de deslizamiento horizontal a la derecha o la izquierda [Fig. 6] para cambiar de juegos mediante el giro de un menú circular. Con un gesto de pulsar (o pulgares arriba) se seleccionaba el menú activo. Fue una mejora desde el aspecto visual (realmente alentaba la interacción del usuario) y redujo los falsos positivos y las selecciones accidentales. Descubrimos que al diseñar interfaces para control por gestos, es importante hacer hincapié en la sensibilidad mediante respuestas visuales y sonoras. Esto ayudó a compensar la pérdida de respuesta táctil.


Figura 6:La versión siguiente del menú de selección de minijuegos de la demo de Space Between.

Cuando diseñamos interfaces intuitivas, con frecuencia aplicamos ideas de interfaces móviles más que de las usadas para entornos de PC. Deslizar horizontalmente y tocar son gestos simples ya familiares para los usuarios, por eso continuamos analizando maneras de convertirlos al medio de gestos. Algo que se debe tener en cuenta cuando se usa el SDK para Intel RealSense es que los deslizamientos horizontales hacen referencia a algo específico: el movimiento de cada mano en una dirección explícita [Fig. 7]. Pero los gestos de saludo no tienen una dirección definida. Si se quiere que una mano haga el movimiento de saludo en ambos sentidos, hay que seguir la posición de la mano y determinar su velocidad. La ventaja de hacer esto es que como la mano del usuario comienza por reconocerse como en movimiento de deslizamiento horizontal, el tiempo y la velocidad del deslizamiento se pueden determinar con exactitud. Esto posibilita agregar impulso a las selecciones, de manera similar a lo que los usuarios están acostumbrados a hacer en los dispositivos móviles.


Figura 7:De la documentación de Intel: gesto de deslizar horizontalmente y gesto de saludar.

Aunque estas soluciones funcionan bien para navegar menús, nos dimos cuenta de que a veces los menús se vuelven directamente innecesarios en nuestra aplicación. Cuando diseñamos nuestro juego, a menudo tomamos como referencia Journey. Para aquellos que no lo conocen, se trata de un espléndido juego de aventura artístico creado por esa empresa de juegos que recurre al minimalismo para que se destaquen los elementos del juego. La pantalla de inicio tiene de fondo un desierto y las palabras “Start: New Journey” (en castellano: “Iniciar: nuevo viaje”). Se usa la mínima cantidad posible de menús y los controles se enseñan mediante animaciones transparentes [Fig. 8]. Al diseñar la pantalla de inicio de Space Between, decidimos omitir por completo la selección de etapas y concentrarnos en ofrecer como primera interacción del usuario una experiencia de juego. Cuando se reconoce la mano del usuario, los movimientos comienzan a agitar el aire frente a ellos, formando ráfagas de viento. Mientras el usuario juega con esa escena sencilla que tiene enfrente, las ráfagas balancean el bote y se inicia la experiencia del juego. En lugar de obligar al jugador a seleccionar una etapa específica, se juega cada uno de los minijuegos uno detrás del otro.


Figura 8: Captura de pantalla del juego Journey que muestra el uso minimalista de la interfaz de usuario para las instrucciones.

Cuando se diseñan menús (o mecánicas de juego) que requieren gestos, es importante agregar representaciones gráficas. Parece algo obvio, pero permite al usuario interactuar rápido sin tener que aprender cada una de las opciones. Es especialmente importante cuando no siempre es posible usar un gesto intuitivo para seleccionar opciones de menú. Al enseñar al jugador cómo realizar los gestos necesarios para la mecánica de nuestro juego, mantuvimos las representaciones gráficas como hojas de sprites simples animadas [Fig. 9]. A partir de ellas, el jugador puede determinar la orientación de la mano (o la cabeza), qué mano usar (o, en algunos casos, ambas) y el movimiento necesario para hacerlos. Como nuestro juego comienza sin repercusiones, hacer que el usuario aprenda qué acciones manejan los gestos no fue un problema. Optamos por un enfoque explorador del juego, puesto de relieve por el peligro cada vez mayor de las etapas. Debido a que el jugador aprende los gestos en los primeros minijuegos, usamos los mismos íconos en los posteriores para que las interacciones continúen resultando familiares.


Figura 9:Instrucción de hoja de sprites para realizar un movimiento de ola en Space Between.

Como los usuarios no están familiarizados con la mayoría de las interacciones, la comunicación de respuestas a cada acción es importante. El reconocimiento de gestos no es perfecto, pero eso el usuario necesita saber cuando un movimiento no se ha reconocido. En nuestra versión de demostración de Space Between, estas respuestas eran evidentes para el usuario: se mostraban en la parte superior de la pantalla en todo momento [Fig. 10]. A medida que se reconocían las manos, la cabeza y algunos gestos, los íconos correspondientes se iban desvaneciendo. En la versión completa de la aplicación, nos decidimos por un enfoque más integrado. Cuando el usuario ya no proporciona información de entrada, las criaturas vuelven a un estado predeterminado. Como ejemplo, en Sunlight Zone, cuando no se reconoce la mano del usuario, la tortuga de mar que este controla gira hacia atrás para nadar recto y cambia su estado de animación. Diseñamos todos los personajes de manera que cuando los estuviera controlando el jugador resplandecieran con un color específico. Para los juegos que usan cursores, logramos hacer que se desvanecieran o se hicieran sólidos, y complementamos esto con indicaciones sonoras cuando se recibe o pierde la información de entrada.


Figura 10:Respuesta visual de detección de manos y cabeza en la versión demo de Space Between.

Al integrar menús complejos, hallamos que no siempre es necesario integrar gestos como control principal. Si el uso de la aplicación lo permite, recurrir al mouse y el teclado para los elementos más tediosos (controles deslizantes e ingreso de datos) es mucho menos frustrante para el usuario. Es cierto que los gestos funcionan bien para botones y para alternar estados, pero usar datos de posición que requieren de varios ejes puede ser difícil de controlar para el usuario. Una manera de remediarlo es implementar un modo de entrada de datos que use un eje de movimiento cuando se realice un gesto de agarre (apertura o pellizco), pero esto no resuelve el problema de base. Aunque la tecnología de gestos está mejorando mucho, la mayoría de los usuarios todavía no la han utilizado. Si no es posible tener modalidades comunes para el ingreso de datos principales, la mejor solución es hacer los menús grandes. Tener una modalidad común de ingreso de datos como plan b no es una mala opción.

Al tomar decisiones sobre gestos para controlar menús que no siempre se pueden mostrar, seleccionar el gesto es sumamente importante. Pero, como mencionamos antes, muchas de estas acciones todavía no tienen movimientos o gestos asociados en la base de conocimientos del usuario. Como estudio de caso, uno de los ejemplos más notables es un menú de pausa (u opciones). Mostrar un menú de pausa es importante en la mayoría de los juegos y debería ser uno de los gestos que más rápido pudiese realizar para el usuario y reconocer la aplicación. Pero esto trae muchos problemas de diseño. Los gestos de otros medios conocidos (aplicaciones de mouse y teclado, tabletas, dispositivos móviles) no tienen nada en común. En los teclados se usa la tecla “Escape”, mientras que en los smartphones tiende a deslizarse el dedo desde el borde izquierdo de la pantalla (pero incluso esto no es algo que valga siempre). Por lo general, en esta acción interviene el extremo superior izquierdo, pero aun así muchos usuarios lo relacionan con el botón “Cerrar” de las aplicaciones de escritorio y buscan el extremo superior derecho. Usar esquinas específicas de la pantalla o gestos de deslizar no da buen resultado, por que se pierde seguimiento y por la activación accidental, respectivamente. En aplicaciones Intel RealSense, Intel recomienda usar el signo “v” [Fig. 11] para que aparezca un menú principal. La justificación es que se trata de un gesto fácil de reconocer y con poca probabilidad de realizarlo por accidente. Si bien no es intuitivo ni resulta familiar a los usuarios, la respuesta parece ser apostar a que con el tiempo comience a hacerse la relación. Además de implementar este gesto para el menú de pausa, agregamos múltiples sistemas redundantes. Si se pierde el seguimiento (las manos del usuario salen de los límites de la cámara) durante una cantidad de tiempo específica, aparece un menú (y métodos familiares con mouse y teclado).


Figura 11:El signo “v” de la documentación de Intel sobre RealSense, sugerido para llamar menús.

Múltiples módulos con la tecnología Intel® RealSense™

Cuando se implementan varios módulos del SDK de Intel RealSense, hay que considerar algo más que la facilidad de uso y la familiaridad: el rendimiento también pasa a tener importancia. Al trabajar con varios módulos, es importante hacer pausas y esperar a inicializar los módulos. Para Space Between, intercambiamos de módulo activo durante los cambios de escena, para que el usuario no note una reducción en la velocidad de fotogramas ni pérdida de seguimiento. Antes de cargar la escena, revisamos si hay diferencias en cuanto a los módulos requeridos, y si las hay, ejecutamos la inicialización. Intercambiar módulos activos con el SDK es sencillo: se inicializan los nuevos módulos y se llama a la función SenseManager del SDK. En nuestra aplicación, pausamos módulos cuando ya los usamos (p. ej., reconocimiento facial) o cuando el usuario no tiene control sobre la aplicación (p. ej., desactivar el seguimiento de rostro cuando se muestra un menú).

Al trabajar con los módulos del SDK, en especial los que usan fuentes de cámara, hay que lograr un equilibrio entre la velocidad de fotogramas y la regularidad de los datos. Si se utiliza AcquireFrame para recopilar nuevos datos, apagar la espera de todos los módulos y ajustar el tiempo de espera máximo sirve para reducir las fluctuaciones generales y aumentar la velocidad de fotogramas, al costo de perder algunos datos si el tiempo de espera cae demasiado. Las computadoras lentas necesitan que se les dé más tiempo para procesar los datos de los fotogramas, mientras que las computadoras rápidas no necesitan tanto tiempo. En Unity, esto se puede simplificar de modo tal que las configuraciones de juego más rápidas (menor complejidad gráfica) deriven en la asignación de más tiempo para procesar datos, y lo opuesto para las configuraciones gráficas más complejas. Una herramienta para este fin es QualitySettings, que viene integrada en Unity [Fig. 12].


Figura 12:Ejemplo de código que muestra RealSense ejecutándose en el subproceso de Unity con el tiempo de espera que depende de los ajustes de calidad.

Conclusión

La tecnología de gestos todavía es muy nueva. Por esa razón, diseñar aplicaciones basadas en gestos requiere de mayor iteración de lo normal, aunque usar una aplicación con reconocimiento de gestos bien diseñada bien vale la pena. Hay que tener siempre presente los conocimientos del usuario y tomar elementos de aplicaciones y medios con los cuales aquel esté familiarizado. El uso de menús debe reducirse al mínimo. Y sobre todo, no hay que temer probar cosas nuevas, aunque después se termine cambiándolas.

Futuras mejoras y cambios para Space Between

Hemos aprendido mucho del desarrollo de la aplicación de demostración y la versión completa de Space Between, y lo emplearemos para continuar mejorándola. Si bien se invirtió mucho trabajo en lograr que la mecánica de juego fuese lo más intuitiva y fácil posible, todavía se pueden hacer cosas para mejorarla más. Por ejemplo, la demo tenía respuestas visuales en la interfaz de usuario cuando se detectaban las manos y la cabeza del usuario. Con la idea de que la interfaz de usuario tuviera un diseño aún más minimalista, las dejamos de lado, pero nunca llegamos a incluir su reemplazo: respuestas visuales integradas en los personajes y el entorno mismo. Nuestra idea era que en lugar de tener una interfaz gráfica de usuario fija en la parte superior de la pantalla, que se viera todo el tiempo, haríamos que se iluminaran partes de los personajes para indicar que el usuario ahora las controlaba. Esto resuelve el problema de informar al usuario que el sistema ha reconocido su información de entrada, sin abarrotar el juego y manteniendo el entorno como centro de la atención.

Además de las funcionalidades relacionadas con Intel RealSense, hay otras que no quedaron en la versión actual de Space Between. Cuando diseñamos la versión completa del juego, investigamos mucho sobre la vida marina, en especial en las grandes profundidades. Algo que nos cautivó fue el mundo de la bioluminiscencia y cuánto dependen de ella las criaturas de los océanos. Teníamos muchas ganas de incorporar esto al juego porque sentíamos que era necesario para contar la historia de los océanos, pero también porque era fabuloso. En la versión actual del juego, pueden verse algunos de nuestros intentos de integrar la bioluminiscencia al entorno: los puntos que se acumulan son representaciones vagas de ella, las anémonas de mar la liberan en The Midnight Zone, hay criaturas que la liberan al morir en The Trenches. Sin embargo, esto no llega a ser como la versión completa de bioluminiscencia que teníamos en el juego y no le hace justicia a su belleza en la naturaleza.

Acerca del autor

Ryan Clark es uno de los fundadores de Chronosapien Interactive, una empresa de Orlando. Chronosapien Interactive desarrolla software dirigido a medios interactivos y se especializa en tecnologías emergentes. Actualmente está trabajando en una demostración para The Risen, se segunda aplicación en usar la tecnología Intel RealSense. Se puede seguir a la empresa en chronosapien.reddit.com, o comunicarse con ella a theoracle@chronosapien.com.

  • Space Between
  • Chronosapien Interactive
  • Intel RealSense
  • Intel RealSense SDK
  • Gesture Recognition
  • Développeurs
  • Microsoft Windows* 8
  • Développement de jeu
  • Technologie Intel® RealSense™
  • Expérience utilisateur
  • Windows*
  • Unity
  • Intermédiaire
  • SDK Intel® RealSense™
  • Technologie Intel® RealSense™
  • Développement de jeu
  • Caméra avant F200
  • PC portable
  • Tablette
  • URL
  • Zone des thèmes: 

    RealSense
  • Technologie Intel® RealSense™

  • Viewing all articles
    Browse latest Browse all 677

    Trending Articles



    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>