PSI5789 - Conceitos Avançados de Síntese
de Imagens
Marcio Lobo Netto
Ray Tracing
Técnica e Implementação
Alice Shimada Bacic
3o período de 2002
Introdução
Computação gráfica:
Grande diversidade de aplicações
Demanda por imagens realistas
Complexidade do mundo real
Abstrações do mundo real
Modelos limitados
Objetivo da sínteze de imagens:
produção de imagens que não possam ser
distinguidas de uma fotografia
Abordagens
Na tentativa de alcançar o realismo
desejado utiliza-se conceitos de física e
óptica;
Iluminação global:
Uma vista de uma cena é dada pelo
processamento da luz refletida por um ponto
considerando toda a iluminação que chega
a este ponto;
Iluminação direta + indireta
Algoritmos
Os algoritmos mais populares para
iluminação global são:
Radiosity:
trabalha com a interação difusa;
Ray tracing:
trabalha com a interação especular ;
Ambos algoritmos simulam parte da
interação global da iluminação;
Ray Tracing -Propósito
Gerar imagens 3D realistas em uma tela
2D de computado:
Simulação do comportamento físico dos
raios de luz em um ambiente 3D.
Calculo das cores de cada pixel de imagem
considerando a interseção dos raios com os
objetos da cena;
Reflexão dos raios recursivamente.
Ray tracing – Histórico
A técnica foi inicialmente desenvolvida por
Appel (1968), Goldstain (1968) e Nagel (1971);
Appel:
usou uma grade (grid) de raios para determinar o
preenchimento (shading) dos objetos de uma cena e
calcular quando um ponto estaria dentro de uma sobra
Nagel e Goldstain:
inicialmente criaram um algoritmo em balística para simular
a trajetória de projéteis e para calcular a trajetória de
partículas nucleares.
Mais tarde aplicaram o algoritmo criado em computação
gráfica
Ray tracing – Histórico (continuação)
Whitted e Kay estenderam a técnica inicial
para simular a refração e a reflexão especular.
O algoritmo proposto por Whitted é um
algoritmo de iluminação global parcial, que
combina:
a remoção de superfícies escondidas;
o preenchimento produzido pela iluminação direta;
 a reflexão de objetos entre si e a refração da luz
