Você está na página 1de 61

Fundamentos de Computao Grfica

Iluminao

Iluminao
Tpicos:
Fundamentos de iluminao
Aplicao em OpenGL

Modelos de Shading Materiais em OpenGL Iluminao em OpenGL

Antnio Ramires Fernandes

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

Antnio Ramires Fernandes

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.

Antnio Ramires Fernandes

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.

Antnio Ramires Fernandes

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

Antnio Ramires Fernandes

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

Antnio Ramires Fernandes

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

Antnio Ramires Fernandes

DI-UM

10

Iluminao - Fundamentos

Atenuao baseada na distncia I = Ia * Ka + fatt * Ip * Kd * (N . L) A escolha correcta seria: fatt = 1/d2


distncia luz

Ou seja, a intensidade inversamente proporcional ao quadrado da distncia entre o objecto e a fonte de luz

Antnio Ramires Fernandes

DI-UM

11

Iluminao - Fundamentos

A escolha correcta no entanto no produz os efeitos desejados.


Luz prxima => grandes variaes Luz distante => variaes demasiado pequenas

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.

Antnio Ramires Fernandes

DI-UM

12

Iluminao - Fundamentos

Uma soluo de compromisso : fatt = min(1/(c1 + c2*d + c3*d2) , 1)


c1,c2,c3: constantes associadas fonte de luz.

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

Reflexo Especular - Phong

Ao iluminar materiais brilhantes verifica-se uma mancha brilhante cuja posio depende da posio da cmara.

Antnio Ramires Fernandes

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

consideram os valores positivos do produto interno


Antnio Ramires Fernandes DI-UM

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

Antnio Ramires Fernandes

DI-UM

16

Iluminao - Fundamentos

Cor: R G B IR = IaR * KaR + fatt * Ip * [ KdR * (N . L) + Is * KsR * (R.Cmara)s ] IG = ... IB = ...


Antnio Ramires Fernandes DI-UM

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

Nota: O vector obtido atravs do produto externo deve ser normalizado.


Antnio Ramires Fernandes DI-UM

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();

glBegin(GL_TRIANGLE); glNormal3f(0,1,0); glVertex3f(0,0,0); glNormal3f(0,1,0); glVertex3f(0,0,1); glNormal3f(0,1,0); glVertex3f(1,0,0); glEnd();

Antnio Ramires Fernandes

DI-UM

20

Iluminao
Tpicos:
Fundamentos de iluminao
Aplicao em OpenGL

Modelos de Shading Materiais em OpenGL Iluminao em OpenGL

Antnio Ramires Fernandes

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)

Antnio Ramires Fernandes

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

Antnio Ramires Fernandes

DI-UM

23

Shading - Flat

Este modelo s faz sentido se:


A distncia entre a fonte de luz e o polgono for infinita, de forma a que N.L constante ao longo do polgono. O utilizador encontra-se tambm a uma distncia infinita, para que no haja variao da componente especular ao longo do polgono. A modelao uma representao fiel da superfcie a modelar, i.e. no uma aproximao.

Antnio Ramires Fernandes

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.

Antnio Ramires Fernandes

DI-UM

25

Shading Flat

Mach Band Fenmeno provocado pela disparidade entre a diferena real de intensidade e a intensidade percepcionada.

Antnio Ramires Fernandes

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.

Antnio Ramires Fernandes

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.

Antnio Ramires Fernandes

DI-UM

28

Shading - Interpolao

Problema: Superfcie continua facetada.

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.

Antnio Ramires Fernandes

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

Normal da superfcie a ser atribuda aos vrtices de ambos os polgonos

Malha poligonal utilizada


Antnio Ramires Fernandes DI-UM

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.

Antnio Ramires Fernandes

DI-UM

33

Shading - Gouraud

A imagem de cima apresenta o modelo com flat shading

A de baixo utiliza Gouraud shading.

Antnio Ramires Fernandes

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

Antnio Ramires Fernandes

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?

luz circular inclui s um canto do polgono

malha mais fina

