Renderizando apenas uma parte da tela em alto detalhe

11

Se os gráficos forem renderizados para um grande ângulo de visualização (por exemplo, uma TV muito grande ou um fone de ouvido VR), o espectador não poderá realmente focalizar a imagem inteira, apenas uma parte dela. (Na verdade, esse também é o caso de telas de tamanho normal.)

Combinado com uma maneira de rastrear os olhos do espectador (que é principalmente viável em VR), você poderia explorar isso teoricamente e desviar os gráficos do foco do espectador com progressivamente menos detalhes e resolução, obtendo desempenho sem perder a qualidade percebida.

Existe alguma técnica para isso disponível ou em desenvolvimento hoje?

Bart van Heukelom
fonte
É uma ideia interessante, mas acho que não é viável porque a maioria das telas não vem com um rastreador de olhos. Eu também acho que mudar a geometria na taxa de movimento dos olhos pode ter um impacto negativo no desempenho. Claro que você poderia projetar seu nível / cenas de uma forma que incentivar o jogador a olhar para alguns pontos de interesse e fornecer malhas oi-detalhados lá quando você usar os ativos de menor qualidade para os arredores ...
bummzack
1
Confira este documento da Siggraph 2014: graphics.cs.cmu.edu/projects/multirate . Não tive tempo de lê-lo, mas descreve uma maneira de sombrear uma imagem com menos de execução de "1x fragment shader per pixel" e ainda obter uma imagem razoável. Talvez qualquer algoritmo ou idéia que eles descrevam possa ser usado para reduzir a taxa de amostragem nas bordas da tela e melhorar o desempenho.
22414 TravisG
Outro papel que podem ser interessantes: software.intel.com/en-us/articles/coarse-pixel-shading
TravisG
Isso é uma coisa agora, chamada Renderização Foveated. roadtovr.com/...
Bart van Heukelom

Respostas:

7

Existem exemplos de tais efeitos dos quais você está falando em muitos jogos. Primeiro, há a profundidade de campo , que faz com que o objeto à distância pareça desfocado, como se a câmera estivesse focando coisas próximas a ela, como neste exemplo. Você pode explorar mais exemplos relacionados a isso no pacote DirectX SDK - eles também contêm código de exemplo. Para o OpenGL, você os encontrará na rede se pesquisar.

insira a descrição da imagem aqui

A segunda coisa que você pode querer ver é o que talvez seja conhecido como Geometry MipMaping ou Progressive Malhes que, como o nome sugere, é semelhante ao mapeamento de mip de textura, mas para geometria. O número de polígonos em uma malha é reduzido à medida que o objeto se afasta da câmera. Isso ajuda a aumentar o desempenho. No D3D, existe uma função que ajudará a gerar malhas progressivas automaticamente. Aqui está:

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

Aqui está um exemplo disso:

insira a descrição da imagem aqui

EDIT: considere a seguinte imagem: insira a descrição da imagem aqui

Este é o frustum de abate da câmera. A linha que passa pelo meio é o vetor LookAt. Agora, assumindo que o jogador sempre deseje focar no centro da tela, você define o ângulo x. Qualquer objeto que será posicionado em um ângulo maior que o x decidido terá uma renderização de baixa resolução e os que estiverem dentro do ângulo serão renderizados com detalhes. Assim, os objetos no centro da tela serão mais detalhados que os dos lados. Se o jogador não estiver olhando para o centro, basta ajustar a linha central na direção em que o jogador está olhando. (ou talvez gire a câmera inteira nessa direção).

The Light Spark
fonte
Embora eu duvide que você possa obter desempenho implementando o DOF.
badweasel
@badweasel Bem, isso é verdade. O DOF não fornece melhorias no desempenho, mas é um efeito que vale a pena mencionar. Permite ocultar a geometria baixa e detalhada, que às vezes pode aparecer à distância.
The Light Spark
Votei sua resposta de forma positiva. É uma boa resposta. Eu só queria salientar, já que fazia parte da pergunta dele.
badweasel
Essas técnicas usam a distância z da câmera, mas quero dizer a distância x / y do ponto na tela que o usuário está olhando. Suponho que eles possam ser adaptados como tal.
Bart van Heukelom
1
@BartvanHeukelom Por que, se o jogador não está focando no centro, você faz a câmera girar para fazer o que ele está fodendo no centro. Parece divertido.
The Light Spark
2

Sim, renderização otimizada utiliza o rastreamento ocular para renderizar apenas o que o usuário está vendo com grande detalhe. Tudo o resto pode ser renderizado com mais detalhes.

insira a descrição da imagem aqui

Embora seja bastante óbvio ao olhar para uma captura de tela como essa, é declaradamente invisível para o usuário em VR.

Os fones de ouvido convencionais existentes ainda não incluem rastreamento ocular, mas existem algumas soluções pós-mercado para adicionar rastreamento ocular. Além disso, é necessária uma pequena quantidade de processamento adicional para o processo de renderização. No entanto, os benefícios são significativos. Com a renderização otimizada implementada, apenas uma pequena porcentagem de FOV precisa ser renderizada com detalhes altos, o que pode resultar em taxas de quadros dramaticamente mais altas. Os números exatos dependem da implementação.

Além disso, isso não se limita aos fones de ouvido VR. Também pode ser usado em monitores de mesa (com a adição de rastreamento ocular e com um efeito mais limitado).

MichaelHouse
fonte
1

Expandindo a resposta do Byte56, sim, esse tipo de coisa está sendo desenvolvido na indústria. Fixed Foveated Rendering é uma técnica empregada pela Valve em sua demo de reparo de robôs ( https://youtu.be/DdL3WC_oBO4?t=769 ) e em alguns jogos comerciais (Resident Evil VII para PSVR vem à mente). A Renderização Foveated fixa não emprega rastreamento ocular, mas isso significa que funciona bem com as versões atuais de fones de ouvido VR que atualmente não possuem nenhum tipo de recurso de rastreamento ocular. Embora, no momento, o Vive deva receber um kit de atualização de rastreamento ocular, para que você possa ver alguns títulos de AAA VR utilizando isso.

Você não encontrará muitos exemplos de códigos disponíveis relacionados a esse tipo de coisa, mas a Nvidia possui algumas extensões de hardware que são decentemente documentadas. A resolução múltipla é bastante bem explicada, mas é um recurso vinculado ao seu hardware.

Honeybunch
fonte