Representar solo una parte de la pantalla con gran detalle

11

Si los gráficos se representan para un ángulo de visión grande (por ejemplo, un televisor muy grande o un auricular VR), el espectador no puede enfocarse en toda la imagen, solo en una parte de ella. (En realidad, este es el caso también para pantallas de tamaño normal).

Combinado con una forma de rastrear los ojos del espectador (que es más viable en realidad virtual, supongo), teóricamente podrías explotar esto y alejar los gráficos del foco del espectador con progresivamente menos detalles y resolución, ganando rendimiento, sin perder la calidad percibida.

¿Hay alguna técnica para esto disponible o en desarrollo hoy?

Bart van Heukelom
fuente
Es una idea interesante, pero supongo que no es viable porque la mayoría de las pantallas no vienen con un rastreador de ojos. También creo que cambiar la geometría a la velocidad del movimiento de los ojos podría tener un impacto negativo en el rendimiento. Por supuesto, podría diseñar su nivel / escenas de una manera que aliente al jugador a mirar ciertos puntos de interés y proporcione mallas muy detalladas allí mientras usa activos de menor calidad para los alrededores ...
bummzack
1
Consulte este artículo de Siggraph 2014: graphics.cs.cmu.edu/projects/multirate . No he tenido tiempo de leerlo, pero describe una forma de sombrear una imagen con una ejecución inferior a "1x fragment shader per pixel" y aún así obtener una imagen razonable. Quizás cualquier algoritmo o idea que describan pueda usarse para reducir la frecuencia de muestreo en los bordes de la pantalla y mejorar el rendimiento.
TravisG
Otro artículo que puede ser interesante: software.intel.com/en-us/articles/coarse-pixel-shading
TravisG
Esto es una cosa ahora, llamada Representación Foveated. roadtovr.com/…
Bart van Heukelom

Respuestas:

7

Hay ejemplos de tales efectos de los que estás hablando en muchos juegos. Primero, está la Profundidad de campo , que hace que el objeto a distancia se vea borroso, como si la cámara enfocara cosas cercanas, como en este ejemplo. Puede explorar más muestras relacionadas con esto en el paquete DirectX SDK; también tienen código de muestra allí. Para OpenGL, los obtendrá en la red si busca.

ingrese la descripción de la imagen aquí

La segunda cosa que querrás ver es lo que se conoce como Geometry MipMaping o Progressive Meshes que, como su nombre lo indica, es similar al mapeo de mip de textura, pero para la geometría. La cantidad de polígonos en una malla se reduce a medida que el objeto se aleja de la cámara. Esto ayuda a aumentar el rendimiento. En D3D, existe una función que ayudará a generar mallas progresivas automáticamente. Aquí está:

HRESULT WINAPI D3DXGeneratePMesh(
                                  LPD3DXMESH pMesh,
                                  const DWORD *pAdjacency,
                                 const D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights,             
                                  const FLOAT *pVertexWeights,
                                  DWORD MinValue,
                                  DWORD Options,
                                  LPD3DXPMESH *ppPMesh
                                 );

Aquí hay un ejemplo de esto:

ingrese la descripción de la imagen aquí

EDITAR: considere la siguiente imagen: ingrese la descripción de la imagen aquí

Este es el momento decisivo de la cámara. La línea que pasa por el medio es el vector LookAt. Ahora, suponiendo que el jugador siempre quiera enfocar en el centro de la pantalla, usted define el ángulo x. Cualquier objeto que se colocará en un ángulo mayor que el x decidido tendrá una representación de baja resolución, y los que están dentro del ángulo se representarán con detalle. De esta manera, los objetos en el centro de la pantalla serán más detallados que los de los lados. Si el jugador no está mirando al centro, simplemente ajuste esa línea central en la dirección en la que está mirando el jugador. (o tal vez gire toda la cámara en esa dirección).

The Light Spark
fuente
Aunque dudo que pueda obtener rendimiento implementando dof.
badweasel
@badweasel Bueno, eso es cierto. DOF no proporciona mejoras en el rendimiento, pero es un efecto que vale la pena mencionar. Le permite ocultar la geometría baja detallada y gruesa que a veces puede aparecer a cierta distancia.
The Light Spark
Elegí tu respuesta. Es una buena respuesta. Solo quería señalarlo ya que era parte de su pregunta.
badweasel
Estas técnicas utilizan la distancia z lejos de la cámara, pero me refiero a la distancia x / y lejos del punto en la pantalla que el usuario está mirando. Sin embargo, supongo que podrían adaptarse como tales.
Bart van Heukelom
1
@BartvanHeukelom Por qué, si el jugador no está enfocando en el centro, haces que la cámara gire para hacer lo que está molestando en el centro. Suena divertido.
The Light Spark
2

Sí, Foveated Rendering utiliza el seguimiento ocular para representar solo lo que el usuario está mirando con gran detalle. Todo lo demás, se puede representar con menor detalle.

ingrese la descripción de la imagen aquí

Si bien es bastante obvio al mirar una captura de pantalla como esta, según los informes, es invisible para el usuario en realidad virtual.

Los auriculares convencionales existentes no incluyen seguimiento ocular (todavía), pero hay algunas soluciones postventa para agregar seguimiento ocular. Además, se requiere una pequeña cantidad de procesamiento adicional para el proceso de renderizado. Sin embargo, los beneficios son significativos. Con la renderización progresiva implementada, solo un pequeño porcentaje de FOV debe representarse con gran detalle, esto puede dar como resultado velocidades de cuadro dramáticamente más altas. Los números exactos dependen de la implementación.

Además, esto ni siquiera se limita a los auriculares VR. También se puede usar en monitores de escritorio (con la adición de seguimiento ocular y un efecto más limitado).

MichaelHouse
fuente
1

Ampliando la respuesta de Byte56, sí, este tipo de cosas se están desarrollando en la industria. La representación fija de Foveated es una técnica empleada por Valve en su demostración de reparación de robots ( https://youtu.be/DdL3WC_oBO4?t=769 ) y en algunos juegos comerciales (me viene a la mente Resident Evil VII para PSVR). La representación fija de Foveated no emplea el seguimiento ocular, pero esto significa que funciona bien con las versiones actuales de auriculares VR que actualmente no tienen ningún tipo de capacidad de seguimiento ocular. Aunque en este momento se supone que Vive debe obtener un kit de actualización de seguimiento ocular, por lo que puede ver que algunos títulos AAA VR lo utilizan.

No encontrará muchas muestras de código disponibles relacionadas con este tipo de cosas, pero Nvidia tiene algunas extensiones de hardware que están decentemente documentadas. La resolución múltiple está bastante bien explicada, pero es una característica vinculada a su hardware.

Manojo miel
fuente