Skip to main content
Este tópico descreve o sombreamento de taxa variável (VRS) e a iluminação esparsa. O VRS é um novo recurso de hardware e software do Direct3D 12 para alocar desempenho/potência de renderização em taxas variadas ao longo de uma imagem renderizada. Esse recurso leva a um desempenho aprimorado. Visualmente, a redução da taxa de sombreamento tem pouco ou nenhum efeito na qualidade perceptível da saída. O Microsoft Game Development Kit (GDK) de novembro de 2019 para XBOX Series X|S inclui suporte ao VRS Tier 2 no hardware do XBOX Series X|S.
Estas informações eram atuais em novembro de 2019. Vários recursos podem ter sido alterados ou atualizados desde então.

Introdução: VRS

A saída em 1080p e resoluções maiores resultou no desenvolvimento de técnicas de renderização que reduzem a carga de sombreamento de pixels. Essas técnicas incluem o seguinte:
  • Renderização foveada em realidade virtual
  • Renderização em tabuleiro de xadrez (checkerboard)
  • Upscaling temporal
O VRS foi o próximo passo lógico nessa progressão. O VRS para PCs foi lançado em março de 2019. Atualmente, ele está disponível no DirectX 12 e no Windows 10 usando as tecnologias Intel Ice Lake (Tier 1) e NVIDIA Turing (Tier 2). A AMD está produzindo placas gráficas aprimoradas para PCs criadas com a nova microarquitetura RDNA2 no período de fim de ano de 2020. Para obter mais informações sobre o VRS, confira o seguinte: Microsoft Game Dev Game Developers Conference (GDC) 2019 Siggraph 2019 Publicações Exemplos

Metas de design do VRS

  1. Taxas de sombreamento selecionáveis localmente para ajustar o equilíbrio entre a qualidade e o desempenho do jogo:
    • Qualidade total onde necessário.
    • Meia taxa, a mesma taxa da renderização em tabuleiro de xadrez.
    • Um quarto da taxa ou até menos.
  2. Profundidade, estêncil e cobertura são sempre em taxa total, com bordas perfeitas.
  3. O VRS é fácil de integrar a um mecanismo existente usando os mesmos sombreadores, com ou sem o VRS ativado.
  4. Sem preenchimento de buracos, sem passes ou buffers adicionais e sem suposições.
  5. A aparência suave e cinematográfica não é imposta. Visuais extremamente nítidos são possíveis.
  6. Compatível com upscaling temporal e suavização de serrilhado multiamostra (MSAA).

Escalabilidade local

O VRS pode reduzir seletivamente a taxa de sombreamento em áreas de detalhes de textura de baixa frequência. Por exemplo:
  • Áreas com desfoques, como profundidade de campo, desfoque de movimento e bloom
  • Situações de pouca iluminação ou saturação de luz
  • Oclusão parcial, como transparências, neblina, água, nuvens, atrás de folhagens ou elementos do heads-up display (HUD)
  • Detalhes de textura de baixa frequência, como partículas e transparências em meia resolução
Áreas que geralmente não são notadas. Por exemplo:
  • Bordas da tela
  • Áreas seguras de rastreamento ocular em realidade virtual
  • Objetos em movimento rápido
Figura 1. As taxas de sombreamento controlam as invocações do pixel shader (PS) por pixel. As taxas de sombreamento controlam as invocações do pixel shader por pixel A Figura 1 mostra quatro taxas de sombreamento do VRS.
  • Taxa 1 × 1: uma invocação de PS por pixel. Sombreia todos os pixels.
  • Taxa 2 × 1: meia invocação de PS por pixel. Mais detalhes na vertical.
  • Taxa 1 × 2: meia invocação de PS por pixel. Mais detalhes na horizontal.
  • Taxa 2 × 2: um quarto de invocação de PS por pixel. Um quarto da taxa.
Especifique a taxa do sombreador usando um dos métodos a seguir.

Fontes da taxa de sombreamento

Há três maneiras de especificar a taxa do sombreador.
  • Por chamada de desenho:
    • Tier 1 em PCs com Windows.
    • RSSetShadingRate define a taxa de sombreamento base e os combinadores para o VRS.
  • Por vértice provocador ou primitiva:
    • Tier 2 em PCs com Windows e no XBOX Series X|S.
    • Exportação usando SV_ShadingRate.
  • Mapa de espaço de tela:
    • Tier 2 em PCs com Windows e no XBOX Series X|S.
    • RSSetShadingRateImage define a imagem de taxa de sombreamento de espaço de tela para o VRS.
    • R8_UINT por bloco que contém enumerações D3D12_SHADING_RATE.
    • O aplicativo consulta o tamanho do bloco, que pode ser 8 × 8, 16 × 16 ou 32 × 32.
