Modelos de Iluminação
• As
imagens realistas
obtêm-se :
– usando
projecções perspectivas
da cena
– aplicando
efeitos de iluminação naturais
às superfícies visíveis
• Os
efeitos de iluminação naturais
obtêm-se usando:
– um
modelo de iluminação
que permite calcular a cor a atribuir a
cada ponto das superfícies dos objectos da cena
– um
método de surface-rendering
que aplica o modelo de
iluminação para determinar a cor de todos os pixels
• O
fotorealismo
envolve:
- Representação precisa das
propriedades das superfícies
- Boa descrição física da
iluminação da cena
• O que implica conhecimentos de princípios de Física e Psicologia
• E pode significar modelação de:
– texturas das superfícies,
– transparência
– reflexões
– sombras
– etc.
• Os modelos de iluminação usados em Computação Gráfica - são muitas vezes aproximações das leis físicas
- que descrevem a interacção superfície-luz
• Existem vários tipos de modelos de iluminação:
- modelos simples, baseados em cálculos fotométricos simples (para reduzir a complexidade computacional)
- modelos mais sofisticados, baseados na propagação da energia radiante (computacionalmente mais complexos)
Fontes de luz
• São objectos que radiam luz e contribuem para iluminar os objectos da cena
• Podem ser modeladas com uma grande variedade de características:
- Posição
- Cor da luz emitida - Direcção de emissão - Forma
Fontes de luz (simplificadas)
Fonte de luz a uma distância infinita
Fonte pontual isotrópica
Os raios de luz emitidos por uma fonte situada muito longe são praticamente paralelos
Fontes de luz mais sofisticadas
Foco de luz direccional
Fontes de luz ainda mais sofisticadas
Fonte de luz não pontual e próxima do objecto
Efeitos de iluminação das superfícies
• Um modelo de iluminação utiliza as propriedades ópticas atribuídas à superfície: - coeficientes de reflexão para cada cor
- grau de transparência
- parâmetros de textura da superfície
• Quando a luz incide numa superfície opaca: - parte da luz é absorvida
• A quantidade de luz reflectida depende das características da superfície
- As superfícies brilhantes reflectem maior quantidade de luz - As superfícies mate reflectem menor quantidade de luz
• As superfícies rugosas tendem a espalhar a luz reflectida em todas as direcções
-reflexão difusa
E parecem igualmente brilhantes a partir de qualquer ponto de observação
• As superfícies mais lisas reflectem mais luz em determinadas direcções
-reflexão especular (highlight)
• Outro factor a considerar num modelo de iluminação é a
- Iluminação ambiente
• Uma superfície que não é directamente iluminada pode ser visível devido à luz reflectida pelos outros objectos da cena
• A luz reflectida por uma superfície é a soma das contribuições das fontes de luz e da iluminação ambiente
Modelos de iluminação básicos
• Os modelos de iluminação sofisticados calculam com precisão os efeitos das interacções entre a energia radiante e os materiais que compõe as superfícies
• Os modelos básicos usam aproximações para representar os processos físicos que produzem os efeitos de iluminação apresentados
• O modelo empírico descrito a seguir produz resultados suficientemente bons para a maioria das situações e inclui:
- iluminação ambiente
- reflexão difusa
Phong reflection model – 1973
• A iluminação ambiente é incluída sob a forma de um valor constante para toda a cena:
I
aproduzindo uma iluminação uniforme para todos os objectos
• Neste caso as reflexões produzidas pelas superfícies:
- são independentes da direcção de visão
- são independentes da orientação da superfície
- dependem apenas das propriedades ópticas da superfície
• A iluminação ambiente, isoladamente, produz resultados pouco interessantes na representação de uma cena
I ambdiff = Kd Ia
• Considera-se que a luz incidente é espalhada com igual intensidade em todas as direcções, independentemente da direcção de visão
• As superfícies com estas características chamam-se reflectores Lambertianos
ou reflectores difusos ideais
• Esta reflexão pode ser calculada pela Lei de Lambert:
Energia radiante por un. de tempo área projectada Intensidade cos ΦN dA cos ΦN = const.
Reflexão difusa
α• Em geral, inclui-se pelo menos uma fonte de luz (frequentemente no ponto de observação) • Neste caso, a quantidade de luz incidente
depende da orientação da superfície em relação à direcção da fonte luminosa
• Uma superfície que é perpendicular à direcção da luz, é mais iluminada que uma superfície
com igual área mas oblíqua
• Este efeito pode ser observado variando a orientação de uma folha de papel branco em relação à direcção da luz
• Sendo θ o ângulo de incidência (entre a direcção da luz e a normal à superfície)
• A quantidade de luz reflectida de modo difuso por uma superfície, correspondente a uma fonte de luz Il, é:
Área projectada
• Pode-se exprimir em função dos vectores unitários:
N normal à superfície
L direcção de uma fonte de luz
se se
Reflexão difusa numa esfera iluminada por uma fonte pontual branca com 0 < Kd < 1 e sem iluminação ambiente (Ka = 0)
Somando a iluminação ambiente com a reflexão difusa:
se se
Iluminação ambiente
Reflexão especular e o modelo de Phong
• Os pontos brilhantes, reflexões especulares ou highlights, que se vêm nas superfícies brilhantes resultam da reflexão quase total da luz em áreas
concentradas
• O ângulo de reflexão especular é igual ao ângulo de incidência (em relação à normal)
• R é o vector unitário correspondente à direcção da reflexão especular ideal
• V é o vector unitário na direcção do ponto de vista
• Um reflector ideal reflecte apenas na direcção da reflexão especular (apenas se vê reflexão quando V e R coincidem Φ= 0)
• Objectos que não sejam reflectores ideais apresentam reflexões especulares numa gama finita de direcções em torno do vector R
• As superfícies mais brilhantes têm uma gama de direcções de reflexão mais estreita
• O modelo de reflexão especular de Phong
estabelece, empiricamente, que a intensidade das reflexões especulares é proporcional ao
Superfície menos brilhante
Variação de W(θ) para diferentes materiais como função do ângulo de incidência
• Pode-se calcular cos Φ a partir do produto escalar dos versores V∙R
• Não existem reflexões especulares quando: - A fonte de luz está atrás da superfície - V e L “estão do mesmo lado” da normal N
• Assim, assumindo que o coeficiente de reflexão especular é constante para cada material, podemos determinar a intensidade da reflexão especular num ponto da superfície devida a uma fonte de luz:
cos Φ
Fonte de luz atrás da superfície R do lado oposto a V
e
Reflexões especulares provocadas por uma única fonte luminosa, para vários parâmetros especulares
• Quando existe uma única fonte de luz pontual, a combinação dos três efeitos:
- iluminação ambiente - reflexão difusa
- reflexão especular
Reflexões difusas e especulares
• Quando existem múltiplas fontes de luz:
Múltiplas fontes de várias cores:
Por vezes utiliza-se o halfway vector H (entre L e V) como aproximação de R numa versão do modelo de Phong mais simples de calcular para superfícies não planas (com N variável)
The Halfway Vector
• h is the unit vector “halfway” between l
and v
h = ( l + v ) / || l + v||
• Quando se usa o modelo RGB, a intensidade é especificada no modelo de iluminação como um vector com três elementos:
Considerações quanto à cor
• O mesmo para os coeficientes:
• Por exemplo a componente azul das reflexões difusas será:
• No modelo de Phong original Ks é constante e independente da cor da superfície
• O que provoca reflexões com a cor da fonte e dá um aspecto de plástico aos objectos
• Existem modelos de iluminação mais
sofisticados, que permitem obter imagens mais realistas de outros tipos de materiais
Imagens obtidas com modelos de iluminação mais sofisticados
Modelo de iluminação mais sofisticado
OpenGL (Pré-3.1) – Lighting
• É usado o
modelo de iluminação de Phong
• As características das fontes de luz e as propriedades dos materiais
são expressas usando o modelo
RGB
ou
RGBA
– Luz emitida ou reflectida
– Coeficientes de reflexão ambiente, difusa e especular
• Podem ser definidas várias fontes de luz, controladas de modo
independente.
• Se desejado, o programador pode desenvolver e usar um modelo
mais sofisticado !!
OpenGL (Pré-3.1) – Lighting
• Passos fundamentais:
– Associar um
“vector normal”
a cada
vértice
, que determina a sua
orientação relativamente às fontes de luz.
• Como fazer ?
• Representação de poliedros vs. aproximação de superfícies curvas
– Criar, definir as suas propriedades e posicionar as
fontes de luz
– Definir as
propriedades dos materiais
que constituem os vários
objectos da cena
– Estabelecer algumas
propriedades do modelo de iluminação
• Distância ao observador • Iluminação ambiente global • …
OpenGL (Pré-3.1) – Lighting Model
• Iluminação ambiente global
GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0}; glLightModelfv( GL_LIGHT_MODEL_AMBIENT,
lmodel_ambient );
• Distância ao observador
glLightModeli( GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE ); glLightModeli( GL_LIGHT_MODEL_LOCAL_VIEWER,
GL_FALSE );
Default! Porquê?
• Activar / Desactivar
OpenGL (Pré-3.1) – Light Sources
• Exemplo: fonte de luz pontual
GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_position[] = { 1.0, 1.0, 1.0,
0.0
};
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable( GL_LIGHT0 );
OpenGL (Pré-3.1) – Light Sources
• Exemplo:
“spotlight”
…
GLfloat spot_direction[] = { -1.0, -1.0, 0.0 }; glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse); glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular); glLightfv(GL_LIGHT1, GL_POSITION, light1_position); … glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.5); glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.5); … glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 45.0); glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spot_direction); glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 2.0); glEnable( GL_LIGHT1 );
OpenGL (Pré-3.1) – Material Properties
• Diferentes propriedades / coeficientes
GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 };
GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 };
GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0
};
GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 };
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat no_shininess[] = { 0.0 };
GLfloat low_shininess[] = { 5.0 };
GLfloat high_shininess[] = { 100.0 };
GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0};
OpenGL (Pré-3.1) – Material Properties
• Apenas reflexão difusa
glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
OpenGL (Pré-3.1) – Material Properties
• Reflexão difusa e especular, com elevado coeficiente de
Phong
glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS,
high_shininess);
glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
OpenGL (Pré-3.1) - Shading
• Cor atribuída às primitivas (segmentos de recta e
polígonos)
– Constante
(Flat-Shading), usando a cor atribuída a um dos
vértices
(qual?)
da primitiva
glShadeModel( GL_FLAT );
– Determinada
por interpolação
(Gouraud Shading)
– Default !
glShadeModel( GL_SMOOTH );
OpenGL – Material Properties
• Bules de diferentes
“materiais”:
– Esmeralda, jade, … – Latão, bronze, … – Plástico – BorrachaOpenGL / WebGL – Lighting
• E, hoje em dia, como fazer?
• Que cálculos são efectuados pela
aplicação?
• Que cálculos são efectuados pelos
shaders
?
OpenGL / WebGL – Lighting
• Calcular na aplicação e/ou enviar atributos
aos shaders
– Propriedades dos materiais
– Vectores normais
– Propriedades das fontes luz
• Usar vectores unitários
!!
– Cuidado com as transformações aplicadas !!
– GLSL
normalization
function
OpenGL / WebGL – Light Sources
• Exemplo: fonte de luz pontual
vec4 diffuse0 = vec4(1.0, 0.0, 0.0, 1.0);
vec4 ambient0 = vec4(1.0, 0.0, 0.0, 1.0);
vec4 specular0 = vec4(1.0, 0.0, 0.0, 1.0);
vec4 light0_pos = vec4(1.0, 2.0, 3.0,
0.0
);
OpenGL / WebGL – Material Properties
• Reflexão difusa e especular, com elevado coeficiente de
Phong
vec4 ambient = vec4(0.2, 0.2, 0.2,
1.0
);
vec4 diffuse = vec4(1.0, 0.8, 0.0,
1.0
);
vec4 specular = vec4(1.0, 1.0, 1.0,
1.0
);
GLfloat shine = 100.0
• Alternativas
– A
aplicação
determina a cor (
shade
) de cada
vértice da malha poligonal
– E envia-a ao
vertex shader
• OU
– A aplicação envia todos os parâmetros para o
vertex shader
– Este calcula a cor (
shade
) para cada vértice
OpenGL / WebGL – Per Vertex Shading
• Smooth Shading
→ Default
– Cor
interpolada
ao longo de cada primitiva
– Se passada ao
fragment shader
como
varying
• Flat Shading
– Cor
constante
ao longo de cada primitiva
– Se passada ao
fragment shader
como
uniform
OpenGL / WebGL – Per Vertex Shading
// vertex shader
attribute vec4 vPosition;
attribute vec3 vNormal;
varying
vec4 color; //vertex shade
// light and material properties
uniform vec4 AmbientProduct, DiffuseProduct, SpecularProduct;
uniform mat4 ModelView;
uniform mat4 Projection;
uniform vec4 LightPosition;
uniform float Shininess;
OpenGL / WebGL – Per Vertex Shading
void main()
{
// Transform vertex position into eye coordinates
vec3 pos = (ModelView * vPosition).xyz;
vec3 L = normalize( LightPosition.xyz - pos );
vec3 E = normalize( -pos );
vec3 H
= normalize( L + E );
// Transform vertex normal into eye coordinates
OpenGL / WebGL – Per Vertex Shading
// Compute terms in the illumination equation
vec4 ambient = AmbientProduct;
float Kd = max( dot(L, N), 0.0 );
vec4 diffuse = Kd*DiffuseProduct;
float Ks = pow( max( dot(N, H), 0.0), Shininess );
vec4 specular = Ks * SpecularProduct;
if( dot(L, N) < 0.0 ) specular = vec4(0.0, 0.0, 0.0, 1.0);
gl_Position = Projection * ModelView * vPosition;
color = ambient + diffuse + specular;
color.a = 1.0;
OpenGL / WebGL– Per Vertex Shading
// fragment shader
precision mediump float;
varying vec4 color;
void main()
{
gl_FragColor = color;
}
Transparência
• Um objecto transparente deixa ver os objectos que estão atrás
• Há também objectos translúcidos
que transmitem a luz mas difundem-na em todas as direcções
• É possível modelar a transparência com graus de realismo diferentes:
- sem refracção (mudança de direcção dos raios luminosos) - com refracção
Objecto transparente
Direcção de refracção Para a fonte de luz
Direcção de reflexão
• Para se obter maior realismo é necessário considerar a refracção da luz
• A direcção da luz refractada é diferente da luz incidente
• O ângulo de refracção varia com:
- os índices de refracção dos meios - o ângulo do raio incidente
• De acordo com a Lei de Snell:
O raio emergente é paralelo ao raio incidente
ar
ar
Direcção de refracção Para a fonte de luz
Direcção de reflexão
• O índice de refracção varia com vários factores: - l da luz
- temperatura do material
- direcção (em materiais anisotrópicos) - …
• Mas em geral pode-se usar um valor médio
• Índices de refracção para vários materiais: vácuo / ar - 1.00
gelo - 1.31 água - 1.33 vidro vulgar - 1.52
• Pode-se calcular T (vector unitário na direcção de refracção):
N – vector unitário normal à superfície
L – vector unitário na direcção da fonte luminosa
• O efeito geral da passagem de luz através de uma lâmina de vidro é um raio emergente paralelo ao incidente
ar
ar
vidro
O raio emergente é paralelo ao raio incidente
• Na maioria das aplicações usam-se aproximações menos realistas e mais rápidas
• Uma aproximação mais simples ignora as mudanças de direcção dos raios transmitidos entre materiais
• Esta aproximação: - é rápida
- produz resultados aceitáveis
para superfícies poligonais transparentes de pequena espessura
Plano de projecção Objecto
transparente
Objecto no fundo
• Pode-se combinar a luz transmitida através de uma superfície transparente com a luz reflectida pela superfície: Plano de projecção Objecto transparente Objecto no fundo - coeficiente de transparência [0, 1] 1- totalmente transparente 0- totalmente opaco
• Pode-se também definir o coeficiente de opacidade:
Sombras
• Podem usar-se métodos de detecção de visibilidade para detectar zonas que
não são iluminadas por fontes luminosas
• Pode-se determinar as faces da cena que não são visíveis de cada fonte luminosa
• Depois aplica-se o modelo de iluminação usando apenas as fontes que contribuem para a iluminação de cada face
Direcção da luz incidente
Exemplo: Sombras devidas
Métodos de Rendering de Polígonos (Shading)
• Os cálculos da intensidade obtidos a partir de um modelo de iluminação podem ser aplicados ao rendering de uma superfície de formas diferentes: - Calcular a intensidade de todos os pixels correspondentes à superfície projectada
- Calcular a intensidade de alguns pixels criteriosamente escolhidos e obter um valor aproximado para os restantes
• As bibliotecas gráficas usam, em geral, algoritmos scan-line e calculam a intensidade nos vértices dos polígonos, usando o modelo de iluminação
- Muitas interpolam as intensidades ao longo das scan-lines - Outras usam métodos mais precisos
Métodos de Rendering de Polígonos (Shading)
- Os métodos mais comuns são:
Método de intensidade constante, uniforme ou flat-shading
Método de Gouraud
• Atribui a mesma cor a todos os pixels de cada polígono
• Usa o modelo de iluminação para calcular as componentes RGB de um
pixel correspondente a um dado ponto de cada polígono (vértice, centróide,
etc.)
Surface rendering de intensidade constante (Flat-Shading)
• É simples e rápido !
• Adequado a alguns casos simples e útil para obter a aparência geral dum objecto curvo
• Em geral, o flat-shading é adequado quando se verificam todas as condições seguintes:
- O polígono é uma face de um poliedro e não uma região de uma superfície curva aproximada por uma malha poligonal
- Todas as fontes de luz estão muito afastadas: “fontes no infinito” (N.L constante para todo polígono)
- O observador (“viewpoint”) está muito afastado
(V.R constante para todo o polígono)
• Caso contrário, a aproximação é razoável se o objecto for aproximado por uma malha com polígonos muito pequenos
Gouraud shading – 1971
Método de Gouraud ou de interpolação de intensidades
• Calcula a intensidade nos vértices e interpola linearmente ao longo das faces poligonais de um objecto
• Foi desenvolvido, por Henri Gouraud, para fazer o rendering de um objecto curvo
aproximado por uma malha poligonal
• Faz uma transição suave dos valores de intensidade entre polígonos adjacentes estimando, para cada vértice, um vector normal “médio”
• Cada face poligonal de uma malha que aproxima uma superfície curva é processada da seguinte forma:
1 - determinar o vector normal “médio” para cada vértice do polígono
2 - aplicar um modelo de iluminação em cada vértice para obter a intensidade nessa posição
3 - interpolar linearmente as intensidades dos vértices ao longo da área projectada do polígono
Malha poligonal que aproxima o objecto Rendering com o flat-shading Rendering com o método de Gouraud
Gouraud shading
• É mais sofisticado que o anterior, foi desenvolvido, por Phong Bui Tuong (1975)
• Interpola linearmente os vectores normais (em vez de os valores de intensidade) e aplica repetidamente o modelo de iluminação
• Resulta em imagens mais realistas com: – Melhores reflexões especulares
– Bandas de Mach menos acentuadas
– Mas é mais pesado computacionalmente
• Cada secção poligonal de uma malha que aproxima uma superfície curva é processada da seguinte forma:
1 - determinar o vector normal “médio” para cada vértice do polígono
2 - interpolar linearmente as normais aos vértices ao longo da área projectada do polígono
3 - aplicar um modelo de iluminação ao longo das scan lines
para calcular a intensidade luminosa usando as normais interpoladas Gouraud
Phong shading – 1973
Highlights melhorados Flat
Phong
Gouraud
OpenGL / WebGL – Per Fragment Shading
// vertex shader
attribute vec4 vPosition;
attribute vec3 vNormal;
// output values that will be interpolated per-fragment
varying
vec3 fN;
varying
vec3 fE;
varyin
g vec3 fL;
uniform mat4 ModelView;
uniform vec4 LightPosition;
uniform mat4 Projection;
OpenGL / WebGL– Per Fragment Shading
void main()
{
fN = vNormal;
fE = vPosition.xyz;
fL = LightPosition.xyz;
if( LightPosition.w != 0.0 ) {
fL = LightPosition.xyz - vPosition.xyz;
}
gl_Position = Projection*ModelView*vPosition;
}
OpenGL / WebGL – Per Fragment Shading
// fragment shader
precision mediump float;
// per-fragment interpolated values from the vertex shader
varying
vec3 fN;
varying
vec3 fL;
varying
vec3 fE;
uniform vec4 AmbientProduct, DiffuseProduct, SpecularProduct;
uniform mat4 ModelView;
uniform vec4 LightPosition;
uniform float Shininess;
OpenGL – Per Fragment Shading
void main()
{
// Normalize the input lighting vectors
vec3 N = normalize(fN);
vec3 E = normalize(fE);
vec3 L = normalize(fL);
vec3 H = normalize( L + E );
vec4 ambient = AmbientProduct;
OpenGL – Per Fragment Shading
float Kd = max(dot(L, N), 0.0);
vec4 diffuse = Kd*DiffuseProduct;
float Ks = pow(max(dot(N, H), 0.0), Shininess);
vec4 specular = Ks*SpecularProduct;
// discard the specular highlight if the light's behind the vertex
if( dot(L, N) < 0.0 )
specular = vec4(0.0, 0.0, 0.0, 1.0);
gl_FragColor = ambient + diffuse + specular;
gl_FragColor.a = 1.0;
Teapot Examples
Iluminação global
Métodos de iluminação global:
Ray Casting
• Se se considerar a linha de vista a partir de um pixel no plano de visualização até à cena, é possível determinar que
objectos são intersectados
• Este método chama-se ray casting
• Baseia-se nos métodos de óptica geométrica que determinam os percursos dos raios de luz
• Quando se usa projecção perspectiva, os raios divergem do centro de projecção, passam pelo centro de um pixel e continuam através da cena
Ray Casting
• Adicionalmente, podem lançar-se raios secundários reflectidos ou transmitidos • No caso de haver raios secundários
chama-se ray-tracing
Centro de projecção
Pixel no plano de visualização
Ray Tracing: Shadow or feeler rays
Ray Tracing: Transmitting surfaces
Ray tracing com profundidade
variável: 2, 3 e 4 raios secundários
2 3
100% opaca 50% transparente 100% reflectora 100% transparente M a ior tra n sp a rên cia
Ray-Tracing example
Another Ray-Tracing example
Real-time ray tracing
• It
was
impossible to do ray tracing in real-time !
• Still using
“rendering farms”
for non-real-time
Real-time ray tracing
• BUT,
GPUs
can be used to speed up ray tracing
• The architecture of
recent GPUs
is capable of
real-time
ray tracing !!
[van Dam]
Scene ray traced in real time using NVIDIA Kepler