De lo siguiente que voy a tratar, aunque ya lo he tratado varias veces es de los mecanismos de tracking para la VR de cara a la siguiente generación, y lo hare utilizando como referencia una patente de Sony.

Su descripción inicial dice lo siguiente:

Se describe un método para identificar la posición de los dedos de una mano es descrito. El método incluye capturar la imagenes de la primera mano con una pluralidad de cámaras que son parte de un dispositivo que lleva el usuario. Dicho dispositivo esta conectado a la muñeca de la segunda mano y una pluralidad de cámaras que están dispuestas alrededor del dispositivo que lleva el usuario.

La patente hace referencia a un tipo de accesorio que es una pulsera colocada en una mano con cámaras integradas con tal de seguir el movimiento de las manos del usuario.

En realidad no tendría ningun secreto la patente si no fuese porque nos da algunas pistas importante respecto a lo que va a ser PlayStation 5. Empezando por una inclusión de un mecanismo de tracking outside-in consistente en como ocurre con el PS VR actual en una cámara colocada en un punto fijo pero en el caso que nos ocupa la cámara estaría literalmente integrada dentro de la consola.

En el dibujo nos dan a entender que la cámara esta literalmente dentro de la consola y que no se trata de un accesorio aparte. ¿Es esto así? Según la descripción de la FIG.9 si que es así por lo que estaríamos hablando que la cámara estaría integrada en la unidad principal de la consola y con ello también el array de microfonos que llevan las PlayStation Camera actuales.

La FIG.9 es un diagrama de un sistema de ejemplo para ilustrar un número de cámara, por ejemplo la camara 910, dentro de la consola de videojuegos 106 para determinar la posición relativa o la orientación de cada una de las manos del usuario respecto a cada una de ellas. La camara 1910 esta integrada dentro (por ejemplo conectada, encajada…) en un compartimiento dentro de la consola 106 por lo que las lentes de la cámara 910 tienen una visión del mundo real desde el frontal de la consola 106. La camara 910 de la consola de videojuegos 106 genera una imagen genera una imagen de un item, por ejemplo lo dispositivos 102A y 102B (Se refiere a las pulseras) y lo dedos y manos del uuario 302, esta imagen es proveída por la cámara 910 al procesador de juegos de la conola 106 y este último determina una posición y orientación del item respecto a un sistema de coordenadas x,y,z con origen de cordenadas en la camara 910. El procesador de juegos (Es el chipset de la consola, no os preocupeis que no es ningún elemento nuevo) identifica lo datos (posición, orientación, textura, color, forma) de un objeto virtual desde la posición y orientación de un item y provee datos respecto al estado del HMD 310 para mostrar en la pantalla del HMD 310.

La ultima parte del parrafo citado respecto a la FIG.9 es confusa pero en realidad se refiere a que es la consola la que genera con su hardware lo que veremos en la unidad HMD y se refiere al renderizado de la escena. Por otro lado, no os debería extrañar cuando en smartphones y tablets estamos viendo «Kinects» integrados en ellos desde hace un tiempo, siendo el primer representante que apareció en el mercado el iPhone X de Apple que lleva en su frontal un «Kinect» y se trata de un smartphone.

La idea es que PS5 tenga lo mismo colocado en el frontal de su carcasa y si, se que muchos ante la idea de tener un «Kinect»… Pues su reacción es cuanto de desagrado.

Pero no olvideis que con el PS VR ya se tiene un Kinect… ¿Entonces que tiene de malo integrar uno en la consola si va a hacer un armatoste menos por el medio y menos lio de cables? La contrapartida es que paradojicamente la consola va a traer de serie un Kinect y esto es algo que se que para muchos…

Ahora bien, seguro que alguno habrá pensado… ¿Acaso no podría hacer tracking de las manos de manera directa la cámara Outside-in? Se debería poder en teoría pero en esta entrada os intentare explicar cuales son los handicaps de ello de cara a la VR. Sabemo que el Kinect V2 lo puede hacer…