Figura 2. Fontes e combinadores da taxa de sombreamento. Fontes e combinadores da taxa de sombreamento A Figura 2 mostra um exemplo de fontes e combinadores com três fontes e um conjunto de dois combinadores.
  1. O primeiro combinador recebe as taxas de sombreamento da chamada de desenho e a exportação do vértice por parâmetro ou do vértice provocador.
  2. O segundo combinador recebe os resultados do primeiro combinador e os combina com o mapa de espaço de tela.
  3. A taxa de sombreamento final vai para o rasterizador.
Figura 3. API de combinadores. API de combinadores A Figura 3 mostra as chamadas da API de combinadores da Figura 2. Defina os combinadores para obter os resultados desejados. Figura 4. Resultado do VRS. Resultado do VRS A Figura 4 mostra uma cena renderizada com taxa variável em 4K, um tamanho de bloco de 8 × 8 e sem suavização de serrilhado temporal (TAA). Essa cena foi renderizada com muitas reduções da taxa de sombreamento. Figura 5. Taxa de sombreamento por bloco. Taxa de sombreamento por bloco A Figura 5 mostra a mesma cena usando um filtro Sobel e votação por bloco. A taxa 1 × 1 é vermelha. A taxa 2 × 1 é ciano e tem mais detalhes verticais, mostrando os detalhes de textura nas paredes à esquerda e à direita. A taxa 1 × 2 é amarela e tem mais detalhes horizontais. A taxa 2 × 2 é preta. Figura 6. Área ampliada. Área ampliada A Figura 6 amplia as pedras na parede do fundo da Figura 5 em uma área de 160 × 168 pixels. Isso corresponde a cerca de 0,3% da cena 4K original.
  • O sinal do VRS está no lado esquerdo da Figura 6.
  • A imagem de referência (ground truth), renderizada inteiramente com a taxa 1 × 1, está no meio da Figura 6.
  • As imagens da taxa de sombreamento e do erro absoluto estão no lado direito da Figura 6.
Figura 7. Área ampliada: taxa 1 × 1. Área ampliada: taxa 1 x 1 A Figura 7 mostra onde o sombreador que estava gerando a taxa do sombreador usou a taxa total 1 × 1. Observe que isso foi feito em áreas de alto contraste. Observe também que o sombreador identificou o reflexo especular na parte superior das pedras afetadas. Figura 8. Área ampliada: taxa 2 × 2. Área ampliada: taxa 2 x 2 A Figura 8 mostra onde o sombreador usou a taxa 2 × 2 na superfície das pedras. Observe a redução na qualidade do sombreamento para o sinal do VRS. Figura 9. Área ampliada: várias taxas de sombreamento. Área ampliada: várias taxas de sombreamento A Figura 9 mostra áreas em que várias taxas de sombreamento foram usadas em seções danificadas da superfície das pedras. Figura 10. Área ampliada: meias taxas. Área ampliada: A Figura 10 mostra áreas em que o sombreamento de meia taxa foi usado. Ele é útil para preservar detalhes em uma área específica. Sem o sombreamento de meia taxa, você precisa usar o sombreamento de taxa total. Figura 11. Quanto sombreamento fizemos? Quanto sombreamento fizemos? A Figura 11 mostra a quantidade de sombreamento feita durante a renderização da tela. A seção ampliada tem 20 × 21 blocos (160 × 168 pixels).
  • 94 blocos de taxa total (vermelho)
  • 143 blocos de meia taxa (ciano/amarelo)
  • 183 blocos de um quarto da taxa (preto)
Invocações de PS em 8 × 8 pixels por bloco:
  • Sem VRS = 26.880 threads de PS
  • Com VRS = 13.520 threads de PS
  • Invocações de PS divididas pelo número de pixels = 0,503

Derivando o mapa de espaço de tela

Recomendamos que você use o último quadro para prever o quadro atual. Por exemplo, o último quadro informará:
  • Onde você aplicará a profundidade de campo.
  • Onde ocorre o desfoque de movimento.
  • Que há uma área de pouca luz ou uma área de saturação de luz.