situao desejada

Antnio Ramires Fernandes

DI-UM

36

Shading - Phong

Phong prope: Interpolar Normais em vez de intensidades Problema: Tempo Real? (j ultrapassado)

Antnio Ramires Fernandes

DI-UM

37

Shading

Gouraud

Phong

Antnio Ramires Fernandes

DI-UM

38

Shading

Problema: Silhueta Independente da qualidade do modelo de shading

Antnio Ramires Fernandes

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

A luz vem da esquerda


Antnio Ramires Fernandes DI-UM

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

Modelos de Shading Materiais em OpenGL Iluminao em OpenGL

Antnio Ramires Fernandes

DI-UM

42

OpenGL - Materiais

Componentes da cor:
Difusa Especular Ambiente Emissiva

Antnio Ramires Fernandes

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

Antnio Ramires Fernandes

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

Antnio Ramires Fernandes

DI-UM

45

OpenGL - Materiais

glMaterialfv(GL_FRONT,GL_DIFFUSE, vermelho); desenha1(); glMaterialfv(GL_FRONT,GL_DIFFUSE, azul); desenha2();

OU
glColorMaterial(GL_FRONT, GL_DIFFUSE); glEnable(GL_COLOR_MATERIAL); glColor3fv(vermelho); desenha1(); glColor3fv(azul); desenha2();

Antnio Ramires Fernandes

DI-UM

46

Iluminao
Tpicos:
Fundamentos de iluminao
Aplicao em OpenGL

Modelos de Shading Materiais em OpenGL Iluminao em OpenGL

Antnio Ramires Fernandes

DI-UM

47

OpenGL - Iluminao

Definir propriedades da luz


glLight{if}(GL_LIGHTi, param, valor1,valor2, ...); glLight{if}v(GL_LIGHTi, param, array_valores)

Antnio Ramires Fernandes

DI-UM

48

OpenGL - Iluminao
Direccional
Atributos: direco, cor

GL_POSITION

Antnio Ramires Fernandes

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);

0.0 indica que a luz direccional A posio indica a direco da luz

Antnio Ramires Fernandes

DI-UM

50

OpenGL - Iluminao

Ponto de Luz Atributos: posio, atenuao, cor


GL_POSITION GL_..._ATTENUATION

Antnio Ramires Fernandes

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);

1.0 indica que se trata de um ponto de luz

Antnio Ramires Fernandes

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

Antnio Ramires Fernandes

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]

Antnio Ramires Fernandes

DI-UM

54

OpenGL - Iluminao

Ligar, desligar luzes individuais (por omisso esto desligadas)


glEnable(GL_LIGHTi); glDisable(GL_LIGHTi);

Ligar,desligar o quadro
glEnable(GL_LIGHTING); glDisable(GL_LIGHTING);

Antnio Ramires Fernandes

DI-UM

55

OpenGL - Iluminao

Algumas Propriedades Globais


Luz Ambiente Global
GLfloat mod_amb[3] = {0.2, 0.2, 0.2, 1.0}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, mod_amb);

Clculo da reflexo especular


glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);

Antnio Ramires Fernandes

DI-UM

56

OpenGL - Iluminao

Algumas Propriedades Globais


Clculo separado da cor especular
glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR); glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);

O clculo da cor pode ser realizado em 1 ou dois passos. Neste ltimo caso a cor especular no influenciada pela aplicao de texturas.

Antnio Ramires Fernandes

DI-UM

57

OpenGL - Iluminao

Algumas Propriedades Globais


Clculo da iluminao em ambos os lados
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); Quando se especifica TWO_SIDE, estamos a pedir ao OpenGL que inverta as normais para o lado de trs do polgono

Antnio Ramires Fernandes

DI-UM

58

OpenGL - Iluminao

Demo sobre luzes e materiais

Antnio Ramires Fernandes

DI-UM

59

OpenGL - Iluminao

Demo sobre posicionamento da luz

Antnio Ramires Fernandes

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

Antnio Ramires Fernandes

DI-UM

61