através de objetos transparentes;
a computação de sombras bem definidas
Ray tracing – Visão geral
Considera que uma fonte de luz emite photons
que colidem com objetos repetidamente:
Parte da energia é absorvida e parte refletida pelo
objeto;
Ao contrário do mundo real, a abstração do
algoritmo considera que os raios de luz partem do
observador e são refletidos repetidamente gerando
o preenchimento final do objetos processados na
cena;
O termo ray tracing recursivo é geralmente usado
para referenciar o processo do algoritmo que
considera a cadeia de reflexões dentro da cena
Ray Tracing - Cenário
Observador (eye): ponto no espaço onde o
ray tracing observa a cena através da
viewplane;
Viewplane: janela retangular onde é projetada
a cena. Cada ponto da janela corresponde a
um pixel da tela do computador;
Modelo (model): uma coleção de objetos 3D;
Fonte de luz (light source): fonte de iluminação,
que irradia luz uniformemente em todas as
direções;
Cena (scene): o conjunto do modelo mais a
fonte de luz formam uma cena
Ray Tracing – Cenário (ilustração)
Ray Tracing – Premissas
Os raios de luz viajam em linha reta
Raios de luz não causam
interferência entre si caso se cruzem.
Raios de luz partem da fonte de iluminação
para os olhos, porém pelo princípio da
reciprocidade (The Principle of Reciprocity),
podemos assumir que o inverso produz o
mesmo resultado para efeitos de calculo
Ray Tracing – Reflexão e transmissão
Reflexão
Transmissão
A reflexão: é o fenômeno
físico onde a luz atinge uma
superfície e é refletida.
A transmissão ocorre
quando a luz atinge uma
superfície transparente ou
translúcida e passa através
da superfície.
A reflexão ou transmissão
da luz podem ser especular
o difusas.
Ray Tracing – Reflexão e transmissão
Especular
Difusa
Quando a propagação da luz
após atingir o objeto é perfeita,
isto é, a luz é refletida ou
transmitida em apenas uma
direção com toda a
intensidade inicial temos a
reflexão ou transmissão
especular.
Quando a luz abandona o
objeto em todas as direções
com intensidade igual, temos a
reflexão ou transmissão difusas.
Ray Tracing – Tipos de algoritmo
Forward ray tracing:
as partículas de luz (photons) são seguidas
desde a fonte de luz até o objeto;
Desperdício, pois nem todo raio de luz que
partiu de uma fonte deverá alcançar o
observador;
Ineficiente, pois gasta-se processamento
com raios de luz não aproveitados.
Ray Tracing – Tipos de algoritmo
Backward ray tracing:
Foi desenvolvido para melhorar o
desempenho da técnica;
Neste caso um raio de luz é criado no
observador e sua trajetória é traçada
passando pelo viewplane até o primeiro
objeto da cena alcançado;
A trajetória do raio é calculada através de
recursivas reflexões;
Ray Tracing – Tipos de algoritmo
Backward
forward
Ray Tracing – Modelo OO
Ray Tracing – Modelo OO
Visualização dos componentes da
técnica;
Interação entre componentes;
Objetivo:
Extensibilidade;
Opção por tipo de algoritmo;
Definir a estrutura de dados e a interação
entre os componentes da técnica;
Ray Tracing – Algoritmo de Whitted
Fatores trabalhados pelo algoritmo:
As superfícies escondidas;
O preenchimento devido à iluminação
direta;
A reflexão e a refração;
As sobras desde que bem definidas, isto é,
geométricas e com bordas bem definidas
Ray Tracing – Algoritmo de Whitted
Raios de luz são traçados através da
cena:
interseção com os objetos:
testar a interseção de cada raio com cada
objeto da cena;
Cada interseção entre raio e objeto gera dois
novos raios, um refletido e outro transmitido;
interações especulares;
Ray Tracing – Algoritmo de Whitted
Ao traçarmos raios recursivamente,
devemos adotar critérios de parada:
A recursividade sempre termina quando o
raio intercepta uma superfície difusa;
Ou quando um número pré-determinado de
níveis de recursão é atingido;
Ou quando a energia de um raio se torna
menor que um determinado valor.
Ray Tracing – Algoritmo de Whitted
Componentes da luz:
Para cada ponto P de um objeto atingido por um
raio:
dois novos raios, um refletido e outro transmitido.
A intensidade de P:
Componente local;
Contribuição global do raio refletido;
Contribuição global do raio refratado seguido.
Sombras:
Se um raio refletido atinge um segundo objeto o
ponto que gerou o raio está na sombra;
Remoção de superfícies escondidas:
Lista de raios gerados com a respectivas distâncias
entre ponto e observador;
Ray Tracing – Algoritmo de Whitted
Equação da iluminação:
I(P) = Ilocal(P) + Iglobal(P) = Ilocal(P) + Krg * I(Pr) + Ktg * I(Pt)
Onde:
P: ponto atingido;
Pr: Ponto atingido através do traçado de um raio
refletido;
Pt: Ponto atingido através do traçado de um raio
transmitido;
Krg: Coeficiente global de reflexão;
Ktg: Coeficiente global de transmissão.
Ray Tracing – Algoritmo de Whitted
Corpo básico:
Recursão;
Um raio é particionado em dois
• um raio refletido
• outro transmitido
Duas chamadas a si
raio particionado.
mesmo, uma para cada
Ray Tracing – Algoritmo de Whitted
Informação contida em um raio:
Origem do raio;
Direção;
Ponto de interseção;
Cor atual no ponto de interseção;
Atenuação atual;
Distância do ponto de interseção à origem do raio;
O índice de refração que o raio possui atualmente;
A nível de traçado atual;
O número atual de objetos a que o raio é interno;
Ray Tracing – Algoritmo de Whitted
// a notação usada considera o uso de uma linguagem orientada a
objetos
ShotRay(ray) {
object := objectCollection.getCurrentObject();
if (ray.intersepts (object)) {
ray.getNormalAtInterseptionPoint(object);
iLocal := ray.calculateIntensity(object);
ray.decrementTraceDepth();
if (ray.getTraceDepth() > 0) {
// Calcula e traça o raio refletido
if (ray.isReflected(object)) {
rayr := ray.evalReflection(object);
rayr.setOrigin(ray.getIntersectionPoint(object);
// Multiplica o valor de Krg pelo valor
// da chamada anterior
rayr.attenuate(Krg);
rayCollection.add(rayr);
ShotRay(rayr);
}
if (rayr.interseptsAnObject(objectCollection)) {
// Considera o Krg I e o Ilocal
rayr.combineColours();
}
Ray Tracing – Algoritmo de Whitted
// Calcula e traça o raio refratado
if (object.isRefracting()) {
if (ray.isEntering(object)) {
ray.acumulateRefrativeIndex();
// Incrementa o número de objetos em que
// o raio se encontra
ray.incrementObjectNumber();
rayt := ray.evalRefraction(object);
refractedRayCollection.add(rayr);
}
Ray Tracing – Algoritmo de Whitted
else {
ray.deacumulateRefrativeIndex();
// Decrementa o número de objetos em que
// o raio se encontra
ray.decrementObjectNumber();
rayt := ray.evalRefraction(object);
refractedRayCollection.add(rayr);
}
rayt.setOrigin(ray.getIntersectionPoint(object);
rayr.attenuate(Ktg);
if (rayt.interseptsAnObject(objectCollection)) {
// Considera o Ktg I e o Ilocal
rayt.combineColours();
}
}
}
}
}
Ray Tracing – Algoritmo de Whitted
Complexidade do Algoritmo e Desempenho:
qr = 2 * 2 (n-1), onde qr é a quantidade de raios
gerados e n o número de iterações desejado.
Simplificando a expressão: qr = 2n
qc = 4 * 2(n-1), onde qr é a quantidade de chamadas
recursivas geradas e n o número de iterações do
raio.
Simplificando a expressão: qc = 22 * 2(n-1) = 2(n - 1 + 2) =
2(n+1)
O desempenho do algoritmos cai em
progressão geométrica
Depende do número de iterações que
configuradas.
Conclusão
 O ray tracing é uma boa opção quando se deseja
gerar imagens que computem a iluminação global
obtendo-se efeitos como reflexão, transparência e
sombras bem definidas, porém o algoritmo apresenta
um custo computacional alto.
 Adaptações ao algoritmo, mais a constante evolução
do hardware são fatores que atenuam o custo
computacional da técnica
maior expansão do uso do algoritmo.
 Ao optarmos pela técnica em questão, devemos
considerar o resultado final esperado e o custo para
determinar se a solução é adequada.
Bibliografia
 [1] “Introduction to Computer Graphics”; James D. Foley; Andries
van Dan; Steven K. Feiner; John F. Hughes; Richard L. Phillips;
Addison-Wesley Publishing Company; May 1997.
 [2] “3D Computer Graphics”; Alan Watt; Addison-Wesley; 3o edition;
2000.
 [3] “Design and Implementation of an Interactive Ray Tracer”;
Maria E. Jump; University of Maryland; September 1998;
http://www.cs.umd.edu/~mount/Indep/MJump/report.html.
 [4] ”1997 Sophomore College Ray Tracing Site”; Charity Lu; Alex
Roetter; Amy Schultz; http://cse.stanford.edu/class/sophomorecollege/projects-97/ray-tracing/index.html.
 [5] “Pratical Ray Tracing in C”; Craig A. Lindley; Wiley; 1992.
Download

ray tracing