Um resumo do exemplo anterior (Figura 4 a Figura 11):
  • Começou com um filtro Sobel.
  • Os resultados foram obtidos sem usar reprojeção de movimento.
  • Os kernels de convolução X e Y foram verificados em relação ao gradiente e à luminância e, em seguida, comparados a uma taxa.
  • Votação por bloco sobre qual taxa de sombreamento usar.
  • Se o resultado da comparação for diferente de zero para X ou Y, a taxa será 2 × 1 ou 1 × 2.
  • Recomendamos que você use intrínsecos entre lanes (cross-lane).
O resultado é um processo com uma pequena superfície de API, sem alterações nos sombreadores e sem alterações no MSAA. Um passe de reconstrução não é necessário. A superfície do VRS está completa e pronta para renderizar.
Para obter um filtro atualizado, confira o exemplo VRSandSparseLighting nos exemplos de console do Microsoft GDK.
Figura 12. Alteração no local de invocação do PS. Alteração no local de invocação do PS A Figura 12 compara a imagem de referência na taxa 1 × 1 com um sinal do VRS da mesma cena. O VRS altera o local de invocação do PS, e isso pode criar problemas. Por exemplo:
  • O VRS pode capturar detalhes que não estão na imagem de referência.
  • Diferentes taxas de sombreamento podem capturar ou perder detalhes de subpixel.
Detalhes de subpixel, ou subamostragem, podem ser um problema.
  • Serrilhado temporal quando a câmera está se movendo:
    • Neste exemplo, temos problemas de serrilhado temporal mesmo sem o VRS.
  • As taxas grosseiras do VRS podem piorar a subamostragem.
    • Os gradientes de textura são mais longos em cada eixo grosseiro.
    • A seleção de mip inferior é automática e tem serrilhado aprimorado.
    • Usar níveis de detalhe (LODs) de malha melhora o desempenho.
    • Tenha cuidado ao usar serrilhado de sombreador.
    • Use o TAA para resolver problemas de renderização por subamostragem.

Taxas de sombreamento

As taxas 1 × 1, 2 × 1, 1 × 2 e 2 × 2 são o conjunto mínimo de recursos do VRS. Os PCs têm um recurso adicional usando AdditionalShadingRatesSupported, que dá suporte às taxas de sombreamento 2 × 4, 4 × 2 ou 4 × 4. As taxas 2x parecem ser as mais eficazes. Com as taxas 2x, pode ser difícil encontrar degradação de qualidade. Isso é especialmente verdadeiro com as taxas 2 × 1 e 1 × 2. Com as taxas 4x, é muito mais fácil ver diferenças na renderização, mas elas são mais difíceis de usar. As vantagens de desempenho diminuem ao usar taxas 4x. A seguir estão os resultados de desempenho do NVIDIA Tier 2 com o mapa de espaço de tela. Wolfenstein II: The New Colossus
  • O modo equilibrado tem uma melhoria de 6% em quadros por segundo (FPS).
  • O modo de desempenho tem uma melhoria de 9-10% em FPS.
  • Fonte: Digital Foundry
Civilization VI
  • Redução de 8-17% no tempo total de quadro.
Para conhecer os ganhos de desempenho em DOOM Eternal e Gears 5 e obter informações atualizadas, confira o vídeo a seguir:
Variable Rate Shading Update XBOX Series Consoles.

VRS Tier 2.x do XBOX Series X|S

Suporte nos consoles XBOX Series X|S

Os consoles XBOX Series X|S implementaram a especificação Tier 2 para PC no Microsoft Game Development Kit (GDK) de novembro de 2019 com os seguintes recursos e exceções. Recursos:
  • Taxas de sombreamento 1 × 1, 1 × 2, 2 × 1 e 2 × 2
  • Mapa de espaço de tela
Exceções:
  • Sem capacidade de modo 4x.
  • A saída da máscara de cobertura está incorreta no momento se você usar MSAA. Uma correção está planejada para esse problema de saída.
  • O hardware não implementa um centroide em conformidade com a especificação.
  • A exibição de destino de renderização (RTV) é permitida no mapa de imagem de taxa de sombreamento.

Extensões XBOX do XBOX Series X|S

