Computação dos efeitos de iluminação indireta, como luz refletida e luz refratada; Grande parte da luz em um ambiente real normalmente não vem de fontes de luz direta; Ray-tracing – integra a definição da superfície visível e definição de sombras, reflexões e refrações; Então reflexão especular global e transmissão suplementam a iluminação especular, difusa e ambiente local computada para uma superfície; Radiosidade – separa completamente sombreamento e determinação da superfície visível; Modela toda as interações de um ambiente com as fontes de luz primeiro, em um estágio independente da visualização, e então computa uma ou mais imagens para os pontos de visualizações desejados, utilizando algoritmos de determinação de superfície visível e sombreamento interpolativo. Algoritmos dependentes da visualização: discretizam o plano de visualização para determinar os pontos onde calcular a equação de iluminação, dada a direção do observador; Bom para lidar com fenômeno especular que é altamente dependente da posição do observador. Algoritmos independentes da visualização: discretizam o ambiente, e o processam para proporcionar informação suficiente para calcular a equação de iluminação em qualquer ponto e para qualquer direção de visualização; Modela fenômeno difuso eficientemente, mas requer muita quantidade de armazenamento para capiturar informações necessárias sobre o fenômeno especular. Visible-Surface Ray Tracing Determina a visibilidade de superfícies traçando raios de luz imaginários do olho do observador aos objetos na cena. Um centro de projeção (observador) e uma janela em um plano de visualização arbitrário são selecionados. A janela pode ser pensada como sendo dividida em uma grade regular, onde cada elemento correspondem à pixels na resolução desejada. Então, para cada pixel na janela, um eye ray é disparado do centro de projeção através do centro do pixel para a cena. A cor do pixel é definida como a cor do objeto da intersecção mais próxima. Calculando Interseções Utiliza-se normalmente a representação paramétrica de um vetor ou reta; Cada ponto (x, y, z) ao longo deumraio com origem no ponto (x0, y0, z0) e direção do ponto (x0, y0, z0) para o ponto (x1, y1, z1) é definido em função do parâmetro t; x = x0 + t(x1 – x0); y = y0 + t(y1 – y0); z = z0 + t(z1 – z0); x = x0 +t∆x; ∆x = x1 – x0 y = y0 +t ∆y; ∆y = y1 – y0 z = z0 +t ∆z; ∆z = z1 – z0 Para a esfera: (x – xc)² + (y – yc)² + (z – zc)² = r²; Aplicando-se a forma paramétrica da reta em substituição de x, y e z: (x0 + t(x1 – x0))² – 2 xc(x0 + t(x1 – x0)) + xc² + (y0 + t(y1 – y0))² – 2 yc (y0 + t(y1 – y0)) + yc² + (z0 + t(z1 – z0))² – 2 zc (z0 + t(z1 – z0)) + zc² = r²; Se não houver raizes reais, não intersecta; 1 raiz real, o raio raspa a esfera; 2 raizes reais, as raizes são os pontos de interseção, a de menor valor positivo é o ponto mais próximo. Para um polígono, 1º determinamos se o ray intersecta o plano do polígono, e depois se o ponto de interseção está dentro do polígono; A equação do plano é: Ax + By + Cz + D = 0 Substituindo pelos valores parametrizados, temos: A(x0 + t(x1 – x0)) + B(y0 + t(y1 – y0)) + C(z0 + t(z1 – z0)) + D = 0; Resolvendo a equação, temos: t = (Ax0 + By0 + Cz0 + D) / (A(x1 – x0) + B(y1 – y0) + C(z1 – z0)); Se o denominador for zero, a equação não tem solução e o raio é paralelo ao plano. Depois de ver que o raio intersecta o plano, deve-se verificar se a interseção está dentro do polígono; O modo de fazer isso, é projetar o polígono e o ponto de interseção em um dos 3 planos que definem o sistema de coordenadas; O teste para verificar se o ponto está no polígono é feito inteiramente em 2D Recursive Ray Tracing Estende-se o algoritmo de ray tracing anterior para lidar com sombras, reflexão e refração; Para calcular sombras, é disparado um raio adicional a partir do ponto de interseção para cada fonte de luz. Se esses shadow rays intersecta qualquer objeto no caminho, o objeto está em sombra naquele ponto e o algoritmo ignora a contribuição da fonte de luz do shadow ray. O ray tracing foi estendido para incluir reflexão especular e transparência com refração. Esse algoritmo recursive ray tracing dispara condicionalmente reflection rays e refraction rays do ponto de intersecção. Se o objeto tem reflexão especular, então um reflection ray é refletido a partir da normal da superfície na direção do vetor R. Se o objeto é transparente, e reflexão total interna não ocorre, um refraction ray é lançado na direção do vetor T a um ângulo definido pela lei de Snell, que define o desvio da trajetória de um raio de luz quando transita por espaços com densidades diferentes. Cada um desses raios podem recursivamente gerar outros shadow, reflection e refraction rays. Os raios formam uma ray tree. Nesse algoritmo um galho é terminado quando: os raios refletidos e refratados falham em intersectar um objeto; se uma profundidade máxima definida pelo usuário é alcançada; o sistema fica sem mais espaço de armazenamento. Considerações de eficiência para Recursive Ray Tracing Item buffer – evitar o traçar de raios, definindo um item buffer a partir de uma técnica de definição de superfície visível mais simples, como z-buffer, no pixel do buffer é guardado a identidade do objeto mais perto, então só esse objeto precisa ser tratado pelo ray tracer para determinar o a interseção do eye ray para esse pixel, para que outros raios possam ser gerados; Reflections Map – evitar o traçar de raios combinando ray tracing com reflection maps. Usa-se ray-tracing nos elementos mais visíveis e reflection map nos demais; Adaptive tree-deph control – raio não é usado se sua contribuição para a intensidade do pixel é mais baixa do que um limiar pré-definido; Distributed Ray Tracing Abordagem de supersamplig aleatório que troca o aliasing pelo ruído; Stochastic Sampling: Aliasing é resultante quando se tem amostras regularmente espaçadas abaixo da taxa de Nyquist. Se as amostras não são regularmente espaçadas, então temos ruído, que os observadores acham menos incômodo. Amostragem aleatória pode gerar duas amostras muito próximas, fazendo que parte da imagem fique sem ser mostradas. A solução é fazer uma distribuição mínima de Poisson onde nenhum par de amostras têm distância menor do que um valor mínimo; Uma aproximação satisfatória dessa distribuição é obtida, mudando por uma pequena distância aleatória o valor de cada elemento de uma amostragem regular; Essa técnica é chamada jittering;