¿Pero que hay de PS4? En el SDK de la PS Camera existe una libreria para ello pero por lo que no es algo limitado al Kinect V2 de Microsoft, por temas de copyright no voy a mostrarla entera pero pera que veais su existencia.

Pero no es tan eficiente como el Kinect en Xbox One… ¿El motivo? Solo utiliza la CPU y no la GPU, la cual es mucho más eficiente para procesar el reconocimiento de imagen.

Tenemos el enorme problema que tenemos que mantener una alta resolución y al mismo tiempo una alta frecuencia con tal de que el sistema sea útil para la VR, porque si la imagen tiene demasiada poca resolución entonces no encontraremo con que el dispositivo no será capaz de diferenciar la forma de la mano y si es demasiado lento entonces con la VR podemos tener problemas. El movimiento de la mano sería solo el movimiento de input capturado por la cámara, a partir de ahí tiene que ser interpretado y generado el fotograma correspondiente a la escena en la pantalla de nuestro HMD en menos de 20m.

Si miramos las especificaciones de la PS Camera entonces…

Tenemos tres modos de funcionamiento:

  • La cámara a 60hz son 16.67ms para capturar la imagen y por tanto pese a que entra dentro de los margenes no deja tiempo para el resto por lo que de entrada queda descartada.
  • La camara a 120hz es tierra de nadie, la resolución es demasiado baja para funcionar bien y la tasa de refresco también.
  • La camara a 240hz resulta en la velocidad adecuada pero con una resolución sumamente baja.

Pero nos queda la interpretación de la imagen y no es fácil, necesitamos algo que nos sirva de referencia y por suerte tenemos una referencia del rendimiento en el Kinect de Xbox 360 que nos va a servir como referencia y si, se que esto que voy a hacer tiene muchas inexactitudes pero es para ilustrar una cosa por lo que voy a realizar una aproximación muy alejada.

¿Para que quiero esto? Pues para tener una idea de la cantidad de operaciones por pixel que serían necesarias. Teniendo en cuenta que la CPU de Xbox 360 tiene una capacidad en coma flotante de 240 GFLOPS y que interpreta una imagen en 5ms entonces:

(240*10^9)/200= 1.200.000.000 Operaciones por imagen a 640×512.


Y con una simple división adicional podemos saber la cantidad de operaciones necesarias por pixel.

1.200.000.000/(640*512)=3663 operaciones por pixel

Supongamos que tenemos una PlayStation Camera con la misma resolución que la la de PS4 integrada en PS5 pero con la capacidad de funcionar a la misma a 240hz, hemos de tener en cuenta que nos interesa que dado que la camara ya se come unos 4.17ms del tiempo que la intepretación sea lo más rápida posible por lo que vamos a dejar que esta se haga… ¡En 1 ms! ¿Cuanta potencia necesitariamos en teoría?

3663 Operaciones por pixel*1280 pixeles de ancho*800 pixeles de alto*1000 hz de frecuencia= 3.75 GFLOPS de potencia.

Como se puede ver necesitariamos una potencia enorme de la GPU para realizar dicha interpretación de la imagen con la suficiente velocidad. Esto nos lleva a la necesidad de algúna pieza de hardware especial para poder llevar el tracking solo con la cámara frontal, de ahí a que Sony en la patente hable de utilizar las pulseras para el seguimiento de la mano porque la potencia necearia solo para la cámara frontal seria enorme dado que el hardware para la interpretación de la imagen que resulta necesario asusta. La idea de colocar de manera tan cercana la cámara respecto a las manos (en la muñeca) es no tener que necesitar una imagen de tanta resolución para procesar los movimientos de las manos y por tanto requerir menos potencia para interpretar la imagen capturada para dicha función.

Hay que tener en cuenta que los dispositivos de pulsera están conectados inalambricamente a la consola que es la que procesara la imagen capturada por el dispositivo de muñeca por lo que realmente el proceso de intepretación de la imagen será el mismo.