O suporte está planejado para:
  • Supersampling com MSAA.
  • Deslocamentos de posição de amostra.
  • Combinadores extras.
  • Taxa de sombreamento por primitiva com vários visores.
  • Exportação da taxa de sombreamento a partir do sombreador de domínio.
  • Superfície de feedback da taxa de sombreamento.
Informe-nos suas prioridades de recursos usando os fóruns do Microsoft Game Development Kit (GDK).

Supersampling com MSAA

O XBOX Series X|S dá suporte às taxas de sombreamento de supersampling 2x e 4x. Por exemplo, elas são usadas no MSAA 8x. O conjunto de possíveis invocações de PS por pixel é o seguinte.
  • 0.25
  • 0.5
  • 1
  • 2
  • 4
  • 8
Uma invocação de PS por taxa 2 × 2 é a taxa mais grosseira possível. Com MSAA 8×, ela é efetivamente uma taxa de 1/32, ou 1 invocação de PS transmitida para 4 pixels × 8 amostras. Figura 13. Matriz completa das taxas de sombreamento do XBOX Series X|S. Matriz completa das taxas de sombreamento do XBOX Series X|S A Figura 13 mostra uma matriz das taxas de sombreamento do XBOX Series X|S que considera o domínio de supersampling. A matriz mostra o número de invocações de PS por pixel. Observe que não há modos retangulares no domínio de supersampling.

HTile e o mapa de espaço de tela

No XBOX Series X|S, a taxa de sombreamento é gravada em um mapa de espaço de tela, que é então transcodificado em HTile, onde o rasterizador lê a taxa de sombreamento.
  • O tamanho do bloco é sempre 8 × 8. Nenhuma consulta é necessária.
  • O bloco é lido durante a rasterização. Nenhuma largura de banda extra é necessária.
  • Uma extensão XBOX poderia realizar uma limpeza de profundidade e definir o mapa de taxa de sombreamento em um único passe. Isso melhora o desempenho.

Duas novas codificações de HTile

Duas novas codificações de HTile com Stencil estão disponíveis agora.
  • Sem suporte à taxa de sombreamento de supersampling:
    • Os bits livres 10-11 no Stencil do HTile são usados para armazenar a taxa de sombreamento.
  • Com suporte à taxa de sombreamento de supersampling:
    • São necessários quatro bits para a taxa de sombreamento. O HTile perde seu segundo pré-teste Hi-Stencil (bits 6-7). O primeiro pré-teste permanece.
No Microsoft Game Development Kit (GDK) de novembro de 2019, todos os HTiles usam a segunda codificação. No futuro, espere um sinalizador de recurso “nunca VRS” que retorna um formato de HTile “sem estêncil” para precisão extra. O suporte ao primeiro formato de HTile será adicionado ao Microsoft Game Development Kit (GDK).

Detalhes de implementação do XBOX Series X|S

Quando RSSetShadingRateImage é chamado, ele transcodifica o conteúdo em um HTile. Se não houver um HTile associado, um HTile temporário será alocado do alocador de comandos da lista de comandos. Isso habilita o VRS sem profundidade. O VRS pode ser usado para coisas como pós-processamento. Se a alocação falhar por falta de memória, o VRS será desativado. Se você alterar a exibição de estêncil de profundidade (DSV), recomendamos que chame primeiro RSSetShadingRateImage(nullptr). Caso contrário, você poderá pagar o custo de transcodificação novamente se a DSV tiver as mesmas dimensões. Uma RTV maior que 4K falha. Uma correção para esse problema está planejada para o Microsoft Game Development Kit (GDK) de abril de 2020.

O XBOX Series X|S tem combinadores extras

Figura 14. O XBOX Series X|S tem combinadores extras. O XBOX Series X|S tem combinadores extras A Figura 14 mostra os combinadores adicionais do XBOX Series X|S. Podemos expô-los se houver demanda.

Local de invocação do PS

O hardware do XBOX Series X|S dá suporte a deslocamentos de amostra no centro, no centroide e programáveis, que podem alterar o local de invocação do pixel shader.
  • Deslocamento de 4 bits para cada taxa de sombreamento
  • O local em que o PS é invocado pode mudar a cada ciclo de quadro

Incompatibilidades do VRS

