Controla un puntero con rotación facial en Spark AR

Resumen

Aprende a usar la información facial en Spark AR para controlar un puntero con la rotación de tu cara, pensado para desarrolladores de filtros y minijuegos en realidad aumentada que buscan interacciones cómodas y naturales.

La clave está en separar canales de rotación con nodos unpack y pack, calibrar el movimiento con un multiplicador y agrupar todo en un bloque limpio dentro del patch editor.

Cómo extraer la información facial en Spark AR

El primer paso es traer los datos de tu cara al patch editor para luego enlazarlos al puntero.

En Spark AR agregas un face tracker a la escena, pero en lugar de colocarle un objeto encima como un face filter, arrastras ese nodo al patch editor. Si no lo ves, actívalo en view, show/hide patch editor [01:05].

Al arrastrarlo, aparecen tres nodos encadenados:

  • Uno que detecta todas las caras visibles para la cámara.
  • Otro que selecciona la cara más prominente.
  • Y un tercero que expone atributos como posición, rotación y escala [01:30].

¿Qué hace un face tracker en Spark AR? Detecta las caras frente a la cámara y entrega su posición, rotación y escala como datos que puedes conectar a otros nodos para animar objetos.

Por qué usar la rotación y no la posición de la cara

La elección del atributo correcto define qué tan cómodo se siente el minijuego.

Al probar la conexión directa de la posición de la cara al puntero, el rango de movimiento es muy corto y exige desplazamientos físicos exagerados [04:10]. Eso rompe la jugabilidad: alguien lo intenta una vez, pero no aguanta 10 o 20 partidas.

La escala tampoco sirve, porque la cara mantiene un tamaño constante respecto a la cámara. Por eso el camino natural es la rotación, ya que estamos acostumbrados a girar la cabeza para decir sí, no o mirar a los lados sin mover el cuerpo [05:20].

Qué eje de rotación elegir para el puntero

De los tres ejes disponibles, el movimiento de negar con la cabeza resulta el más intuitivo para mover un puntero horizontal. El gesto de afirmar funciona si tu juego es vertical, y la inclinación lateral puede sacarte de la pantalla y hacerte perder concentración [09:40].

Cómo separar canales con unpack y pack

Aquí entra la parte técnica que evita comportamientos erráticos.

Si conectas la rotación directo a la posición, el puntero se mueve de forma extraña porque estás pasando tres valores donde solo necesitas uno. La solución es usar un nodo unpack, que recibe una entrada y la divide en tres salidas: una por cada eje [10:50].

Para agregarlo, das doble clic en el patch editor, presionas Tab o usas el botón de añadir patch, y escribes las primeras letras del nodo. Es una forma rápida de buscar sin recordar en qué menú está.

Después necesitas el nodo inverso, pack, que toma tres entradas (X, Y, Z) y devuelve una sola salida lista para conectarse a la posición [12:30]. Así reconstruyes solo los ejes que te interesan.

¿Para qué sirven los nodos unpack y pack? Unpack descompone un vector en sus componentes X, Y y Z, y pack los recompone. Juntos te permiten manipular un solo eje sin afectar los demás.

Cómo conservar la posición original del puntero

Antes de conectar nada, anota dónde quieres que viva el puntero en pantalla. En el ejemplo, el plano se reposiciona en Y a un valor de -0.15 para llevarlo a la parte inferior [03:30]. Ese valor lo mantienes fijo en el pack, dejas Z en cero y reservas el eje X para recibir la rotación procesada.

Cómo calibrar el movimiento del puntero

La rotación cruda es demasiado amplia y necesita ajuste fino.

Entre el unpack y el pack, agrega un nodo multiply para escalar el valor. Multiplicar funciona como un control de sensibilidad: valores como 0.03 o 0.004 te dan rangos cómodos sin restringir tanto el movimiento [14:20].

Si al girar la cabeza el puntero se mueve al lado contrario, multiplica por -1 para invertir el eje. Así el desplazamiento coincide con la dirección esperada por el jugador [15:00].

Pasos resumidos para calibrar:

  1. Conecta el eje elegido del unpack al multiply.
  2. Ajusta el factor entre 0.001 y 0.05 según pruebas.
  3. Si el sentido está invertido, usa un valor negativo.
  4. Conecta el resultado a la entrada X del pack.
  5. Lleva el pack a la posición del plano puntero.

Cómo agrupar nodos para mantener limpio el patch editor

Un proyecto de minijuego acumula decenas de nodos para fantasmas, lógica y puntajes.

Para evitar saturar la vista, selecciona los nodos del puntero, da clic derecho y elige agrupar, o usa el atajo control group. Renombra ese grupo como movimiento puntero [16:10]. El grupo encapsula la entrada de rotación, el unpack, el multiply, el pack y la salida hacia la posición.

Si necesitas modificar algo, abres el grupo desde la esquina y editas sin perder el contexto general. Es una forma práctica de organizar procesos en bloques reutilizables.

¿Cómo vas a calibrar tu propio puntero? Cuéntame en los comentarios qué eje te resultó más cómodo al probar tu filtro.