Notas gerais
Todos os resultados foram obtidos em uma máquina bastante antiga (i7 3770 + GTX 770), o jogo rodou no DirectX 11 com qualidade média. Para análise, foram utilizados RenderDoc e Nsight.
O jogo roda no mecanismo Re Engine, que se tornou o herdeiro do MT Framework - o mecanismo da geração anterior de P&D da Capcom. Além do RE2, é usado no DMC5 e no RE7: Biohazard.
Como não encontrei materiais no RE Engine na Internet, tudo no artigo é baseado em suposições (espero, justificado). Examinei cerca de 90% da estrutura do quadro e dei uma descrição geral dos algoritmos. Pesquisas adicionais requerem mais experiência e tempo para shaders de engenharia reversa.
Estrutura do quadro
Simulação de partículas / fluidos
Entre outras coisas, o jogo gera texturas de ondas (um exemplo é tirado de outro quadro).
As ondas são usadas para renderizar água, que não está no quadro analisado.
Alguns resultados são copiados para o buffer temporário e isso sugere que os resultados podem ser usados na CPU.
Cálculo da lista de fontes de iluminação
Esta passagem gera uma lista de fontes de luz visíveis, verificando a localização dos cones de iluminação em relação à pirâmide de visibilidade. Seu resultado é uma lista de fontes de luz visíveis e uma determinada tabela 3D comparando posições no espaço de visualização com as fontes de luz correspondentes.
Também são calculadas listas de instâncias visíveis para cada fonte de luz, que são usadas posteriormente ao atualizar o mapa de sombras.
Ponto branco
Esta passagem constrói um histograma de luminância com base na imagem HDR anterior e na tabela de medidas. Então, com base nesses dados, ele determina o ponto branco.
Definição de objetos sobrepostos
A caixa delimitadora dos objetos sobrepostos é verificada quanto à interseção com a pirâmide de visibilidade no sombreador computacional e o buffer de argumentos indiretos é preenchido.
Soltar geometria sobreposta
Os objetos sobrepostos são renderizados no buffer de profundidade de baixa resolução e, em seguida, a caixa delimitadora é verificada quanto à entrada de profundidade nesse buffer.
Amostras 0-3O buffer de profundidade usado é multisampled quatro vezes. Provavelmente para compensar a baixa resolução.
Parece caixas delimitadoras orientadas em relação ao olhar.
Um exemplo de teste de geometria sobreposta (de outro quadro). Os pixels que passam no teste (verde) gravam um sinalizador (por exemplo 1) no buffer de visibilidade de cada instância.
store_raw RWDrawIndirectArguments.x, v1.x, l(1)
Acumulação de argumentos indiretos
Quase todo objeto de geometria no espaço do mundo é renderizado usando uma chamada de desenho indireta. O criador de perfil Nsight mostra as chamadas para NvAPI_D3D11_MultiDrawIndexedInstancedIndirect. Para informações sobre seu uso, consulte [
1 ] e [
2 ]. O RenderDoc bloqueia a extensão MultiDraw, portanto, no EventBrowser, eles são expandidos para muitos DrawIndexedInstancedIndirect e alguns deles estão vazios.
O objetivo desse passe é coletar máscaras de visibilidade do passe anterior e gerar um buffer de argumento.
Passagem de profundidade
Nada fora do comum. Um subconjunto de uma cena com geometria básica sobreposta.
Geometria + decalques da passagem do buffer G
Dados de saída:
- RT0 - emissivo r11g11b10
- RT1 - rgba8 albedo.rgb + metallness.a
- RT2 - r10g10b10a2 normal.rg + rugosidade.b + misc.a
- RT3 - r16g16b16a16 cozido_ao.x + velocidade.yz + sss.a
Os modelos renderizados usam oclusão de ambiente cozido de modelos de alta resolução.
Cálculo HiZ
Um sombreador computacional de múltiplas passagens define cada nível na hierarquia de profundidade.
Ao
Processamento SSAO ou HBAO +, dependendo dos parâmetros escolhidos pelo player. No meu caso, SSAO.
AO é calculado com base em HiZ do passe anterior.
Especular global + difuso
Usando algum algoritmo não trivial, sondas de luz, mapas cúbicos e AO são combinados em mapas globais difusos e especulares.
Exemplos de cartões cúbicos da cena.O componente difuso da iluminação global.Componente da iluminação global especular.Atualização do Mapa Sombra
Os mapas de sombra criados para cada fonte de luz são atualizados para as fontes afetadas por objetos dinâmicos. Cada mapa de sombra é colocado em uma grande variedade de texturas.
Especular local + Difuso + SSS
Em seguida, é calculada a contribuição de cada fonte de luz para os componentes especulares e difusos.
Difuso + SSS. Os efeitos do SSS não são visíveis nesse quadro.Especular do componente.Integração de iluminação
Os componentes de luminosidade especular / difusa / iluminação local integram-se ao albedo.Adicionando vidro transparente
Depois de adicionar todas as fontes de luz, o vidro transparente é renderizado.Iluminação volumétrica / de neblina / cálculo de fumaça
Na verdade, é apenas um monte de sprites.Aplicar iluminação volumétrica / de nevoeiro / fumaça
Esta passagem calcula uma imagem tremida para melhorar a iluminação do nevoeiro.Se você substituir a máscara de nevoeiro original por um padrão quadriculado.O resultado desta passagem.TAA com imagem HDR anterior
TTA é apenas mágica.Desfoque de movimento
Com base no mapa de velocidade, um mapa auxiliar de desfoque é calculado.Pós-processamento
Este passe primeiro diminui o zoom na imagem.E então aplica um filtro de bloom, correção de tom, distorção e aberração cromática.Conclusão
O mecanismo usa ativamente sombreadores computacionais + renderização indireta. Todas as malhas e texturas são de alta qualidade.
O jogo usa renderização diferida com TAA / FXAA e vidro como pós-processamento. Você pode ler mais sobre truques com renderização diferida
aqui [uma
postagem baseada em um artigo sobre Habré]. Muitas texturas são compactadas pelo BC7. Em geral, as técnicas utilizadas são semelhantes às descritas em [
4 ].
Bónus
Contribuição SSS
Eu tive que procurar cuidadosamente um quadro adequado para mostrar o impacto do SSS.Como um monstro com tentáculos é renderizado
O monstro é dividido em várias partes.Guts
O jogo tem muitas texturas sangrentas para vários detalhes.
Os níveis de mip para texturas não são apenas filtrados linearmente. Em cada nível, a nitidez é aprimorada. Além disso, algumas texturas já possuem destaques especulares (não está muito claro como isso afeta sua aparência final).
Geometria
A geometria tem uma boa topologia.HBAO
O HBAO oferece qualidade muito melhor que o SSAO.Fumaça
A fumaça considera fontes de luz cônicas.Aviões reais são usados para renderizar fumaça.Referências
[1]
Kostas Anagnostou: experimentos em seleção de oclusão baseada em GPU[2]
Daniel Rákos: Multi-Draw-Indirect está aqui[3]
Adrian Correger Blog[4]
Alien: isolamento