Há algumas coisas que são incompatíveis com o VRS e o desativam no XBOX Series X|S. Isso ocorre quando o local do PS não se alinha com a amostra de profundidade ou com a amostra de estêncil.
  • Máscara de cobertura pós-profundidade
  • Raster Order Views (ROVs)
  • Importação de SV_Depth
    • Passe por meio do interpolador. Confira a definição do compilador de sombreador __XBOX_SV_POS_ZW_VIA_ATTRIBUTE, que faz isso para você.
  • Gravação de SV_Depth ou SV_StencilRef

Extensão Shading Rate Feedback Surface

A extensão Shading Rate Feedback Surface faz o seguinte:
  • Usa 2 bits de cmask
  • Registra se um triângulo foi renderizado em uma taxa fina ou grosseira em cada eixo
  • Remove a funcionalidade de limpeza rápida de cmask
  • É incompatível com o processo cmask para composição rápida

Resumo do suporte por plataforma

Figura 15. Suporte por plataforma. Suporte por plataforma A Figura 15 mostra o suporte a recursos de cada plataforma.
Estas informações eram atuais em novembro de 2019. Vários recursos podem ter sido alterados ou atualizados desde então.
Esteja ciente do seguinte:
  • O XBOX Series X|S dá suporte à maior quantidade de conjuntos de recursos.
  • Com recursos pequenos, é melhor usar blocos 8 × 8 em vez de blocos 16 × 16, pois eles aumentam a taxa de sombreamento para menos pixels.

Otimizações de desempenho de hardware do XBOX Series X|S

As melhorias de desempenho do XBOX Series X|S precisam ser feitas em conjunto com uma redução nas cargas do pixel shader.

Operações de bloco de cor

No pipeline gráfico lógico, um bloco de cor é uma das duas últimas operações lógicas antes da saída de renderização. Caminhos lentos Quando a RTV tem mais de 32 bits por pixel (bpp) ou a mesclagem está habilitada:
  • Sem VRS, há 4 pixels por ciclo de clock por back-end de renderização (RB).
  • Com VRS, há 4 pixels por ciclo de clock por RB. No entanto, a transmissão de grosseiro para fino leva n ciclos adicionais, em que n é igual ao número de pixels cobertos.
Caminhos rápidos Quando a RTV tem 32 bpp ou menos e a mesclagem não está habilitada:
  • Sem VRS, você pode usar o back-end de renderização otimizado (RB+) com uma taxa 2x, que equivale a 8 pixels por ciclo de clock por RB.
  • Com VRS, há 4 pixels por ciclo de clock por RB para uma taxa 1 × 1.
  • No entanto, o bloco de cor pode carregar lateralmente cópias de transmissão adicionais.
    • 4 pixels por ciclo de clock para uma taxa 2 × 1.
    • 8 pixels por ciclo de clock para uma taxa 1 × 2.
    • 8 pixels por ciclo de clock para uma taxa 2 × 2.
Há um limite de 16 pixels por ciclo de clock por RB. O trabalho do pixel shader agora é aprimorado porque o bloco de cor pode processar cópias adicionais.

RSSetShadingRate

Para usar o RB+, desative o VRS chamando RSSetShadingRate(D3D12_SHADING_RATE_1x1, nullptr);. Observe que RSSetShadingRate não altera o contexto (roll a context).

VRS e compressão de cor delta

A compressão de cor delta (DCC) agora tem um modo compatível com VRS que reduz a largura de banda.
  • O VRS gera um sinal que é mal compactado com a DCC normal.
    • Exemplo de sinal: âncora, delta, delta zero, delta, delta zero. Repetir.
  • Um modo compatível com VRS foi adicionado à DCC.
  • Otimizado para compactação próxima de 4:1 na taxa 2 × 2.
  • Proporções significativamente melhores para as taxas 2 × 1 e 1 × 2.

Iluminação esparsa

O VRS grava valores duplicados do g-buffer e os ilumina. Processar dados duplicados do g-buffer é um desperdício.

Iluminação esparsa: explorando o sinal do VRS

Para evitar desperdício de desempenho, examine os g-buffers em busca de valores duplicados e, em seguida, identifique e ilumine apenas um subconjunto de pixels. Por exemplo, em um quad de 2 × 2 pixels:
  • 1 pixel para uma taxa 2 × 2
  • 2 pixels para uma taxa 1 × 2 ou 2 × 1 (padrão de tabuleiro de xadrez)
  • 4 pixels para uma taxa 1 × 1

Exemplo de implementação de iluminação esparsa

