Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Iluminao
Iluminao
Tpicos:
Fundamentos de iluminao
Aplicao em OpenGL
DI-UM
Iluminao
Em CG a iluminao simula como os objectos reflectem a luz em tempo real. uma aproximao emprica da iluminao real, por vezes sem profundas bases tericas que as sustentem, no entanto com resultados prticos bastante aceitveis. Esta aproximao deve-se a dois factores:
1. As equaes da iluminao real no so totalmente conhecidas 2. Mesmo os modelos simplificados da realidade so extremamente complexos
DI-UM
Iluminao - Fundamentos
A verso mais simples consiste em utilizar iluminao ambiente Todos os objectos tm uma intensidade intrnseca.
Para cada objecto definida uma constante, que indica a intensidade intrnseca. I = Ka
Objectos mais claros tm uma intensidade intrnseca elevada, enquanto que objectos escuros tm um intensidade intrnseca reduzida.
DI-UM
Iluminao - Fundamentos
Iluminao ambiente. Esta forma iluminao simula de uma forma bsica as reflexes que a luz realiza, iluminando todos os objectos por igual. I = K a * Ia
Propriedade do material
Antnio Ramires Fernandes DI-UM
Propriedade da luz
Iluminao - Fundamentos
As equaes at agora apresentadas no tm em considerao a posio e orientao da fonte de luz. Todos os objectos so iluminados de forma uniforme independentemente da sua posio ou orientao. A prpria luz no tem posio e/ou orientao definidas.
DI-UM
Iluminao - Fundamentos
Consideremos agora uma luz com uma posio determinada que emite luz em todas as direces, por ex: lmpada. A luz emite raios de luz uniformemente distribudos. Podemos ter em conta dois factores: orientao do objecto em relao luz distncia luz
DI-UM
Iluminao - Fundamentos
Reflexo difusa (Lambert)
A intensidade de um objecto proporcional ao ngulo entre a direco da luz e a normal do objecto.
N
Intensidade da luz
I = Ip * Kd * cos ()
coeficiente de reflexo difusa
Antnio Ramires Fernandes DI-UM
Iluminao - Fundamentos
iluminao difusa
difusa + ambiente
DI-UM
Iluminao - Fundamentos
Ficamos portanto com: I = Ia * Ka + Ip * Kd * cos () Caso ambos os vectores estejam normalizados pode-se substituir o coseno pelo produto interno, I = Ia * Ka + Ip * Kd * (N . L) Produto Interno N.L = nx * lx + ny * ly + nz * lz
Nota: s se consideram valores positivos do produto interno ou coseno
DI-UM
10
Iluminao - Fundamentos
Ou seja, a intensidade inversamente proporcional ao quadrado da distncia entre o objecto e a fonte de luz
DI-UM
11
Iluminao - Fundamentos
A realidade no se resume a uma fonte de luz sem interaco entre os objectos. Numa situao real a luz reflectida por um objecto tem influncia nos outros objectos.
DI-UM
12
Iluminao - Fundamentos
c1: constante que evita que o denominador fique muito pequeno quando a luz est muito perto. O clculo do mnimo obriga a diminuir ou manter a intensidade, i.e. fatt , <= 1.
Antnio Ramires Fernandes DI-UM
13
Iluminao - Fundamentos
Ao iluminar materiais brilhantes verifica-se uma mancha brilhante cuja posio depende da posio da cmara.
DI-UM
14
Iluminao - Fundamentos
ambiente I = Ia * K a + fatt * [ especular difusa Id * Kd * (N . L) + Is * Ks * (R.Cmara)s ] R Cmara
Nota: s se
Coeficiente de especularidade
15
Iluminao - Fundamentos
5 O coeficiente de especularidade [0,128] determina a dimenso da mancha brilhante. Quanto maior o valor, mais pequena a mancha. Materiais metlicos tendem a ter valores altos, enquanto que materiais baos definem-se com valores mais baixos. 100
DI-UM
16
Iluminao - Fundamentos
17
Iluminao - OpenGL
Vc = Ve + Va * Lga + sum(fatt * (Va * La + max {N.L, 0} * Vd * Ld + max {R.Cmara, 0}s * Vs * Ls)
Lga = cor global ambiente La = cor ambiente da luz Ld = cor difusa da luz Ls = cor especular da luz
Vc = cor final do vrtice Ve = cor emissiva do vrtice Va = cor ambiente do vrtice Vd = cor difusa do vrtice Vs = cor especular do vrtice s = coeficiente de especularidade
Antnio Ramires Fernandes DI-UM
18
Iluminao - OpenGL
Para cada vrtice necessrio definir a sua normal. Podemos considerar a normal como sendo um vector unitrio perpendicular superfcie do polgono. Considerando um tringulo, podemos definir a sua normal como sendo o produto externo entre duas arestas: n = v1 x v2 = [nx,ny,nz]
nx = v1y * v2z - v1z * v2y ny = v1z * v2x - v1x * v2z nz = v1x * v2y - v1y * v2x
19
Iluminao - OpenGL
Cdigo OpenGL:
No caso de se utilizar a mesma normal para todos os vrtices pode-se escrever: glBegin(GL_TRIANGLE); glNormal3f(0,1,0); glVertex3f(0,0,0); glVertex3f(0,0,1); glVertex3f(1,0,0); glEnd();
DI-UM
20
Iluminao
Tpicos:
Fundamentos de iluminao
Aplicao em OpenGL
DI-UM
21
Modelos de Shading
Processo para colorir um polgono (ou superfcie) utilizando um determinado modelo de iluminao. Alguns modelos de iluminao: Flat (constante) Interpolao Gouraud Phong (no disponvel em OpenGL)
DI-UM
22
Shading - Flat
Neste modelo o polgono tem iluminao constante em toda a sua superfcie. Uma normal para cada polgono Produz um resultado facetado
DI-UM
23
Shading - Flat
DI-UM
24
Shading - Flat
Problema: Aspecto facetado! Soluo: Definir uma malha poligonal mais fina. Esta soluo tem desvantagens bvias:
Primeiro implica um nmero mais elevado de polgonos o que pode diminuir o desempenho. Em segundo lugar, o aspecto facetado de facto intensificado devido ao efeito das bandas de Mach.
DI-UM
25
Shading Flat
Mach Band Fenmeno provocado pela disparidade entre a diferena real de intensidade e a intensidade percepcionada.
DI-UM
26
Shading - Interpolao
Neste modelo, proposto por Gouraud, determina-se a intensidade da luz para cada vrtice utilizando a normal respectiva. A intensidade dos restantes pontos do polgono calculada por interpolao Desta forma elimina-se a primeira restrio do modelo FLAT: a distncia do polgono luz no necessita de ser infinita.
DI-UM
27
Shading - Interpolao
A intensidade varia ao longo do polgono. A intensidade do vrtice proporcional ao ngulo entra a sua normal e a direco da luz.
DI-UM
28
Shading - Interpolao
As normais nos pontos de descontinuidade so diferentes! Polgonos com orientaes diferentes tm intensidades diferentes nas suas arestas.
Antnio Ramires Fernandes DI-UM
29
Shading - Gouraud
Muitos dos objectos a modelar so constitudos por superfcies curvas, e a modelao poligonal apenas uma aproximao. Objectivo: Aproximar uma superfcie curva por uma malha poligonal Mas, se cada polgono for iluminado individualmente ... ... continua-se a ter uma aparncia facetada, e por consequncia torna-se fcil distinguir um polgono dos seus vizinhos, cuja orientao diferente.
DI-UM
30
Shading - Gouraud
Para resolver este problema, Gouraud posteriormente sugeriu que ... ... cada vrtice tivesse uma normal que representasse, no a orientao do polgono, ... ... mas sim a normal da superfcie que a malha poligonal pretende aproximar.
Antnio Ramires Fernandes DI-UM
31
Shading - Gouraud
Isto implica que as normais da superfcie a aproximar sejam conhecidas para cada vrtice.
superfcie a aproximar
32
Shading - Gouraud
No caso das normais da superfcie no serem conhecidas, e no for possvel o seu clculo, ... ... possvel obter uma aproximao atravs da mdia (normalizada) das normais de cada polgono individual que partilhe o vrtice.
DI-UM
33
Shading - Gouraud
DI-UM
34
Shading - Gouraud
O modelo de Gouraud no elimina completamente o problema das bandas de Mach, embora as reduza consideravelmente. As manchas especulares no so reproduzidas fielmente
DI-UM
35
Shading - Gouraud
luz circular inteiramente dentro do polgono
Problema: Dependncia da iluminao nos vrtices do polgono. Um polgono parcialmente iluminado, em que nenhum dos vrtices iluminado representado como se a totalidade do polgono no fosse iluminado. Soluo: Malha mais fina?
situao desejada
DI-UM
36
Shading - Phong
Phong prope: Interpolar Normais em vez de intensidades Problema: Tempo Real? (j ultrapassado)
DI-UM
37
Shading
Gouraud
Phong
DI-UM
38
Shading
DI-UM
39
Shading
Problema: Nos modelos apresentados os objectos no interagem em termos de iluminao. So modelos locais. Por exemplo: Objectos no causam sombras noutros objectos
40
Shading
Modelos mais complexos, que contemplem iluminao global, no so utilizveis em tempo real:
Ray tracing
clculo de interaces especulares clculo de sombras
Radiosidade
clculo de interaces difusas
Photon Mapping
clculo das trajctrias da luz
Antnio Ramires Fernandes DI-UM
41
Iluminao
Tpicos:
Fundamentos de iluminao
Aplicao em OpenGL
DI-UM
42
OpenGL - Materiais
Componentes da cor:
Difusa Especular Ambiente Emissiva
DI-UM
43
OpenGL - Materiais
Se para um objecto no for definido um material a sua representao a da direita Esfera azul iluminada por luz vermelha
DI-UM
44
OpenGL - Materiais
Atribuir materiais:
glMaterialfv(GL_FRONT, componente, array); glMaterialf(GL_FRONT,GL_SHININESS,valor); 0..128 Componente: GL_DIFFUSE GL_AMBIENT GL_SPECULAR GL_EMISSION GL_AMBIENT_AND_DIFFUSE
DI-UM
45
OpenGL - Materiais
OU
glColorMaterial(GL_FRONT, GL_DIFFUSE); glEnable(GL_COLOR_MATERIAL); glColor3fv(vermelho); desenha1(); glColor3fv(azul); desenha2();
DI-UM
46
Iluminao
Tpicos:
Fundamentos de iluminao
Aplicao em OpenGL
DI-UM
47
OpenGL - Iluminao
DI-UM
48
OpenGL - Iluminao
Direccional
Atributos: direco, cor
GL_POSITION
DI-UM
49
OpenGL - Iluminao
Definir uma luz direccional GLfloat amb[3] = {0.2, 0.2, 0.2}; GLfloat diff[3] = {1.0, 1.0, 1.0}; GLfloat pos[4] = {0.0, 0.0 ,1.0, 0.0}; glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, diff);
DI-UM
50
OpenGL - Iluminao
DI-UM
51
OpenGL - Iluminao
Definir um ponto de luz GLfloat amb[3] = {0.2, 0.2, 0.2}; GLfloat diff[3] = {1.0, 1.0, 1.0}; GLfloat pos[4] = {0.0, 0.0 ,10.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, diff);
DI-UM
52
OpenGL - Iluminao
Foco de Luz (Spotlight)
Atributos: posio, ngulo, atenuao, direco, cor GL_POSITION GL_SPOT_DIRECTION GL_SPOT_CUTOFF GL_..._ATTENUATION
DI-UM
53
OpenGL - Iluminao
Definir um foco de luz GLfloat diff[3] = {1.0, 1.0, 1.0}; GLfloat pos[4] = {0.0, 0.0 ,10.0, 1.0}; GLfloat spotDir[3] = {0.0, 0.0, -1.0}; glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_DIFFUSE, diff); glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spotDir); glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 45.0); // [0,90] ou 180 glLightf(GL_LIGHT0,GL_SPOT_EXPONENT, 0.0); // [0,128]
DI-UM
54
OpenGL - Iluminao
Ligar,desligar o quadro
glEnable(GL_LIGHTING); glDisable(GL_LIGHTING);
DI-UM
55
OpenGL - Iluminao
DI-UM
56
OpenGL - Iluminao
O clculo da cor pode ser realizado em 1 ou dois passos. Neste ltimo caso a cor especular no influenciada pela aplicao de texturas.
DI-UM
57
OpenGL - Iluminao
DI-UM
58
OpenGL - Iluminao
DI-UM
59
OpenGL - Iluminao
DI-UM
60
Referncias
Computer Graphics Principles and Practice, Foley, van Dam, Feiner and Hughes OpenGL Reference Manual, OpenGL ARB Advanced Animation and Rendering Techniques : Theory and Practice, Alan Watt andMark Watt
DI-UM
61