Tema: Confusión de la Resolución de renderizado vs. Resolución de codificación para (air)link
Mensajes
-
19 Abr 2018 09:12
Mensajes: 624
Ubicación: Tagoror (Canarias)
Visores
Desde hace mucho tiempo veo de manera generalizada mucha confusión acerca de estos dos tipos de Resolución (de renderizado y de codificación), típicas de Quest pero también extensibles a PICO y cualquier visor autónomo que funcione como PCVR mediante envío de imágenes usando compresión (USB-C o WiFi).
Aquí va mi granito de arena (intentaré resumirlo todo lo que pueda):
- Resolución de renderizado. Es la resolución a la que se renderizan los cuadros (frames) del juego/app que estemos usando (trabajo a piñón de la CPU/GPU).
En un juego "plano" (de monitor), dicha resolución suele coincidir con la resolución del monitor con el que estemos jugando o con el tamaño de la ventana si estamos en modo ventana.
En un juego VR se renderizan dos vistas (ambos ojos) y la resolución global puede coincidir con la nativa del visor, puede estar por debajo de esta (downsampling) o por encima (supersampling).
Lo ideal es que esté por encima de la resolución nativa pues, tras el renderizado de cada frame y, a diferencia de los juegos “planos”, existe un proceso extra llevado a cabo por el compositor (composer) el cual, grosso modo, aplica una deformación a la imagen, normalmente contraria a la de la propia lente para compensar la deformación de ésta, la cual implica pérdida de píxeles.
También se encarga de “mover” la imagen renderizada a la posición actualizada del visor en ese momento (durante los milisegundos que tarda en generarse la imagen el visor puede haber cambiado de posición) y, muy importante, de adaptar el tamaño de la imagen para enviarla al visor: el tamaño al que se reduce (o aumenta si estamos en downsampling) será la resolución nativa para un visor conectado por DP/HDMI o, en los casos que nos atañen, a la
- Resolución de codificación. Es la resolución a la que se codifica/comprimen los frames para enviarse al visor.
Dicha resolución, en la medida de lo posible, debería ser la resolución nativa del visor. En Quest se conoce como Ancho de la resolución de codificación (Encode Resolution Width, debajo de “Oculus Link” y “Distorsion Curvature” en el Oculus Debug Tool a.k.a. ODT) y debería estar en 3664 (el ancho de la resolución nativa del visor). Solo si el PC es de gama baja se podría bajar dicha resolución pero la calidad visual será bastante peor.
Corolario:
- La resolución de renderizado no va a afectar NUNCA a la calidad del envío de la imagen a las gafas por WiFi o USB-C. Afecta la resolución de codificación, bitrate, calidad del medio, de los chismes, etc. Si subimos o bajamos el “sampling” (Pixels Per Display Pixel Override en el ODT) no va a afectar a la calidad de la compresión del envío de imagen (salvo, claro está, que al subir dicho valor la GPU se ahogue y no pueda comprimir adecuadamente el vídeo a enviar al visor).
- Bajar la resolución de codificación y subir el supersampling no tiene ningún sentido. Repito: la resolución de codificación, en la medida de lo posible, dejarla siempre a la nativa (3664 en Quest 2). Luego podemos subir o bajar la resolución de renderizado según podamos/deseemos/laGPUnosdeje…
- Resumen muy muy resumido de la cadena de trabajo del hardware del PC al renderizar.
En un juego “plano”:
CPU (draw calls) → GPU → envío al monitor por DP/HDMIEn un juego VR:
CPU (draw calls) → GPU → composer (deformación, recolocación, reducción de tamaño Y codificación en el caso de haber compresión) → envío al visorJosé Ángel (a.k.a cestomano; a.a.k.a. ¿VR o RV?)