Um exemplo que usa um tamanho de bloco de 16 × 16 e um tamanho de grupo de 8 × 8 é o seguinte.
  1. O thread do sombreador de computação compara os valores do g-buffer a cada 2 × 2 pixels.
  2. Em seguida, ele grava de 1 a 4 coordenadas por thread. Cada uma tem 32 bits por coordenada.
    • 4 bits para a coordenada x relativa ao bloco.
    • 4 bits para a coordenada y relativa ao bloco.
    • 3 bits que indicam se o valor deve ser copiado em x, em y ou na diagonal (para preencher buracos).
    • 21 bits são suficientes para um valor de profundidade.
  3. Uma das saídas é a contagem do número de operações de iluminação necessárias por bloco de tela.
Para obter informações atualizadas, confira o seguinte:
Variable Rate Compute Shaders - Halving Deferred Lighting Time. Exemplo VRSandSparseLighting.

Sombreador de iluminação adiada

O sombreador de iluminação adiada agora despacha uma wave por thread de bloco em vez de um thread por pixel.
  1. A wave percorre tileCount n vezes. O desempenho melhora quando você remove operações de iluminação iguais ou superiores ao trabalho de uma wave. Ao considerar o desempenho de Wave32 em relação ao de Wave64:
    • Wave32 produz um ganho de velocidade quando há 224 pixels ou menos para iluminar.
    • Wave64 produz um ganho de velocidade quando há 194 pixels ou menos para iluminar.
  2. O thread lê 32 bits, descompactando coordinate.xy e a profundidade.
  3. Faça a iluminação como você faria normalmente. As listas de luzes continuam invariantes na wave.
  4. Termine com até três cópias de transmissão do resultado iluminado.
    • Um bit para cada cópia horizontal, vertical e diagonal.
    • XOR1 é usado para calcular destination.xy para cada uma das três cópias.
    • O preenchimento de buracos é perfeito, pré-calculado e barato.
Figura 16. Resultado com iluminação esparsa e contagem de operações de iluminação. Resultado com iluminação esparsa e contagem de operações de iluminação A Figura 16 mostra, à esquerda, uma imagem 4K da cabeça de um leão de pedra com iluminação esparsa. O buffer de contagem está à direita. Ele mostra uma redução significativa nas operações de iluminação. Os g-buffers da pedra foram testados quanto a valores duplicados exatos com um pequeno intervalo de profundidade permitido (delta permitido de LinearZ de 0,001). Figura 17. Resultado iluminado, sem preenchimento de buracos. Resultado iluminado, sem preenchimento de buracos A Figura 17 mostra uma imagem ampliada do globo ocular do leão sem preenchimento de buracos.
  • Os buracos são pixels pretos.
  • 1 × 1 e todas as amostras são iluminadas.
  • 2 × 1 e 1 × 2 se parecem com tabuleiros de xadrez.
  • 2 × 2 ilumina uma amostra em cada quatro.
Observe que a malha de arame (wireframe) está visível. O problema aqui é que a taxa de sombreamento solicitada não é necessariamente a taxa de sombreamento que ocorre. Por exemplo, considere um quad de 2 × 2 pixels sombreado na taxa 2 × 2. Isso pode gerar de uma a quatro invocações de PS com zero de overdraw.
  • Uma invocação se o quad de pixels for coberto por um único triângulo.
  • Quatro invocações se o quad for coberto por quatro triângulos.
LODs de malha ruins geram resultados ruins de VRS. Figura 18. Comparação do g-buffer com delta adicionado de 0,025. Comparação do g-buffer com delta adicionado de 0,025 A Figura 18 mostra o resultado de adicionar um pequeno delta permitido nos valores durante a comparação do g-buffer. Os valores de normais estão à esquerda. Os valores de albedo estão à direita. Adicionar o pequeno delta reduziu o número de operações de iluminação e eliminou a malha de arame. A luma dessas imagens corresponde aproximadamente ao número de cálculos de iluminação. Isso se aproxima do conjunto ideal de pixels a iluminar: 1, 2, 3 ou 4 por taxa 2 × 2. Figura 19. Correspondência exata do g-buffer. Correspondência exata do g-buffer A Figura 19 mostra a imagem da cabeça do leão com os buracos preenchidos. É difícil notar a diferença entre as duas, mesmo quando ampliadas.

Exame do g-buffer com otimizações específicas do XBOX Series X|S

