psi5789 - conceitos avançados de síntese de imagens marcio lobo netto ray tracing técnica e...
TRANSCRIPT
PSI5789 - Conceitos Avançados de Síntese de Imagens
Marcio Lobo Netto
Ray TracingTécnica e Implementação
Alice Shimada Bacic3o período de 2002
IntroduçãoComputação gráfica:
Grande diversidade de aplicações Demanda por imagens realistas Complexidade do mundo real Abstrações do mundo real
Modelos limitadosObjetivo da sínteze de imagens:
produção de imagens que não possam ser distinguidas de uma fotografia
AbordagensNa 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
AlgoritmosOs 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ósitoGerar 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óricoA 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 geralConsidera 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árioObservador (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)
Observador
Viewplane
Fonte de luz
Objetos da cena
Pixel
Raio de luz
Monitor
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
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.
Reflexão
Transmissão
Ray Tracing – Reflexão e transmissão
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.
Especular
Difusa
Ray Tracing – Tipos de algoritmoForward 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 algoritmoBackward 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
CartesianPointx : floaty : floatz : float
getX()getY()getZ()
Cartesian
0..*0..*
Addresses
Backward Forward
LightRayintensity : floatdirection
File
Objectcolor : longreflection : floatrefraction : float
ProcessLight()
LightSource
*
1
*
1
Produces
CoordinateSystem
Sphereradius : float
Cilinderdiameter : floatheight : float
BoxWidth : floatHeight : floatHight : float
Point
+Centre
2
+Axis
2
+Cornner
ImageFile
Image
Saved
Scene
gotoFirstObject()nextObject()gotoLastObject()currentObject()
**
**
0 *0 *
Used by
Observer
+Position
Viewplane
See throught
+Position
11
SceneDescriptor
RayTracer
**
Process
Creates image for
Captured by
Load
Ray Tracing – Modelo OOVisualizaçã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 mesmo, uma para cada raio particionado.
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 refletidoif (ray.isReflected(object)) {rayr := ray.evalReflection(object);rayr.setOrigin(ray.getIntersectionPoint(object);
// Multiplica o valor de Krg pelo valor// da chamada anteriorrayr.attenuate(Krg);
rayCollection.add(rayr);ShotRay(rayr);
if (rayr.interseptsAnObject(objectCollection)) {// Considera o Krg I e o Ilocalrayr.combineColours();}}
Ray Tracing – Algoritmo de Whitted
// Calcula e traça o raio refratadoif (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/sophomore-college/projects-97/ray-tracing/index.html.
[5] “Pratical Ray Tracing in C”; Craig A. Lindley; Wiley; 1992.