Fijaos como en la patente las pulseras no solo están comunicadas con la consola sino también con la unidad HMD, el motivo de ello lo explicare después pero por el momento continuemos con el escenario descrito basado en una cámara Outside-In para el reconocimiento de imagen. El caso es que necesitamos un hardware especializado que se dedique al reconocimiento de la imagen sin tener que tirar de la potencia de la GPU y dicho hardware existe y aunque no lo hemos visto en consolas si que lo hemos visto en otros dispositivos.

La idea sería una NPU conectada al uncore como un acelerador más. Las NPU se han vuelto extremadamente populares en los últimos años y tenemos varios ejemplos de ellas en el mercado en diferentes sectores. Un procesador neural o una unidad de procesamiento neural (NPU, por sus siglas en inglés) es un microprocesador que se especializa en la aceleración de los algoritmos de aprendizaje automático, por lo general, operando en modelos predictivos como redes neuronales artificiales (ANN) o bosques aleatorios (RF). Las NPU a veces tienen nombres dispares y algunas veces confusos, como una unidad de procesamiento de tensor (TPU), un procesador de red neuronal (NNP) y una unidad de procesamiento de inteligencia (IPU), así como una unidad de procesamiento de visión (VPU) y una unidad de procesamiento de gráficos (GPU).

Una NPU que me gustaría tratar como ejemplo es el NVDLA (Nvidia Deep Learning Accelerator) que se encuentra en el Tegra Xavier de Nvidia. El motivo de ello es que pese a ser un diseño de Nvidia lo han hecho Open Source  por lo que AMD pese a ser competencia de Nvidia lo puede implementar como acelerador en un futuro sistema para sus clientes con alguna que otra personalización y no tengáis dudas que lo vais a ver en muchos dispositivos.

¿Pero ocupa mucho espacio? De los 350mm^2 que mide el Tegra Xavier (bajo un proceso derivado de los 16FF de TSMC) la unidad DLA ocupa un porcentaje pequeño.

En realidad solo unos 22mm^2 en total por lo que es menos del 10% y en un proceso más avanzado ocuparía mucho menos. ¿Pero cual es su capacidad de calculo? Pues no es precisamente baja y nos solventaría el problema del tracking a través de la cámara frontal.

El NVDLA fue adoptado hace unos meses por ARM… Aquí teneis un extracto de la noticia para que veais que no es imposible que AMD licencie para sus clientes el DLA de Nvidia y lo ponga hipoteticamente en PS5 (Y Xbox Scarlett).

Hace unas semanas, cubrimos el anuncio de ARM de que se entregaría un conjunto de IP de hardware AI para Deep Learning, llamado Proyecto Trillium. ARM anunció en ese momento que la IP de terceros podría integrarse con la plataforma Trillium, y ahora ARM y NVIDIA se han unido para hacer precisamente eso.

Específicamente, las dos compañías integrarán la IP de NVIDIA para la aceleración de las redes neuronales convolucionales (CNN), el pan y la mantequilla para el procesamiento de imágenes y los sistemas guiados visualmente, como vehículos y drones. Sin mucha fanfarria, el Deep Learning Accelerator (NVDLA) de NVIDIA fue de código abierto el otoño pasado, otorgando licencias gratuitas de Propiedad Intelectual (IP) a cualquiera que desee construir un chip que use CNN para aplicaciones de inferencia (inferencia, para aquellos que no están familiarizados, es el procesamiento de una red neuronal entrenada). El sonido de llanto que está escuchando en todo el mundo es probablemente un grupo de nuevas empresas bien financiadas y sus inversionistas que pensaron que una docena de personas en un garaje podrían superar a NVIDIA en lo que respecta a los chips aceleradores de las CNN.