Há uma implementação aprimorada que não envolve examinar o conteúdo do g-buffer. Para obter mais informações, confira o vídeo e o exemplo a seguir.
Variable Rate Compute Shaders - Halving Deferred Lighting Time Exemplo VRSandSparseLighting O exame do g-buffer é caro. As otimizações específicas do XBOX Series X|S incluem o seguinte:
  1. Leia o mapa de taxa de sombreamento. Use o caminho rápido para blocos de taxa total e processe todos os pixels.
  2. Aproveite a superfície cmask de feedback da taxa de sombreamento. Use o caminho rápido para blocos de taxa reduzida cobertos por um único triângulo.
  3. Para os blocos restantes:
    1. Leia a chave de DCC e, em seguida, explore os deltas zero.
    2. Faça um exame do g-buffer.
      • Use o hash do g-buffer para otimização. Isso tem um custo de armazenamento e largura de banda.
      • Combine a leitura do g-buffer com passes que estejam fazendo outra coisa, como ler a profundidade.
Figura 20. Economia da iluminação esparsa em comparação com a iluminação adiada normal em 4K. Economia da iluminação esparsa em comparação com a iluminação adiada normal em 4K A Figura 20 mostra renderizações de cenas que comparam a economia da iluminação esparsa com a iluminação adiada em 4K.
  • cmask e DCC não foram usados nessas cenas.
  • A figura não inclui a economia do VRS nem do tempo de rasterização.
  • A descontinuidade de profundidade ao redor dos pilares causa uma grande partição de profundidade e uma contagem de luzes maior.
  • Na cena inferior, a contagem de luzes é relativamente baixa.
  • A cena superior tem o maior tempo total decorrido. A cena inferior tem o menor tempo total decorrido. As melhorias escalam favoravelmente com a complexidade da cena.

Integração com outras técnicas

VRS, dimensionamento dinâmico de resolução e upscaling temporal

O VRS não substitui o dimensionamento dinâmico de resolução (DRS).
  • É possível reduzir a taxa de sombreamento quando o tempo de quadro ultrapassa o tempo de quadro desejado.
  • As melhorias do VRS são imprevisíveis. Elas dependem do conteúdo da cena. Outros fatores incluem a iluminação.
  • O DRS tem um efeito maior e mais previsível no tempo de quadro.
As melhorias do VRS são um bônus.
  • Não substitua o DRS. Em vez disso, ajude o DRS a atingir resoluções mais altas.
  • Use o upscaling temporal para a resolução de saída.
Figura 21. VRS versus renderização em tabuleiro de xadrez no XBOX Series X|S. VRS versus renderização em tabuleiro de xadrez no XBOX Series X|S A Figura 21 compara o VRS e a técnica de renderização em tabuleiro de xadrez no XBOX Series X|S.

Fatores de desempenho do VRS

O desempenho do VRS depende de vários fatores. Eles incluem:
  • Eficiência da rasterização. Parallax, relief e cone-step mapping são preferíveis.
  • Conteúdo da cena.
  • Sobrecarga do cálculo da taxa de sombreamento.
  • Custo do PS e gargalos de hardware posteriores.
  • Suas preferências pessoais de desempenho versus qualidade.

Taxas de sombreamento por triângulo/por chamada de desenho

As taxas de sombreamento por triângulo/por chamada de desenho são um ótimo aprimoramento de desempenho. Elas reduzem o custo da GPU em comparação com o mapa de espaço de tela. Por chamada de desenho:
  • Partículas e objetos em movimento rápido são renderizados no mapa de reflexo.
  • Determine se o objeto está atrás de uma translucidez.
Por triângulo:
  • Determine se o triângulo está no lado oposto de uma superfície de água em relação à câmera.
  • Determine se o triângulo está ocluído atrás de folhagens ou de outro objeto.

Planos futuros

Somente XBOX

  • Remover o mapa de espaço de tela.
    • Gravar a taxa de sombreamento diretamente no HTile.
    • Realizar uma limpeza de profundidade na mesma operação.
  • Girar os deslocamentos de amostra por quadro.
    • Isso resulta em uma convergência semelhante ao tabuleiro de xadrez, mas oferece cobertura perfeita.

