modelos de iluminação e métodos de - IEETA
modelos de iluminação e métodos de - IEETA
modelos de iluminação e métodos de - IEETA
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Mo<strong>de</strong>los <strong>de</strong> Iluminação<br />
Métodos <strong>de</strong> surface-ren<strong>de</strong>ring<br />
VI / CG – 2012/2013 Beatriz Sousa Santos, J. Ma<strong>de</strong>ira<br />
1
• As imagens realistas obtêm-se :<br />
– usando projecções perspectivas da cena<br />
– aplicando efeitos <strong>de</strong> <strong>iluminação</strong> naturais às superfícies visíveis<br />
• Os efeitos <strong>de</strong> <strong>iluminação</strong> naturais obtém-se usando:<br />
– um mo<strong>de</strong>lo <strong>de</strong> <strong>iluminação</strong> que permite calcular a cor a atribuir a<br />
cada ponto das superfícies dos objectos da cena<br />
– um método <strong>de</strong> surface-ren<strong>de</strong>ring que aplica o mo<strong>de</strong>lo <strong>de</strong><br />
<strong>iluminação</strong> para <strong>de</strong>terminar a cor <strong>de</strong> todos os pixels<br />
2
• O fotorealismo envolve:<br />
- Representação precisa das proprieda<strong>de</strong>s das superfícies<br />
- Boa <strong>de</strong>scrição física da <strong>iluminação</strong> da cena<br />
• O que implica conhecimentos <strong>de</strong> princípios <strong>de</strong> Física e Psicologia<br />
• E po<strong>de</strong> significar mo<strong>de</strong>lação <strong>de</strong>:<br />
– texturas das superfícies,<br />
– transparência<br />
– reflexões<br />
– sombras<br />
– etc.<br />
3
• Os <strong>mo<strong>de</strong>los</strong> <strong>de</strong> <strong>iluminação</strong> usados em Computação Gráfica<br />
- são muitas vezes aproximações das leis físicas<br />
- que <strong>de</strong>screvem a interacção superfície-luz<br />
• Existem vários tipos <strong>de</strong> <strong>mo<strong>de</strong>los</strong> <strong>de</strong> <strong>iluminação</strong>:<br />
- <strong>mo<strong>de</strong>los</strong> simples, baseados em cálculos fotométricos simples<br />
(para reduzir a complexida<strong>de</strong> computacional)<br />
- <strong>mo<strong>de</strong>los</strong> mais sofisticados, baseados na propagação da energia radiante<br />
(computacionalmente mais complexos)<br />
4
Fontes <strong>de</strong> luz<br />
• São objectos que radiam luz e contribuem para iluminar os objectos da cena<br />
• Po<strong>de</strong>m ser mo<strong>de</strong>ladas com uma gran<strong>de</strong> varieda<strong>de</strong> <strong>de</strong> características:<br />
- Posição<br />
- Cor da luz emitida<br />
- Direcção <strong>de</strong> emissão<br />
- Forma<br />
5
Fontes <strong>de</strong> luz (simplificadas)<br />
Fonte <strong>de</strong> luz a uma distância infinita<br />
Fonte pontual isotrópica<br />
Os raios <strong>de</strong> luz emitidos por uma<br />
fonte situada muito longe são<br />
praticamente paralelos<br />
6
Fontes <strong>de</strong> luz mais sofisticadas<br />
Foco <strong>de</strong> luz direccional<br />
(<strong>de</strong>finido por uma direcção e um ângulo)<br />
7
Fontes <strong>de</strong> luz ainda mais sofisticadas<br />
Fonte <strong>de</strong> luz não pontual e<br />
próxima do objecto<br />
8
Efeitos <strong>de</strong> <strong>iluminação</strong> das superfícies<br />
• Um mo<strong>de</strong>lo <strong>de</strong> <strong>iluminação</strong> utiliza as proprieda<strong>de</strong>s ópticas atribuídas à superfície:<br />
- coeficientes <strong>de</strong> reflexão para cada cor<br />
- grau <strong>de</strong> transparência<br />
- parâmetros <strong>de</strong> textura da superfície<br />
• Quando a luz inci<strong>de</strong> numa superfície opaca:<br />
- parte da luz é absorvida<br />
- parte é reflectida<br />
9
• A quantida<strong>de</strong> <strong>de</strong> luz reflectida <strong>de</strong>pen<strong>de</strong> das características da superfície<br />
- As superfícies brilhantes reflectem maior quantida<strong>de</strong> <strong>de</strong> luz<br />
- As superfícies mate reflectem menor quantida<strong>de</strong> <strong>de</strong> luz<br />
• As superfícies transparentes transmitem parte da luz<br />
11
• As superfícies rugosas ten<strong>de</strong>m a espalhar a luz reflectida em todas as<br />
direcções<br />
-reflexão difusa<br />
E parecem igualmente brilhantes a partir <strong>de</strong> qualquer ângulo <strong>de</strong> visão<br />
• As superfícies mais lisas reflectem mais luz em <strong>de</strong>terminadas direcções<br />
-reflexão especular (highlight)<br />
E apresentam zonas mais brilhantes<br />
12
• Outro factor a consi<strong>de</strong>rar num mo<strong>de</strong>lo <strong>de</strong> <strong>iluminação</strong> é a<br />
- Iluminação ambiente<br />
• Uma superfície que não é directamente<br />
iluminada po<strong>de</strong> ser visível <strong>de</strong>vido à luz<br />
reflectida pelos outros objectos da cena<br />
• A luz reflectida por uma superfície é<br />
a soma das contribuições das fontes <strong>de</strong><br />
luz e da <strong>iluminação</strong> ambiente<br />
13
Mo<strong>de</strong>los <strong>de</strong> <strong>iluminação</strong> básicos<br />
• Os <strong>mo<strong>de</strong>los</strong> <strong>de</strong> <strong>iluminação</strong> sofisticados calculam com precisão os efeitos das<br />
interacções entre a energia radiante e os materiais que compõe as superfícies<br />
• Os <strong>mo<strong>de</strong>los</strong> básicos usam aproximações para representar os processos físicos<br />
que produzem os efeitos <strong>de</strong> <strong>iluminação</strong> apresentados<br />
• O mo<strong>de</strong>lo empírico <strong>de</strong>scrito a seguir produz resultados suficientemente bons<br />
para a maioria das situações e inclui:<br />
- <strong>iluminação</strong> ambiente<br />
- reflexão difusa<br />
- reflexão especular<br />
14
Iluminação ambiente<br />
• A <strong>iluminação</strong> ambiente é incluída sob a<br />
forma <strong>de</strong> um valor constante para toda a<br />
cena:<br />
I a<br />
produzindo uma <strong>iluminação</strong> uniforme para<br />
todos os objectos<br />
• Neste caso as reflexões produzidas pelas<br />
superfícies:<br />
- são in<strong>de</strong>pen<strong>de</strong>ntes da direcção <strong>de</strong> visão<br />
- são in<strong>de</strong>pen<strong>de</strong>ntes da orientação da<br />
superfície<br />
- <strong>de</strong>pen<strong>de</strong>m apenas das proprieda<strong>de</strong>s<br />
ópticas da superfície<br />
15
• A <strong>iluminação</strong> ambiente, isoladamente, produz resultados pouco<br />
interessantes na representação <strong>de</strong> uma cena<br />
I ambdiff = K d I a<br />
Apenas <strong>iluminação</strong> ambiente<br />
16
Reflexão difusa<br />
• Consi<strong>de</strong>ra-se que a luz inci<strong>de</strong>nte é espalhada com igual intensida<strong>de</strong> em todas<br />
as direcções, in<strong>de</strong>pen<strong>de</strong>ntemente da direcção <strong>de</strong> visão<br />
• As superfícies com estas características chamam-se reflectores Lambertianos<br />
ou reflectores difusos i<strong>de</strong>ais<br />
• Esta reflexão po<strong>de</strong> ser calculada pela Lei <strong>de</strong> Lambert:<br />
Intensida<strong>de</strong><br />
α<br />
Energia radiante por un. <strong>de</strong> tempo<br />
área projectada<br />
cos Φ N<br />
dA cos ΦN<br />
= const.<br />
17
• Em geral, inclui-se pelo menos uma fonte <strong>de</strong><br />
luz (frequentemente no ponto <strong>de</strong> vista)<br />
• Neste caso, a quantida<strong>de</strong> <strong>de</strong> luz inci<strong>de</strong>nte<br />
<strong>de</strong>pen<strong>de</strong> da orientação da superfície em<br />
relação à direcção da fonte luminosa<br />
• Uma superfície que é perpendicular à direcção<br />
da luz, é mais iluminada que uma superfície<br />
com igual área mas oblíqua<br />
• Este efeito po<strong>de</strong> ser observado variando a<br />
orientação <strong>de</strong> uma folha <strong>de</strong> papel branco em<br />
relação à direcção da luz<br />
18
• Sendo θ o ângulo <strong>de</strong> incidência (entre a direcção<br />
da luz e a normal à superfície)<br />
• A quantida<strong>de</strong> <strong>de</strong> luz reflectida <strong>de</strong> modo difuso por<br />
uma superfície, correspon<strong>de</strong>nte a uma fonte <strong>de</strong> luz I l,<br />
é:<br />
• Po<strong>de</strong>-se exprimir em função dos vectores unitários:<br />
N normal à superfície<br />
L direcção <strong>de</strong> uma fonte <strong>de</strong> luz<br />
se<br />
se<br />
Área projectada<br />
19
Reflexão difusa numa esfera iluminada por uma fonte pontual<br />
branca com 0< K d
Iluminação<br />
ambiente<br />
Reflexão difusa<br />
21
Reflexão especular e o mo<strong>de</strong>lo <strong>de</strong> Phong<br />
• Os pontos brilhantes, reflexões especulares ou highlights, que se vêm nas<br />
superfícies brilhantes resultam da reflexão quase total da luz em áreas<br />
concentradas<br />
• O ângulo <strong>de</strong> reflexão especular é igual ao<br />
ângulo <strong>de</strong> incidência (em relação à normal)<br />
• R é o vector unitário correspon<strong>de</strong>nte à direcção<br />
da reflexão especular i<strong>de</strong>al<br />
• V é o vector unitário na direcção do ponto <strong>de</strong> vista<br />
• Um reflector i<strong>de</strong>al reflecte apenas na direcção da reflexão especular<br />
(apenas se vê reflexão quando V e R coinci<strong>de</strong>m Φ= 0)<br />
22
• Objectos que não sejam reflectores i<strong>de</strong>ais apresentam reflexões especulares<br />
numa gama finita <strong>de</strong> direcções em torno do vector R<br />
• As superfícies mais brilhantes têm uma gama<br />
<strong>de</strong> direcções <strong>de</strong> reflexão mais estreita<br />
• O mo<strong>de</strong>lo <strong>de</strong> reflexão especular <strong>de</strong> Phong<br />
estabelece, empiricamente, que a intensida<strong>de</strong><br />
das reflexões especulares é proporcional ao<br />
Em que W(θ) é o coeficiente <strong>de</strong> reflexão especular<br />
23
Com reflexão difusa Com reflexão difusa e especular<br />
24
Superfície menos brilhante<br />
Superfície mais brilhante<br />
25
Variação <strong>de</strong> W(θ) para diferentes materiais<br />
como função do ângulo <strong>de</strong> incidência<br />
26
• Po<strong>de</strong>-se calcular cos Φ a partir do produto escalar dos versores V∙R<br />
• Não existem reflexões especulares quando:<br />
- A fonte <strong>de</strong> luz está atrás da superfície<br />
- V e L “estão do mesmo lado” da normal N<br />
• Assim, assumindo que o coeficiente <strong>de</strong> reflexão especular é constante para<br />
cada material, po<strong>de</strong>mos <strong>de</strong>terminar a intensida<strong>de</strong> da reflexão especular num<br />
ponto da superfície <strong>de</strong>vida a uma fonte <strong>de</strong> luz:<br />
cos Φ<br />
R do lado oposto a V<br />
e<br />
ou<br />
Fonte <strong>de</strong> luz atrás da superfície<br />
27
Reflexões especulares provocadas por uma única fonte luminosa,<br />
para vários parâmetros especulares<br />
28
Sem <strong>iluminação</strong> ambiente, uma fonte <strong>de</strong> luz move-se em torno da esfera<br />
29
Reflexões difusas e especulares<br />
• Quando existe uma única fonte <strong>de</strong> luz pontual, a combinação dos três<br />
efeitos:<br />
- <strong>iluminação</strong> ambiente<br />
- reflexão difusa<br />
- reflexão especular<br />
• Quando existem múltiplas fontes <strong>de</strong> luz:<br />
Múltiplas fontes <strong>de</strong> várias cores:<br />
Por vezes utiliza-se o halfway vector H (entre L e V) como<br />
aproximação <strong>de</strong> R numa versão do mo<strong>de</strong>lo <strong>de</strong> Phong mais<br />
simples <strong>de</strong> calcular para superfícies não planas (com N variável)<br />
30
Consi<strong>de</strong>rações quanto à cor<br />
• Quando se usa o mo<strong>de</strong>lo RGB, a intensida<strong>de</strong> é especificada no mo<strong>de</strong>lo <strong>de</strong><br />
<strong>iluminação</strong> como um vector com três elementos:<br />
• O mesmo para os coeficientes:<br />
• Por exemplo a componente azul das reflexões difusas será:<br />
• É possível usar outros <strong>mo<strong>de</strong>los</strong> <strong>de</strong> cor (por exemplo CMY)<br />
31
• No mo<strong>de</strong>lo <strong>de</strong> Phong original Ks é constante<br />
e in<strong>de</strong>pen<strong>de</strong>nte da cor da superfície<br />
• O que provoca reflexões com a cor da fonte e<br />
dá um aspecto <strong>de</strong> plástico aos objectos<br />
• Existem <strong>mo<strong>de</strong>los</strong> <strong>de</strong> <strong>iluminação</strong> mais<br />
sofisticados, que permitem obter imagens<br />
mais realistas <strong>de</strong> outros tipos <strong>de</strong> materiais<br />
Imagens obtidas com <strong>mo<strong>de</strong>los</strong><br />
<strong>de</strong> <strong>iluminação</strong> mais sofisticados<br />
32
Mo<strong>de</strong>lo <strong>de</strong> <strong>iluminação</strong> mais sofisticado<br />
Cook and Torrence, 1982<br />
33
OpenGL (Pré-3.1) – Lighting<br />
• É usado o mo<strong>de</strong>lo <strong>de</strong> <strong>iluminação</strong> <strong>de</strong> Phong<br />
• As características das fontes <strong>de</strong> luz e as proprieda<strong>de</strong>s dos materiais<br />
são expressas usando o mo<strong>de</strong>lo RGB ou RGBA<br />
– Luz emitida ou reflectida<br />
– Coeficientes <strong>de</strong> reflexão ambiente, difusa e especular<br />
• Po<strong>de</strong>m ser <strong>de</strong>finidas várias fontes <strong>de</strong> luz, controladas <strong>de</strong> modo<br />
in<strong>de</strong>pen<strong>de</strong>nte.<br />
• Se <strong>de</strong>sejado, o programador po<strong>de</strong> <strong>de</strong>senvolver e usar um mo<strong>de</strong>lo<br />
mais sofisticado !!<br />
• Mas terá <strong>de</strong> efectuar todos os cálculos necessários !!<br />
34
OpenGL (Pré-3.1) – Lighting<br />
• Passos fundamentais:<br />
– Associar um “vector normal” a cada vértice, que <strong>de</strong>termina a sua<br />
orientação relativamente às fontes <strong>de</strong> luz.<br />
• Como fazer ?<br />
• Representação <strong>de</strong> poliedros vs. aproximação <strong>de</strong> superfícies curvas<br />
– Criar, <strong>de</strong>finir as suas proprieda<strong>de</strong>s e posicionar as fontes <strong>de</strong> luz<br />
– Definir as proprieda<strong>de</strong>s dos materiais que constituem os vários<br />
objectos da cena<br />
– Estabelecer algumas proprieda<strong>de</strong>s do mo<strong>de</strong>lo <strong>de</strong> <strong>iluminação</strong><br />
• Distância ao observador<br />
• Iluminação ambiente global<br />
• …<br />
35
OpenGL (Pré-3.1) – Lighting Mo<strong>de</strong>l<br />
• Iluminação ambiente global<br />
GLfloat lmo<strong>de</strong>l_ambient[] = { 0.2, 0.2, 0.2, 1.0};<br />
glLightMo<strong>de</strong>lfv( GL_LIGHT_MODEL_AMBIENT,<br />
lmo<strong>de</strong>l_ambient );<br />
• Distância ao observador<br />
glLightMo<strong>de</strong>li( GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE );<br />
glLightMo<strong>de</strong>li( GL_LIGHT_MODEL_LOCAL_VIEWER,<br />
GL_FALSE );<br />
• Activar / Desactivar<br />
glEnable( GL_LIGHTING );<br />
Default! Porquê?<br />
36
OpenGL (Pré-3.1) – Light Sources<br />
• Exemplo: fonte <strong>de</strong> luz pontual<br />
GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };<br />
GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };<br />
GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };<br />
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };<br />
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);<br />
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);<br />
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);<br />
glLightfv(GL_LIGHT0, GL_POSITION, light_position);<br />
glEnable( GL_LIGHT0 );<br />
37
OpenGL (Pré-3.1) – Material Properties<br />
• Diferentes proprieda<strong>de</strong>s / coeficientes<br />
GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 };<br />
GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 };<br />
GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0<br />
};<br />
GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 };<br />
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };<br />
GLfloat no_shininess[] = { 0.0 };<br />
GLfloat low_shininess[] = { 5.0 };<br />
GLfloat high_shininess[] = { 100.0 };<br />
GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0};<br />
38
OpenGL (Pré-3.1) – Material Properties<br />
• Reflexão difusa e especular, com elevado coeficiente <strong>de</strong><br />
Phong<br />
glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);<br />
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);<br />
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);<br />
glMaterialfv(GL_FRONT, GL_SHININESS,<br />
high_shininess);<br />
glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);<br />
39
OpenGL (Pré-3.1) - Shading<br />
• Cor atribuída às primitivas (segmentos <strong>de</strong> recta e<br />
polígonos)<br />
– Constante (Flat-Shading), usando a cor atribuída a um dos<br />
vértices (qual?) da primitiva<br />
glSha<strong>de</strong>Mo<strong>de</strong>l( GL_FLAT );<br />
– Determinada por interpolação (Gouraud Shading) – Default !<br />
glSha<strong>de</strong>Mo<strong>de</strong>l( GL_SMOOTH );<br />
• Consultar “OpenGL – The Red Book” !!<br />
40
OpenGL – Material Properties<br />
• Bules <strong>de</strong> diferentes<br />
“materiais”:<br />
– Esmeralda, ja<strong>de</strong>, …<br />
– Latão, bronze, …<br />
– Plástico<br />
– Borracha<br />
[OpenGL – The Red Book]<br />
41
OpenGL – Lighting<br />
• E, hoje em dia, como fazer?<br />
• Que cálculos são efectuados pela aplicação?<br />
• Que cálculos são efectuados pelos sha<strong>de</strong>rs?<br />
• Per vertex vs. per fragment shading<br />
42
OpenGL – Lighting<br />
• Calcular na aplicação e/ou enviar atributos aos sha<strong>de</strong>rs<br />
– Proprieda<strong>de</strong>s dos materiais<br />
– Vectores normais<br />
– Proprieda<strong>de</strong>s das fontes luz<br />
• Usar vectores unitários !!<br />
– Cuidado com as transformações aplicadas !!<br />
– GLSL normalization function<br />
• Efectuar produtos escalares !!<br />
43
OpenGL – Light Sources<br />
• Exemplo: fonte <strong>de</strong> luz pontual<br />
vec4 diffuse0 = vec4(1.0, 0.0, 0.0, 1.0);<br />
vec4 ambient0 = vec4(1.0, 0.0, 0.0, 1.0);<br />
vec4 specular0 = vec4(1.0, 0.0, 0.0, 1.0);<br />
vec4 light0_pos = vec4(1.0, 2.0, 3.0, 0.0);<br />
44
OpenGL – Material Properties<br />
• Reflexão difusa e especular, com elevado coeficiente <strong>de</strong><br />
Phong<br />
vec4 ambient = vec4(0.2, 0.2, 0.2, 1.0);<br />
vec4 diffuse = vec4(1.0, 0.8, 0.0, 1.0);<br />
vec4 specular = vec4(1.0, 1.0, 1.0, 1.0);<br />
GLfloat shine = 100.0<br />
45
OpenGL – Per Vertex Shading<br />
• Alternativas<br />
– A aplicação <strong>de</strong>termina a cor (sha<strong>de</strong>) <strong>de</strong> cada<br />
vértice da malha poligonal<br />
– E envia-a ao vertex sha<strong>de</strong>r<br />
• OU<br />
– A aplicação envia todos os parâmetros para o<br />
vertex sha<strong>de</strong>r<br />
– Este calcula a cor (sha<strong>de</strong>) para cada vértice<br />
46
OpenGL – Per Vertex Shading<br />
• Smooth Shading → Default<br />
– Cor interpolada ao longo <strong>de</strong> cada primitiva<br />
– Se passada ao fragment sha<strong>de</strong>r como varying<br />
• Flat Shading<br />
– Cor constante ao longo <strong>de</strong> cada primitiva<br />
– Se passada ao fragment sha<strong>de</strong>r como uniform<br />
47
OpenGL – Per Vertex Shading<br />
// vertex sha<strong>de</strong>r<br />
in vec4 vPosition;<br />
in vec3 vNormal;<br />
out vec4 color; //vertex sha<strong>de</strong><br />
// light and material properties<br />
uniform vec4 AmbientProduct, DiffuseProduct, SpecularProduct;<br />
uniform mat4 Mo<strong>de</strong>lView;<br />
uniform mat4 Projection;<br />
uniform vec4 LightPosition;<br />
uniform float Shininess;<br />
E. Angel and D. Shreiner: Interactive Computer Graphics 6E © Addison-Wesley 2012<br />
48
OpenGL – Per Vertex Shading<br />
void main()<br />
{<br />
// Transform vertex position into eye coordinates<br />
vec3 pos = (Mo<strong>de</strong>lView * vPosition).xyz;<br />
vec3 L = normalize( LightPosition.xyz - pos );<br />
vec3 E = normalize( -pos );<br />
vec3 H = normalize( L + E );<br />
// Transform vertex normal into eye coordinates<br />
vec3 N = normalize( Mo<strong>de</strong>lView*vec4(vNormal, 0.0) ).xyz;<br />
49
OpenGL – Per Vertex Shading<br />
}<br />
// Compute terms in the illumination equation<br />
vec4 ambient = AmbientProduct;<br />
float Kd = max( dot(L, N), 0.0 );<br />
vec4 diffuse = Kd*DiffuseProduct;<br />
float Ks = pow( max( dot(N, H), 0.0), Shininess );<br />
vec4 specular = Ks * SpecularProduct;<br />
if( dot(L, N) < 0.0 ) specular = vec4(0.0, 0.0, 0.0, 1.0);<br />
gl_Position = Projection * Mo<strong>de</strong>lView * vPosition;<br />
color = ambient + diffuse + specular;<br />
color.a = 1.0;<br />
50
OpenGL – Per Vertex Shading<br />
// fragment sha<strong>de</strong>r<br />
in vec4 color;<br />
void main()<br />
{<br />
}<br />
gl_FragColor = color;<br />
51
Transparência<br />
• Um objecto transparente <strong>de</strong>ixa ver os<br />
objectos que estão atrás<br />
• Há também objectos translúcidos<br />
que transmitem a luz mas difun<strong>de</strong>m-na<br />
em todas as direcções<br />
• É possível mo<strong>de</strong>lar a transparência<br />
com graus <strong>de</strong> realismo diferentes:<br />
- sem refracção (mudança <strong>de</strong><br />
direcção dos raios luminosos)<br />
- com refracção<br />
Objecto<br />
transparente<br />
52
• Para se obter maior realismo é necessário<br />
consi<strong>de</strong>rar a refracção da luz<br />
• A direcção da luz refractada é diferente da luz<br />
inci<strong>de</strong>nte<br />
• O ângulo <strong>de</strong> refracção varia com:<br />
- os índices <strong>de</strong> refracção dos meios<br />
- o ângulo do raio inci<strong>de</strong>nte<br />
• De acordo com a Lei <strong>de</strong> Snell:<br />
Para a fonte <strong>de</strong> luz<br />
ar<br />
vidro<br />
Direcção <strong>de</strong><br />
reflexão<br />
Direcção<br />
<strong>de</strong> refracção<br />
ar<br />
O raio emergente é paralelo ao<br />
raio inci<strong>de</strong>nte<br />
53
• O índice <strong>de</strong> refracção varia com vários factores:<br />
- l da luz<br />
- temperatura do material<br />
- direcção (em materiais anisotrópicos)<br />
- …<br />
• Mas em geral po<strong>de</strong>-se usar um valor médio<br />
• Índices <strong>de</strong> refracção para vários materiais:<br />
vácuo / ar - 1.00<br />
gelo - 1.31<br />
água - 1.33<br />
vidro vulgar - 1.52<br />
quartzo - 1.54<br />
Para a fonte <strong>de</strong> luz<br />
Direcção <strong>de</strong><br />
reflexão<br />
Direcção<br />
<strong>de</strong> refracção<br />
54
• Po<strong>de</strong>-se calcular T (vector unitário na direcção<br />
<strong>de</strong> refracção):<br />
N – vector unitário normal à superfície<br />
L – vector unitário na direcção da fonte luminosa<br />
• O efeito geral da passagem <strong>de</strong> luz através <strong>de</strong> uma<br />
lâmina <strong>de</strong> vidro é um raio emergente paralelo ao<br />
inci<strong>de</strong>nte<br />
ar<br />
vidro<br />
55<br />
ar<br />
O raio emergente é<br />
paralelo ao raio inci<strong>de</strong>nte
• Na maioria das aplicações usam-se aproximações menos realistas e<br />
mais rápidas<br />
• Uma aproximação mais simples ignora as mudanças<br />
<strong>de</strong> direcção dos raios transmitidos entre materiais<br />
• Esta aproximação:<br />
- é rápida<br />
- produz resultados aceitáveis<br />
para superfícies poligonais transparentes <strong>de</strong> pequena espessura<br />
Objecto<br />
transparente<br />
Objecto<br />
no fundo<br />
Plano <strong>de</strong> projecção<br />
56
• Po<strong>de</strong>-se combinar a luz transmitida através <strong>de</strong><br />
uma superfície transparente com a luz reflectida<br />
pela superfície:<br />
- coeficiente <strong>de</strong> transparência [0, 1]<br />
1- totalmente transparente<br />
0- totalmente opaco<br />
• Po<strong>de</strong>-se também <strong>de</strong>finir o coeficiente<br />
<strong>de</strong> opacida<strong>de</strong>:<br />
Objecto<br />
transparente<br />
Objecto no<br />
fundo<br />
Plano <strong>de</strong> projecção<br />
transparência sem refracção<br />
57
Sombras<br />
• Po<strong>de</strong>m usar-se <strong>métodos</strong> <strong>de</strong> <strong>de</strong>tecção<br />
<strong>de</strong> visibilida<strong>de</strong> para <strong>de</strong>tectar zonas que<br />
não são iluminadas por fontes luminosas<br />
• Po<strong>de</strong>-se <strong>de</strong>terminar as faces<br />
da cena que não são visíveis<br />
<strong>de</strong> cada fonte luminosa<br />
• Depois aplica-se o mo<strong>de</strong>lo <strong>de</strong><br />
<strong>iluminação</strong> usando apenas as<br />
fontes que contribuem para a<br />
<strong>iluminação</strong> <strong>de</strong> cada face<br />
Direcção da luz<br />
inci<strong>de</strong>nte<br />
58
Exemplo: Sombras <strong>de</strong>vidas<br />
a uma fonte <strong>de</strong> luz a duas fontes <strong>de</strong> luz<br />
59
Métodos <strong>de</strong> Ren<strong>de</strong>ring <strong>de</strong> Polígonos (Shading)<br />
• Os cálculos da intensida<strong>de</strong> obtidos a partir <strong>de</strong> um mo<strong>de</strong>lo <strong>de</strong> <strong>iluminação</strong><br />
po<strong>de</strong>m ser aplicados ao ren<strong>de</strong>ring <strong>de</strong> uma superfície <strong>de</strong> formas diferentes:<br />
- Calcular a intensida<strong>de</strong> <strong>de</strong> todos os pixels correspon<strong>de</strong>ntes à superfície<br />
projectada<br />
- Calcular a intensida<strong>de</strong> <strong>de</strong> alguns pixels criteriosamente escolhidos e obter<br />
um valor aproximado para os restantes<br />
• As bibliotecas gráficas usam, em geral, algoritmos scan-line e calculam a<br />
intensida<strong>de</strong> nos vértices dos polígonos, usando o mo<strong>de</strong>lo <strong>de</strong> <strong>iluminação</strong><br />
- Muitas interpolam as intensida<strong>de</strong>s ao longo das scan-lines<br />
- Outras usam <strong>métodos</strong> mais precisos<br />
60
Métodos <strong>de</strong> Ren<strong>de</strong>ring <strong>de</strong> Polígonos (Shading)<br />
- Os <strong>métodos</strong> mais comuns são:<br />
Método <strong>de</strong> intensida<strong>de</strong> constante, uniforme ou flat-shading<br />
Método <strong>de</strong> Gouraud<br />
Método <strong>de</strong> Phong<br />
61
Surface ren<strong>de</strong>ring <strong>de</strong> intensida<strong>de</strong> constante (Flat-Shading)<br />
• Atribui a mesma cor a todos os pixels <strong>de</strong> cada polígono<br />
• Usa o mo<strong>de</strong>lo <strong>de</strong> <strong>iluminação</strong> para calcular as componentes RGB <strong>de</strong> um<br />
pixel correspon<strong>de</strong>nte a um dado ponto <strong>de</strong> cada polígono (vértice, centrói<strong>de</strong>,<br />
etc.)<br />
• É simples e rápido !<br />
• A<strong>de</strong>quado a alguns casos simples e útil para obter<br />
a aparência geral dum objecto curvo<br />
62
• Em geral, o flat-shading é a<strong>de</strong>quado quando se verificam todas as<br />
condições seguintes:<br />
- O polígono é uma face <strong>de</strong> um poliedro e não uma região <strong>de</strong> uma<br />
superfície curva aproximada por uma malha poligonal<br />
- Todas as fontes <strong>de</strong> luz estão muito afastadas: “fontes no infinito”<br />
(N.L constante para todo polígono)<br />
- O observador (“viewpoint”) está muito afastado<br />
(V.R constante para todo o polígono)<br />
• Caso contrário, a aproximação é razoável se o objecto for aproximado por<br />
uma malha com polígonos muito pequenos<br />
63
Método <strong>de</strong> Gouraud ou <strong>de</strong> interpolação <strong>de</strong> intensida<strong>de</strong>s<br />
• Calcula a intensida<strong>de</strong> nos vértices e interpola linearmente ao longo das faces<br />
poligonais <strong>de</strong> um objecto<br />
• Foi <strong>de</strong>senvolvido, por Henri Gouraud, para fazer o ren<strong>de</strong>ring <strong>de</strong> um objecto curvo<br />
aproximado por uma malha poligonal<br />
• Faz uma transição suave dos valores <strong>de</strong> intensida<strong>de</strong> entre polígonos adjacentes<br />
estimando, para cada vértice, um vector normal “médio”<br />
64
• Cada face poligonal <strong>de</strong> uma malha que aproxima uma superfície curva é<br />
processada da seguinte forma:<br />
1 - <strong>de</strong>terminar o vector normal “médio” para cada vértice do polígono<br />
2 - aplicar um mo<strong>de</strong>lo <strong>de</strong> <strong>iluminação</strong> em cada vértice para obter a<br />
intensida<strong>de</strong> nessa posição<br />
3 - interpolar linearmente as intensida<strong>de</strong>s dos vértices ao longo da área<br />
projectada do polígono<br />
1 2 3<br />
65
Malha poligonal que<br />
aproxima o objecto<br />
Ren<strong>de</strong>ring com o<br />
flat-shading<br />
Transições mais suaves<br />
Ren<strong>de</strong>ring com o<br />
método <strong>de</strong> Gouraud<br />
66
Método <strong>de</strong> Phong ou <strong>de</strong> interpolação <strong>de</strong> normais<br />
• É mais sofisticado que o anterior, foi <strong>de</strong>senvolvido, por Phong Bui Tuong<br />
(1975)<br />
• Interpola linearmente os vectores normais (em vez <strong>de</strong> os valores <strong>de</strong><br />
intensida<strong>de</strong>) e aplica repetidamente o mo<strong>de</strong>lo <strong>de</strong> <strong>iluminação</strong><br />
• Resulta em imagens mais realistas com:<br />
– Melhores reflexões especulares<br />
– Bandas <strong>de</strong> Mach menos acentuadas<br />
– Mas é mais pesado computacionalmente<br />
67
• Cada secção poligonal <strong>de</strong> uma malha que aproxima uma superfície curva é<br />
processada da seguinte forma:<br />
1 - <strong>de</strong>terminar o vector normal “médio” para cada vértice do polígono<br />
2 - interpolar linearmente as normais aos vértices ao longo da área<br />
projectada do polígono<br />
3 - aplicar um mo<strong>de</strong>lo <strong>de</strong> <strong>iluminação</strong> ao longo das scan lines<br />
para calcular a intensida<strong>de</strong> luminosa usando as normais interpoladas<br />
Gouraud<br />
Phong<br />
68
Flat<br />
Phong<br />
Gouraud<br />
Highlights melhorados<br />
Bandas <strong>de</strong> Mach menos acentuadas<br />
69
OpenGL – Per Fragment Shading<br />
// vertex sha<strong>de</strong>r<br />
in vec4 vPosition;<br />
in vec3 vNormal;<br />
// output values that will be interpolated per-fragment<br />
out vec3 fN;<br />
out vec3 fE;<br />
out vec3 fL;<br />
uniform mat4 Mo<strong>de</strong>lView;<br />
uniform vec4 LightPosition;<br />
uniform mat4 Projection;<br />
E. Angel and D. Shreiner: Interactive Computer Graphics 6E © Addison-Wesley 2012<br />
70
OpenGL – Per Fragment Shading<br />
void main()<br />
{<br />
}<br />
fN = vNormal;<br />
fE = vPosition.xyz;<br />
fL = LightPosition.xyz;<br />
if( LightPosition.w != 0.0 ) {<br />
}<br />
fL = LightPosition.xyz - vPosition.xyz;<br />
gl_Position = Projection*Mo<strong>de</strong>lView*vPosition;<br />
71
OpenGL – Per Fragment Shading<br />
// fragment sha<strong>de</strong>r<br />
// per-fragment interpolated values from the vertex sha<strong>de</strong>r<br />
in vec3 fN;<br />
in vec3 fL;<br />
in vec3 fE;<br />
uniform vec4 AmbientProduct, DiffuseProduct, SpecularProduct;<br />
uniform mat4 Mo<strong>de</strong>lView;<br />
uniform vec4 LightPosition;<br />
uniform float Shininess;<br />
72
OpenGL – Per Fragment Shading<br />
void main()<br />
{<br />
// Normalize the input lighting vectors<br />
vec3 N = normalize(fN);<br />
vec3 E = normalize(fE);<br />
vec3 L = normalize(fL);<br />
vec3 H = normalize( L + E );<br />
vec4 ambient = AmbientProduct;<br />
73
OpenGL – Per Fragment Shading<br />
}<br />
float Kd = max(dot(L, N), 0.0);<br />
vec4 diffuse = Kd*DiffuseProduct;<br />
float Ks = pow(max(dot(N, H), 0.0), Shininess);<br />
vec4 specular = Ks*SpecularProduct;<br />
// discard the specular highlight if the light's behind the vertex<br />
if( dot(L, N) < 0.0 )<br />
specular = vec4(0.0, 0.0, 0.0, 1.0);<br />
gl_FragColor = ambient + diffuse + specular;<br />
gl_FragColor.a = 1.0;<br />
74
Métodos <strong>de</strong> <strong>iluminação</strong> global:<br />
Exemplos <strong>de</strong> imagens produzidas com ray-tracing<br />
75
Métodos <strong>de</strong> <strong>iluminação</strong> global<br />
• Se se consi<strong>de</strong>rar a linha <strong>de</strong> vista a partir<br />
<strong>de</strong> um pixel no plano <strong>de</strong> visualização até<br />
à cena, é possível <strong>de</strong>terminar que<br />
objectos são intersectados<br />
• Este método chama-se ray casting<br />
• Baseia-se nos <strong>métodos</strong> <strong>de</strong> óptica geométrica que <strong>de</strong>terminam os percursos<br />
dos raios <strong>de</strong> luz<br />
• Quando se usa projecção perspectiva, os raios divergem do centro <strong>de</strong><br />
projecção, passam pelo centro <strong>de</strong> um pixel e continuam através da cena<br />
76
• Adicionalmente, po<strong>de</strong>m lançar-se raios secundários reflectidos ou transmitidos<br />
• No caso <strong>de</strong> haver raios secundários<br />
chama-se ray-tracing<br />
Centro <strong>de</strong> projecção<br />
Pixel no plano <strong>de</strong><br />
visualização<br />
Raios secundários<br />
77
2 3<br />
4<br />
Pixels com intensida<strong>de</strong> não atribuída (a cinzento)<br />
Ray tracing com profundida<strong>de</strong><br />
variável: 2, 3 e 4 raios secundários<br />
78
Maior transparência<br />
50%<br />
transparente<br />
100%<br />
opaca<br />
100%<br />
transparente<br />
100%<br />
reflectora<br />
Maior reflexão<br />
79
Principal bibliografia<br />
• Hearn, D., P. Baker, Computer Graphics with OpenGL, Addison Wesley,<br />
2004<br />
• Hearn, D., P. Baker, Computer Graphics, 2nd. Ed., Prentice Hall, 1994<br />
• Foley, J., S. Van Dam, S. Feiner, J. Hughes, Computer Graphics, Principles<br />
and Applications, 2nd. Ed., Addison Wesley, 1991<br />
• Watt, A., F. Policarpo, The Computer Image, Addison Wesley, 1998<br />
80