08.05.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!