PC e XBOX

  • Combinar a determinação da taxa de sombreamento com um sombreador de pós-processamento.
  • Para taxas menores que 1 × 1, mas não exatamente 2 × 2, faça o seguinte:
    • Considere alternar as taxas 2 × 1 e 1 × 2 por quadro, especialmente para títulos de 60 Hertz.
    • Isso resulta em um padrão de tabuleiro de xadrez em que os quadrados pretos recebem 2 × 1 no primeiro quadro e 1 × 2 no quadro seguinte. Os quadrados brancos recebem 1 × 2 no primeiro quadro e 2 × 1 no quadro seguinte.
    • Use jitter de TAA grosseiro em vez de jitter de TAA de subpixel.
    • Adicione uma taxa de sombreamento por triângulo.
      • Use o mapa de espaço de tela, a menos que uma taxa mais grosseira seja especificada. Essa é uma ótima configuração padrão de combinador.
  • Ray tracing.
    • Use a mesma medida de frequência de sombreamento (o mapa) para controlar a contagem de raios.
    • Transmita o resultado do raio para os pixels adjacentes (ray tracing esparso).

Conclusão

O VRS é uma otimização poderosa para PCs e dispositivos XBOX Series X|S.
  • O VRS oferece cobertura perfeita e controle local da taxa de sombreamento. Essas são grandes melhorias em relação aos recursos existentes.
  • É fácil incorporar o VRS ao seu mecanismo. O VRS se integra bem a tecnologias existentes, como DRS e upscaling temporal.
  • Os maiores ganhos do VRS ocorrem ao processar efeitos tradicionalmente caros, como desfoques, sombras e efeitos volumétricos.
  • O VRS tem uma sobrecarga muito baixa.
Explore o sinal do VRS usando a iluminação esparsa.
  • Iluminar dados duplicados do g-buffer desperdiça recursos.
  • Outros passes esparsos são possíveis.
  • Reutilize a contagem de operações de iluminação necessárias por bloco de tela e suas coordenadas.
Os exemplos do ATG fornecem um sombreador autônomo para calcular a taxa de sombreamento​. ​Para obter mais informações sobre o VRS, confira o exemplo VRSandSparseLighting nos exemplos de console do Microsoft GDK.

Próximas etapas

Se quiser revisar as informações dos materiais da apresentação relacionados a esta visão geral, baixe os seguintes arquivos do XBOX Developer Download Secure Data Storage (SDS).
  • Apresentação de slides: XF2019_Graphics_08_Day2_Variable_Rate_Shading_and_Sparse_Lighting.pptx em Xfest 2019 Graphics Track PowerPoints ([2019.11]-Xfest2019GraphicsTrackPowerPoints.ZIP)
  • Apresentação em vídeo: XF2019_Graphics_08_Day2_Variable_Rate_Shading_and_Sparse_Lighting.mp4 em Xfest 2019 Graphics Track Videos ([2019.11]-Xfest2019GraphicsTrackVideos.ZIP)

Baixar as apresentações e os vídeos do Microsoft PowerPoint

  1. Acesse Downloads do Game Development Kit (GDK).
  2. Em Select file type, selecione Conference Materials e, em seguida, selecione Confirm.
  3. Em Select build/version number, escolha uma das seguintes apresentações de gráficos.
    • Xfest 2019 Graphics Track PowerPoints
    • Xfest 2019 Graphics Track Videos
  4. Selecione Download Now e aguarde a conclusão do download do arquivo .zip.
  5. Acesse sua pasta local Downloads e descompacte (extraia) os arquivos da pasta compactada.

Baixar os exemplos de console do GDK mencionados neste tópico

  1. Acesse Downloads do Game Development Kit (GDK).
  2. Em Select file type, selecione GDK e, em seguida, selecione Confirm.
  3. Em Select build/version number, escolha a opção Microsoft GDKX (Sample only) mais recente.
  4. Selecione Download Now e aguarde a conclusão do download do arquivo .zip.
  5. Acesse sua pasta local Downloads e descompacte (extraia) os arquivos da pasta compactada.
  6. Selecione GDKSamples > Graphics. Procure o exemplo.

Confira também

Especificações do DirectX 12 - Variable Rate Shading Variable Rate Shading Visão geral do Variable Rate Shading Por que usar o Variable Rate Shading? Design do recurso Variable Rate Shading AMD FidelityFX Variable Shading Variable Rate Shading Update XBOX Series Consoles Variable Rate Compute Shaders - Halving Deferred Lighting Time
Last modified on October 6, 2026