A Equação de Renderização e os Limites do Sombreamento de Tempo Real
Objetivos de Aprendizagem
- Enunciar a equação de renderização de Kajiya de 1986 em termos simples: a luz de saída é igual à luz emitida mais uma integral, sobre toda direção de entrada, da luz de entrada espalhada.
- Explicar precisamente o que "toda direção de entrada" inclui, luz ricocheteada de qualquer outra superfície na cena, não só luz direta de fontes nomeadas.
- Explicar, concretamente, o que o sombreamento de tempo real (os três conceitos anteriores) de fato computa em relação a esta equação completa, e nomear a truncação específica que ele faz.
- Enunciar honestamente por que esta truncação é uma escolha de engenharia deliberada e dirigida por custo em vez de um engano, e qual seria o custo honesto de computar a integral completa.
Contexto e Motivação
Todo modelo de sombreamento construído até agora, difuso lambertiano, especular Phong e Blinn-Phong, sombreamento flat, Gouraud e Phong, computa luz chegando a uma superfície diretamente de uma pequena lista fixa de fontes de luz nomeadas: uma luz pontual aqui, uma luz direcional ali. A luz real não funciona assim: a luz ricocheteia de toda superfície numa cena, um ricochete indireto de uma parede vermelha genuinamente tinge um objeto branco próximo levemente de vermelho, um efeito real e fisicamente observável (sangramento de cor) que nenhuma das equações dos conceitos anteriores consegue produzir, já que elas nunca consideram luz chegando de qualquer direção exceto diretamente de uma luz nomeada. Este conceito enuncia, honesta e precisamente, o problema físico completo que esses modelos aproximam, a equação de renderização de Kajiya de 1986, e nomeia exatamente o que a renderização de tempo real deixa de fora, como a ponte honesta para por que o ray tracing, coberto começando com o próximo conceito, existe.
Teoria Central
A equação de renderização, em termos simples
O artigo de Kajiya de 1986 unificou essencialmente todo algoritmo de renderização anterior como casos especiais de uma equação integral. Em termos simples: a luz saindo de um ponto numa superfície, numa dada direção de saída, é igual a qualquer luz que esse ponto emita por conta própria (zero para quase toda superfície exceto fontes de luz de fato), mais uma soma, sobre toda direção de entrada possível por todo o hemisfério acima daquele ponto, de quanta luz chega daquela direção, espalhada pelas próprias propriedades de material da superfície em direção à direção de saída sendo perguntada. Escrita de forma compacta:
textL_out(p, w_out) = L_emitida(p, w_out) + Integral sobre o hemisfério de: f_material(p, w_in, w_out) * L_in(p, w_in) * cos(theta_in) dw_in
O detalhe crucial e fisicamente real é que L_in(p, w_in), a luz de entrada chegando ao ponto p da direção w_in, não é uma constante fornecida por uma lista fixa de luzes; ela é ela mesma a luz de saída (L_out) deixando qualquer outra superfície que por acaso esteja naquela direção, que é por que isto é chamado de uma equação integral, não uma fórmula simples, a função desconhecida aparece em ambos os lados.
O que o sombreamento de tempo real de fato computa
local-illumination-lambertian-diffuse-reflection e specular-reflection-the-phong-and-blinn-phong-models computam uma versão deliberadamente truncada desta mesma equação: em vez de integrar sobre toda direção no hemisfério, eles somam sobre só um pequeno conjunto fixo de fontes de luz nomeadas (cada uma uma direção w_in única e específica, em vez de uma integral contínua), e tipicamente adicionam mais um termo, uma cor "ambiente" constante e plana, como um substituto rudimentar para toda a luz indireta e ricocheteada que a soma truncada de outra forma ignora inteiramente. Isto é iluminação local, pelo nome: ela só considera luz viajando diretamente de uma fonte nomeada ao ponto sendo sombreado, nunca luz que ricocheteou de qualquer outra superfície primeiro (iluminação global, o termo para abordagens que de fato contabilizam a luz ricocheteada).
Por que isto é um trade-off de engenharia deliberado e honesto
Resolver a equação de renderização completa, mesmo aproximadamente, para todo ponto visível numa cena exige integrar sobre um hemisfério contínuo de direções de entrada em todo único ponto, e, porque L_in depende recursivamente da própria L_out de outros pontos, essa integral tem de ela mesma ser aproximada simulando muitos caminhos de luz ricocheteando repetidamente por uma cena, computação muitas ordens de magnitude mais cara do que avaliar uma soma fixa sobre um punhado de luzes nomeadas. A truncação de ambiente-mais-luzes-diretas da renderização de tempo real é uma aproximação nomeada, explícita e dirigida por custo, não um descuido: ela aceita um custo honesto e visível, nenhum sangramento de cor, nenhuma sombra indireta suave, em troca de rodar rápido o bastante para taxas de quadro interativas, e o ray tracing, começando com o próximo conceito, é a família de técnicas construída especificamente para aproximar mais desta mesma integral diretamente, a um custo computacional correspondentemente mais alto, mas não mais completamente fixo.
Exemplos Resolvidos
Exemplo 1: por que a equação é recursiva, um caso concreto de duas superfícies
Uma parede branca (albedo próximo de 1.0 em todo canal de cor) fica a um metro de uma parede vermelha (albedo próximo de (0.9, 0.1, 0.1)), ambas iluminadas por uma luz superior. A equação de renderização completa diz que a luz de saída da parede branca na direção de frente para a parede vermelha depende de L_in de toda direção, incluindo a direção de frente para a parede vermelha, que é ela mesma a própria L_out da parede vermelha, que ela mesma depende da luz atingindo a parede vermelha diretamente. Um modelo de iluminação local, por construção, só avalia o termo de luz direta para a parede branca (luz direto da fonte superior), então ele produz uma cor de parede branca perfeitamente neutra sem nenhum indício do tom vermelho real e físico da parede vermelha próxima; a dependência recursiva que a equação completa descreve é simplesmente nunca avaliada.
Exemplo 2: o termo ambiente como um substituto rudimentar e honesto
Um renderizador de tempo real aproxima o termo inteiro de hemisfério-de-luz-ricocheteada com uma constante plana, digamos ambient = (0.1, 0.1, 0.1), adicionada independentemente da geometria de fato da cena ou das cores próximas:
textfinal_color = ambient + soma sobre as luzes de (diffuse_term + specular_term) final_color = (0.1,0.1,0.1) + difuso_e_especular_das_luzes_nomeadas
Isto garante que uma superfície voltada para longe de toda luz direta não seja renderizada como preto puro e não iluminado (um resultado visivelmente errado para a maioria das cenas reais, que quase sempre têm alguma luz ambiente do céu ou de superfícies próximas), mas a constante (0.1, 0.1, 0.1) é idêntica em toda parte na cena, quer o objeto fique ao lado de uma parede vermelha brilhante ou numa sala cinza vazia, uma simplificação honesta e visível do que o termo recursivo da integral completa de fato computaria.
Exemplo 3: custo de ordem de magnitude, ilustrativo, não um benchmark preciso
Um shader de iluminação local com 3 luzes nomeadas avalia aproximadamente 3 termos de difuso-mais-especular por fragmento, um número pequeno e fixo de produtos escalares e uma cadeia de multiplicação-adição, a aritmética já trabalhada nos dois conceitos anteriores. Um renderizador que em vez disso aproxima a integral de hemisfério da equação de renderização amostrando, digamos, 100 direções de entrada aleatórias por fragmento, traçando um raio para cada uma para encontrar o que ela de fato atinge (o mecanismo de ray casting que os próximos vários conceitos constroem), e sombreando cada um desses acertos recursivamente, faz aproximadamente duas ordens de magnitude mais trabalho por fragmento, antes mesmo de contabilizar os ricochetes recursivos que esses 100 raios podem eles mesmos precisar traçar; este é raciocínio ilustrativo sobre o formato da diferença de custo, não um benchmark do desempenho medido de fato de qualquer renderizador específico.
Equívocos Comuns e Armadilhas
- "Adicionar mais luzes nomeadas eventualmente reproduz a iluminação global verdadeira." O problema central do Exemplo 1 é estrutural, não uma questão de quantidade: nenhuma lista finita de luzes pontuais ou direcionais nomeadas consegue representar luz que ricocheteou imprevisivelmente de geometria de cena arbitrária, já que a direção e intensidade de uma luz nomeada são entradas fixas, não algo derivado da própria aparência atual da cena da forma que o termo recursivo L_in na equação real é.
- "O termo ambiente no Exemplo 2 é a mesma coisa que iluminação global, só simplificada." O termo ambiente é uma única constante por-cena (ou às vezes por-objeto) sem nenhuma relação com a geometria ou cores próximas de fato; técnicas de iluminação global genuínas computam um valor que de fato depende da cena específica em torno de cada ponto (uma parede vermelha genuinamente tinge uma superfície branca próxima), o que a constante ambiente plana, por construção, não consegue fazer.
- "A equação de renderização só é relevante para renderização offline, não de tempo real." A própria equação é uma declaração de transporte físico de luz, verdadeira independentemente de como é renderizada; o que muda entre a renderização de tempo real e offline é quão agressivamente a equação é aproximada, e o ray tracing de tempo real (
rasterization-vs-ray-tracing-tradeoffs-and-real-time-hardware, depois nesta disciplina) é precisamente o caso de o hardware avançar o bastante para aproximar mais desta mesma equação dentro de um orçamento de tempo real.
Resumo
A equação de renderização de Kajiya de 1986 enuncia o problema físico completo do transporte de luz precisamente: a luz de saída num ponto é igual à luz emitida mais uma integral, sobre toda direção de entrada, da luz de entrada espalhada, que é ela mesma recursivamente a luz de saída de qualquer outra superfície que se situe naquela direção. A iluminação local de tempo real, todo modelo de sombreamento construído antes nesta disciplina, computa uma truncação deliberada e nomeada desta equação: uma soma fixa sobre uma pequena lista de luzes nomeadas, mais uma constante ambiente plana substituindo o termo recursivo inteiro de luz-ricocheteada, uma aproximação honesta e dirigida por custo em vez de um descuido. ray-casting-generating-and-intersecting-rays, em seguida, começa a família de técnicas construída especificamente para aproximar mais desta mesma integral diretamente.