Esto le ahorra a AMD tener que hacer su propia unidad y adelantar el desarrollo a cambio de que Nvidia se lleve una pequeña regalia por chip. ¿Tecnología de Nvidia en un chip de AMD? Parece paradojico pero en esto tiempos la tecnología de unos esta en otros y viceversa. ¿Y por que no utilizar la GPU para ello? Pues porque es menos eficiente y aunque tuviesemos una configuración tipo Tensor Core eso sería a base de sacrificar potencia de la GPU en el renderizado de la escena y el uso del NVDLA es más eficiente… Pues bien quedaos con el NVDLA porque ahora mismo una vez aprendido el motivo por el cual es necesaria una unidad de este tipo para la intepretación de la imagen vamos a darle una vuelta a todo esto…

Hasta ahora hemos estado hablando de un tracking Outside-In pero la patentes de lo que parece ser el el PlayStation VR 2 son del tipo Inside-Out, son dos mecanismo dispares de tracking porque en el segundo tipo es el usuario el que lleva las cámaras y los mecanismos de tracking.

Esto indica un problema si queremos seguir el movimiento de las manos y de ahí a que Sony en la patente hable de un accesorio adicional haciendole tracking en las manos a muy corta distancia. Con el Outside-In la cámara si que ve las manos pero para poder identificar la forma de las manos necesitamos una resolución muy alta e incluso otro punto de referencia en forma de otra cámara para eliminar posibles intepretacione erroneas, lo que supondria tener que procesar las dos imagenes al mismo tiempo y que cada cámara tenga su procesador asignado con su unidad de procesamiento de imagen.

Sobre la unidad HMD en la patente, la patente nos habla de dos tipos de unidades HMD, la 310 no tiene tracking Inside-Out por lo que sería el equivalente al actual PS VR en cuanto a tracking.

Pero en la patente se nos habla de otro HMD con el numero 510 y que aparece en algunos dibujos de la misma.

Por la posición de la cámara estamos hablando de un Tracking Inside-Out desde el HMD 510 y en efecto así es:

La FIG. 5 es un diagrama de una realización de un HMD 510 que incluye una cámara 512. Por ejemplo, la cámara 512 está integrada, por ejemplo, incrustada, encajada, situada dentro, etc., de un compartimiento dentro del HMD 510 de manera que una lente La cámara 512 puede ver una parte del entorno del mundo real que está delante de la cámara 512. En una realización, el HMD 510 es un ejemplo del HMD 310 (figura 4). La cámara 512 del HMD 510 genera datos de imagen de un artículo, por ejemplo, las manos del usuario 302, incluidas las muñecas del usuario y / o los dedos del usuario, las palmas del usuario 302, los dispositivos portátiles 102A y 102B que lleva el usuario 302, etc.

Para ilustrar…

Esto nos permite ciertas experiencias imposibles con el tracking outside-in a la hora de interaccionar con objetos del entorno virtual.

La interpretación de imagen sigue el mismo proceso pero esta vez tenemos que la cámara se encuentra en el HMD… ¿Que significa esto? Pues que tenemos que añadir el SoC con el NVDLA a la unidad HMD y ha de ser este el que interprete lo que ven su cámaras, aparte de hacerle el tracking a los ojos para el Foveated Rendering. Además el SoC de la unidad HMD también interpretaria la imagen capturada por las pulseras, de ahí a que se encuentre conectado al mismo en el diagrama de antes.

¿Pero que ocurre entonces con la cámara Outside-in en la consola? Puede seguir estando, puede utilizarse solo para tracking o de la forma compleja que he comentado antes, en todo caso para la interpretación de imagen por cada posición de tracking visual nos será necesaria una unidad NVDLA.

Y ahora vamos a ir a algo a futuro cercano, muchas de las unidades HMD que vais a ver a partir del año que viene van a tener un NPU para la interpretación de la imagen en su SoC. Ya sea al NVDLA en unos casos como la NPU incluida dentro del SoC escogido de serie y se va a utilizar para este tipo de tracking. No es algo que sea ciencia ficción realmente y lo tenemos a la vuelta de la esquina.

Y con esto termino esta aburrida entrada, tenéis el Discord del blog y los comentarios del mismo para comentar.