Renderização com base física
Você está no caminho certo quando diz "ele tenta imitar como a luz reflete na vida real, que geralmente é dividida em dois componentes, especular e difusa, dependendo do tipo de material".
Mas modelamos materiais com especular e difusa em jogos e computação gráfica há muito tempo. O truque é que costumávamos lidar com essas coisas como completamente independentes - alterar a especularidade não mudou a difusão:
Este é um exemplo de sombreamento Phong do wiki do Blender . Você pode ver que ele oferece dois parâmetros de intensidade especular e dureza especular, e esses parâmetros alteram apenas a parte esbranquiçada da reflexão. O reflexo difuso azul não muda.
A maneira como os jogos usariam isso é que um artista seria encarregado de ajustar manualmente esses valores para cada material até que "parecesse certo". Como a "dureza especular" não é uma propriedade física real dos materiais que podemos medir com precisão, tinha que ser feita a olho nu.
Este método é um pouco quebradiço. À medida que você altera a iluminação (por exemplo, um objeto dinâmico que se move por diferentes áreas ou em um ambiente com hora do dia e clima), pode parecer sutilmente errado - muito claro ou muito escuro -, pois as condições de visualização não são as mesmas que as os seus parâmetros especulares foram ajustados.
Entre na Renderização com Base Física, que é uma tentativa de fundamentar nossas descrições de materiais em propriedades mais objetivas e mensuráveis de superfícies reais. Uma das propriedades mais aparentes é a conservação de energia - uma superfície mais áspera dispersa a luz de maneira difusa, e uma superfície mais lisa / mais metálica reflete a luz mais diretamente, mas é o mesmo conjunto de luz de onde ambos estão tirando. Portanto, outras coisas são iguais, à medida que tornamos um material mais brilhante, o componente difuso deve ficar mais escuro:
Este exemplo é de um artigo do Marmoset que explica o PBR compartilhado originalmente por Syntac_
Há mais na renderização baseada em física do que em conservação de energia, mas este é provavelmente o sinal mais revelador de que você está trabalhando com um sistema baseado em física.
Ao manter os modelos de reflexão semelhantes à maneira como os materiais funcionam na vida real, reduzimos a necessidade de fatores de falsificação e subjetividade do artista para obter um material do mundo real, como madeira, concreto ou couro, para parecer real sob uma ampla variedade de condições de iluminação.
Observe que outra resposta descreveu isso em termos de iluminação indireta da luz refletida em outros objetos na cena. Embora muitos sistemas de iluminação que usam modelos físicos também incluam ferramentas para modelar isso, geralmente é conhecido sob um nome separado de Iluminação Global . Este é o efeito que faz com que um lado da cabeça difusa nesta imagem pareça verde, iluminado pela luz que ricocheteia na parede verde:
Imagem deste artigo sobre iluminação global
Reflexão no espaço da tela
Enquanto o PBR tenta modelar como o material reflete a luz, o Screenspace Reflection tenta capturar o que está sendo refletido - especificamente, para uma superfície brilhante e parecida com um espelho, o que devo ver no reflexo?
Novamente, esta é uma técnica de renderização relativamente recente, provavelmente mais clara de entender, em contraste com a forma como os jogos fizeram isso antes:
Renderização invertida - comum para aviões aquáticos ou espelhos planos, literalmente renderizamos toda a geometria refletida uma segunda vez espelhada no plano da superfície refletiva. Isso fornece reflexões de alta qualidade (detalhes completos, objetos em contato com a superfície alinhados com seus reflexos), mas só funciona corretamente para superfícies planas. Quanto mais ondulada ou esburacada for uma superfície, menos ela se comportará como reflexões reais, que devem distorcer ou desfocar de maneiras complexas.
Mapas de cubo - vamos armazenar a cor que seria vista por qualquer raio de vista que irradiasse do ponto central. Ao renderizar mapas de cubo dinamicamente a partir de pontos selecionados na cena, podemos estimar que cor deve ser refletida em qualquer superfície curvada arbitrariamente. O problema aqui é que o mapa do cubo só está completamente correto no seu ponto central - quando o ponto em que estamos simulando a reflexão se move ao redor da cena, ele deve ver alguma paralaxe, que não está presente no mapa do cubo. Isso significa que os objetos não tendem a se alinhar com seus reflexos.
A reflexão do espaço na tela tenta solucionar essas limitações usando a própria cena renderizada como fonte de informações de reflexão. Ele marca um raio de vista refletido, usando a profundidade da cena, até cruzar algo na cena renderizada.
Aqui está um slide de uma apresentação do EA DICE sobre sua abordagem às reflexões no mecanismo Frostbite .
Isso significa que (com algum trabalho algorítmico inteligente) podemos obter reflexões com precisão razoavelmente semelhante ao traçado de raios de superfícies arbitrárias em jogos, tendo o alinhamento correto das superfícies em contato, distorção e desfoque, desde que a parte refletida da superfície esteja visível no -screen (ou seja, não fora da tela ou obstruído por outra coisa). Onde a reflexão não pode ser determinada com precisão pelo raymarching, geralmente é aproximada usando amostras próximas ou um mapa de cubo de fallback representando a cena ao lado / atrás da visão da câmera.
Você pode ver neste exemplo de reflexão do espaço na tela , a impressão pode ser muito convincente, embora pequenos erros sejam perceptíveis (veja o reflexo da parte de baixo dos cubos, que não são visíveis no quadro renderizado e, portanto, basta manchar e repetir pixels adjacentes, ou os orifícios no reflexo da cortina verde direita, ao lado do vaso de flores e na parte inferior da tela, onde o raymarching não conseguiu encontrar os pixels refletidos à direita). É comum usar esta técnica para superfícies moderadamente brilhantes / levemente ásperas para ajudar a tornar o erro ocasional menos visível.