66
Computação Gráfica I Computação Gráfica I CRAb – Grupo de Computação Gráfica Departamento de Computação UFC

Computação Gráfica I - Inícioesdras/ck090_2007/notasdeaula/Capitulo06.pdf · • Eficiência computacional • Bom realismo sob –Condições de iluminação variadas 19 –Materiais

  • Upload
    vunhu

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

Computação Gráfica IComputação Gráfica I

CRAb – Grupo de Computação Gráfica

Departamento de ComputaçãoUFC

Objetivos

• Estudar – equipamentos, técnicas de programação e conceitos matemáticos

• Para

2

• Para– representação, manipulação e projeção de objetos bi- e tridimensionais– aplicar a problemas específicos

Sumário do Curso

• Sistemas Gráficos e Modelos• Programação Gráfica• Input e Interação• Objetos Geométricos e Transformações

3

• Objetos Geométricos e Transformações• Visualização• Pintura• Técnicas Discretas• Implementação de um Renderizador

Pintura (Shading)Pintura (Shading)

6.1 Luz e Matéria

• Superfície pode ser

– Emissora de luz

• Superfície de uma lâmpada

5

– Refletora de luz

– Emissora e refletora de luz

• Ferro em brasa

6.1 Luz e Matéria

• Luz chegando a uma superfície é resultado de múltiplas interações

6

6.1 Luz e Matéria

• Equação de renderização

– i(p, p’): intensidade sai de p’ chega a p

+= ∫

"

")",'()",',()',()',()',(

P

PpppppppppppS

dSii ρευ

7

– i(p, p’): intensidade sai de p’ chega a p• εεεε(p,p’): parte emitida diretamente por p’• i(p’, p”): intensidade de p” chegando a p’• ρρρρ(p, p’, p”): função de reflexão de p’

– νννν(p, p’): função de oclusão• = 0 se objeto opaco estiver no caminho• = 1/r2 fator de atenuação da distância

6.1 Luz e Matéria

• Classificação da interação luz/material– Superfícies especulares

– Superfícies difusas

8

– Superfícies difusas

– Superfícies translúcidas

6.2 Fonte Luminosa (A25)

6.2.0 Introdução– Função de iluminação: I(x, y, z, θθθθ, φφφφ, λλλλ)• x, y, z: posição da fonte• (θθθθ, φφφφ): direção de emissão

9

• λλλλ : comprimento de onda emitido

– Contribuição total da fonte para iluminação da superfície

6.2 Fonte Luminosa (A25)

– Tipos de fontes

• Luz ambiente

• Luz pontual

10

• Luz spot

• Luz distante

6.2 Fonte Luminosa (A25)

6.2.1 Fontes de cores– Modelo do sistema visual humano• Modelo tricromático (R, G, B)

– Utilizar a função de luminância

11

– Utilizar a função de luminância

=

b

g

r

I

I

I

I

6.2 Fonte Luminosa (A25)

6.2.2 Luz ambiente– Representa a iluminação uniforme do

ambiente • Cozinhas, salas de aula, dias nublados

12

– Utilizar a intensidade

=

ab

ag

ar

a

I

I

I

I

6.2 Fonte Luminosa

6.2.3 Fonte pontual– Emite luz uniformemente em todas as

direções– Tem Intensidade e localização

13

– Tem Intensidade e localização

( )( )( )( )

( )02

0

0

0

0

0

0

1),(

I

I

I

pIpp

ppi

p

p

p

pI

−=

=

b

g

r

6.2 Fonte Luminosa

6.2.3 Fonte pontual ...– Gera sombras duras– Fonte de tamanho finito gera regiões de

penumbra e umbra

14

penumbra e umbra

6.2 Fonte Luminosa

6.2.3 Fonte pontual ...– Atenuar efeito de iluminação com a

distância• Utilizar fator

15

1/(a + b*d + c*d2)

6.2 Fonte Luminosa (A25)

6.2.4 Spotlights– Uniforme: Não há diferença de

intensidade na área iluminada• Exceto pela distância do ponto iluminado à

fonte (d1 e d2)

16

fonte (d1 e d2)

6.2 Fonte Luminosa

6.2.4 Spotlights– Não-uniforme: Intensidade concentra na

direção l l l l e decai com o afastamento angular dessa direção• I = (cos φφφφ)e= (l l l l . s) e

17

φ

• I = (cos φφφφ)e= (l l l l . s) e

llll s

θ

6.2 Fonte Luminosa (A25)

6.2.5 Fontes luminosas distantes– Importa apenas a direção de iluminação e intensidade de iluminação

D( ) DI

18

D

( )( )( )( )

=

D

D

D

DI

b

g

r

I

I

I

6.3 O Modelo de Reflexão de Phong

6.3.0 Introdução– Modelo simplificado• Eficiência computacional• Bom realismo sob– Condições de iluminação variadas

19

– Condições de iluminação variadas– Materiais diferentes

• Usa 4 vetores unitários– n: normal à superfície– l: do ponto iluminado à fonte– r: reflexão de l (Euclides)– v: do ponto iluminado ao observador

6.3 O Modelo de Reflexão de Phong

• Suporta os 3 tipos de interação luz/material– Ambiente– Difusa– Especular

• Cada fonte i contém as 3 intensidades

20

• Cada fonte i contém as 3 intensidades

=

ibsigsirs

ibdigdird

ibaigaira

i

LLL

LLL

LLL

L

6.3 O Modelo de Reflexão de Phong

• As reflectividades do material j para cada um dos 3 tipos de interação– Representam quanto de uma dada componente é

refletida

jbajgajra RRR

21

=

jbsjgsjrs

jbdjgdjrd

jbajgajra

j

RRR

RRR

RRR

R

6.3 O Modelo de Reflexão de Phong

• Considerando o operador matricial @ tal que

– C = A @ B →→→→ Cij = Aij Bij (não há somatório)

– I = Ia + Id + Is = La@Ra + Ld@Rd + Ls@Rs

22

6.3 O Modelo de Reflexão de Phong

6.3.1 Reflexão ambiente– Ia = Ra La = ka La – 0 ≤≤≤≤ ka ≤≤≤≤ 1

– ka = (kar, kag, kab)

23

– ka = (kar, kag, kab)

kar= 1.0kag= 0.0kab= 0.0

Lar= 1.0Lag= 1.0Lab= 1.0

Iar= 1.0Iag= 0.0Iab= 0.0

6.3 O Modelo de Reflexão de Phong

6.3.2 Reflexão difusa– Superfícies Lambertianas

24

Superfície rugosa

6.3 O Modelo de Reflexão de Phong

– Lei de Lambert• Rd ∝∝∝∝ cos θθθθ

( ) ddd LnlkI

nl

⋅=

⋅=cosθ

25

( ) dd

d

cbaLnl

pqpq

kI ⋅

++=

2

00

q0

q0

p p

6.3 O Modelo de Reflexão de Phong

6.3.3 Reflexão especular– Intensidade na direção do observador• Decai quando φφφφ cresce:

Is = ks Ls (cos φφφφ)m

26

Is = ks Ls (r · v)m

r

v

l

φφφφ

6.3 O Modelo de Reflexão de Phong

6.3.4 Modelo completo

( ) ( )( ) aa

N

i

isisidid

ii

aia

fontes

cbaLkvrLknlLk

pqpqLkI @@@

1@

1

m

2+

⋅+⋅

+++= ∑

=

27

αααα = m

6.4 Cálculo dos Vetores

6.4.1 Vetores normais– Dada a equação do plano

unitário):( 1 onde

0...

dznynxn

DzCyBxA

zyx ==++

=+++

nn

28

222

222222222,,

unitário):( 1 onde

CBA

Dd

CBA

Cn

CBA

Bn

CBA

An

dznynxn

zyx

zyx

++−=

++=

++=

++=

==++ nn

6.4 Cálculo dos Vetores

– Dados 3 pontos em um plano

( ) ( )0201 ppppn −×−=

p2

n

29

p0

p2

p1

Observação: O vetor obtido precisa ser normalizado

6.4 Cálculo dos Vetores

– Dada a equação implícita da superfície

∂∂

=−−+−+−=

∂∂

=

)(2

0)()()(),,(0),,( 2222

c

ccc

xxfx

f

rzzyyxxzyxf

fx

f

zyxf

30

Observação: O vetor obtido pelo gradiente dafunção precisa ser normalizado

=

∂∂

∂=∇=

∂∂

∂=∇=

)(2

)(2

)(2

c

c

c

zz

yy

xx

z

f

y

ff

z

f

y

ff nn

Esfera em (xc,yc,zc)

6.4 Cálculo dos Vetores

– Dada a equação paramétrica da superfície

vufv

vuf

vufu

vuf

vuf

vuf

y

x

vu

y

x

y

x

x

∂∂

=∂

∂∂

=∂

=

=

pp

fp

),(

),(

e ,),(

),(

),(

),(

),(

31

vu

v

vufv

vuf

v

u

vufu

vuf

uvuf

vuf

z

y

z

y

z

y

z

y

∂×

∂=

∂∂

∂=

∂∂

∂=

∂⇒

=

ppn

pp

),(

),( e ,

),(

),(

),(

),(

Observação: O vetor n precisa ser normalizado

6.4 Cálculo dos Vetores

– Equação paramétrica da esfera de r=1 centrada na origem• -ππππ/2 < u < ππππ/2• -ππππ < v < ππππ

z

yu

v

p

32

xv

( ) ( )( ) ( )

( )

( ) ( )( ) ( )

( )

( ) ( )( ) ( )

( ) ( )( ) ( )( ) ( )

( ) ( )( ) ( )

( )pnp

ppn

ppp

=⇒=

=

=∂

∂×

∂=

−=∂

=∂

∂⇒

=

=

)cos(coscos

cos

)cos(

cos

coscos

cos

0

cos

coscos

e ,

cos

coscoscos

cos

2

2

u

usen

vu

vsenu

u

uusen

vu

vsenu

vu

vsenu

vu

vu

vusen

vsenusen

uusen

vu

vsenu

z

y

x

normalizado

6.4 Cálculo dos Vetores

– Especificação de um vetor normal em OpenGL• GLfloat n[3];• glNormal3f(n[0], n[1], n[2]); // nx, ny, nzou

33

ou• glNormal3fv(n); // ponteiro para of vetor n

6.4 Cálculo dos Vetores

6.4.2 Ângulo de reflexão

l r

n(l . n)

2(l . n)

34

l r

(l . n)

( )( )( )( ) lnnlr

nnllr

−⋅=⇒

⇒⋅=+

2

2

7 multiplicações5 adições

6.4 Cálculo dos Vetores

6.4.3 Uso do vetor h (Halfway)– Usado em vez de r no cálculo da reflexão

especular

vlh

+=

n hψψψψ

35

vl

vlh

+

+=

3 multiplicações5 adições1 raiz quadrada3 divisões

l

n h

r

v

φφφφ

6.4 Cálculo dos Vetores

6.4.3 Uso do vetor h (Halfway)– Só vale a pena se a fonte estiver longe e o

observador estiver longe • h é o mesmo para todo ponto do cenário

36

• r não é o mesmo para todo ponto do cenário

– Se o observador estiver no mesmo plano que contém l e n: 2ψψψψ = φφφφ• Utilizando n·h em vez de r·v com o mesmo

expoente m produz um specular hilight menor• Modificar o expoente m para m’

6.4 Cálculo dos Vetores

6.4.4 Luz transmitida– Lei de Snell

vácuono luz da velocidade

sen

sen=

l

t

t

l

η

η

θ

θ

ln

θθθθl

37

– Obter t comot = a (-l) + b (-n)t = – a l – b n||t|| = 1

i meio no luz da velocidade

vácuono luz da velocidade=iη

-nt

θθθθt

a

b

Meio l

Meio t

6.4 Cálculo dos Vetores

( )

( )

ln

⋅−=⇒⋅=+⋅

==⇒⋅=⋅

22

coscos1cos

sen

sensen1sen

t

lttl

t

l

l

ttl

bba

aa

ηη

η

ηθθθ

η

η

θ

θθθ

38

( )

( )( )

( ) ( )( ) nlnlnlt

ln

−−⋅+−=

−=

−=

−=−=

2

2

2

2

222

-11

-11cos

cos-11sen1sen1cos

t

l

t

l

t

l

t

lt

l

t

ll

t

ltt

η

η

η

η

η

η

η

ηθ

θη

ηθ

η

ηθθ

6.5 Coloração de polígonos

6.5.0 Introdução– Três maneiras de atribuir cor ponto a

ponto • Flat shading

39

• Gouraud shading• Phong shading

– Exemplo: Colorir a malha poligonal

6.5 Coloração de polígonos

6.5.1 Coloração homogênea:Flat Shading– Modelo de Phong retorna mesma

intensidade para qualquer ponto• v=constante: observador no infinito

40

• l=constante: fonte de luz no infinito• n=constante: polígono plano

– No OpenGL• glShadeModel(GL_FLAT);

6.5 Coloração de polígonos

– Inibição lateral• Propriedade do sistema visual humano• Percebe pequenas diferenças em intensidade

luminosa• Bordas fictícias são criadas: Mach bands

41

• Bordas fictícias são criadas: Mach bands

6.5 Coloração de polígonos

6.5.2 Coloração por interpolação e de Gouraud– Intensidade calculada pelo modelo de

iluminação de Phong nos vértices do polígono

42

polígono– Depois de projetados os polígonos• Pontos interiores são coloridos por

interpolação das intensidades dos vértices

– No OpenGL• glShadeModel(GL_SMOOTH);

6.5 Coloração de polígonos

– Cálculo das normais em um vértice da malha

43

4321

4321

nnnn

nnnnn

+++

+++=

6.5 Coloração de polígonos

6.5.3 Coloração de Phong– Normais são calculadas nos vértices– Polígono é projetado– Normais nos pontos interiores são

44

– Normais nos pontos interiores são interpoladas a partir das normais nos vértices

– Intensidade é calculada ponto a ponto com as normais interpoladas

6.5 Coloração de polígonos

– Utilizar interpolação bilinear

45

( ) ( )( ) ( ) DC

BA

nnn

nnn

βββα

ααα

+−=

+−=

1,

1

6.6 Aproximação de uma esfera por subdivisão recursiva

• Processo recursivo– Construir tetraedro• Quatro faces triangulares ligando 4 vértices em uma superfície esférica

– Calcular ponto central de cada face

46

– Calcular ponto central de cada face– Normalizar pontos centrais• Pontos irão para a superfície esférica

– Criar três novos triângulos ligando vértices do triângulo ao seu ponto central

6.6 Aproximação de uma esfera por subdivisão recursiva

• Processo recursivoA A

47

Código Fonte Código Exec

B C B C

AB

BC

AC

6.6 Aproximação de uma esfera por subdivisão recursiva

• Processo recursivo

A A

48

B C B C

D

6.7 Fontes Luminosas no OpenGL

• Tipos de fontes– Ambiente– Direcional (localizada no infinito)• (xd, yd, zd, 0)

– Pontual

49

– Pontual • Localizada em um ponto próximo: (xp,yp,zp,wp)• Irradia em todas as direções

– Spot• Localizad em um ponto próximo: (xs, ys, zs, ws)• Apontada em uma direção principal• Limitada lateralmente por um cone

6.7 Fontes Luminosas no OpenGL

• Número de fontes em um programa– Limitado em oito fontes• GL_LIGHT0• GL_LIGHT1

50

• GL_LIGHT2•…• GL_LIGHT7

6.7 Fontes Luminosas no OpenGL

• Definir uma fonte de luz (ex: luz 1)– Habilitar iluminação• glEnable(GL_LIGHTING);

– Especificar os valores das propriedades• GLfloat L1_ambiente[] ={0.3, 0.3, 0.3, 1.0};

51

• GLfloat L1_ambiente[] ={0.3, 0.3, 0.3, 1.0};• GLfloat L1_difusa[] ={1.0, 1.0, 1.0, 1.0};• GLfloat L1_especular[] ={1.0, 1.0, 1.0, 1.0};• GLfoat L1_posicao[] ={-2.0, 2.0, 1.0, 1.0};• GLfloat spot_dir [] ={-1.0, -1.0, 0.0};

– Utilizar os comandos do OpenGL para associar essas propriedades à GL_LIGHT1

glLightfv (GL_LIGHT1, GL_AMBIENT, L1_ambiente);glLightfv (GL_LIGHT1, GL_DIFFUSE, L1_difusa);glLightfv (GL_LIGHT1, GL_SPECULAR, L1_especular);

glLightfv (GL_LIGHT1, GL_POSITION, L1_posicao);

glLightf (GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.5);

6.7 Fontes Luminosas no OpenGL

52

glLightf (GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.5);glLightf (GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.5);glLightf (GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.2);glLightf (GL_LIGHT1, GL_SPOT_CUTOFF, 45.0);glLightfv (GL_LIGHT1, GL_SPOT_DIRECTION, spot_dir);glLightf (GL_LIGHT1, GL_SPOT_EXPONENT, 2.0);glEnable (GL_LIGHT1);

6.7 Fontes Luminosas no OpenGL

• Estabelecer um modelo de iluminação– Três componentes• Intensidade da iluminação ambiente global• Considerar o observador próximo ao cenário ou no infinito?

53

no infinito?• Cálculo da iluminação deve ser diferente para os dois lados de uma face?

– Usar o comando glLightModel*();

6.7 Fontes Luminosas no OpenGL

• Estabelecer um modelo de iluminação– Iluminação ambiente globalGLfloat luz_ambiente_global[]={0.2, 0.2, 0.2, 1.0);glLightModelfv(GL_LIGHT_MODEL_AMBIENT,

54

glLightModelfv(GL_LIGHT_MODEL_AMBIENT, luz_ambiente_global);

– Observador local ou no infinitoglLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,

GL_TRUE);Default: GL_FALSE (Observador no infinito)

6.7 Fontes Luminosas no OpenGL

• Estabelecer um modelo de iluminação– Iluminação em dois ladosglLightModeli(GL_LIGHT_MODEL_TWO_SIDE,

GL_TRUE);

55

Default: GL_FALSE (Somente uma face é iluminada)

6.8 Especificação de Materiais/OpenGL

•Utilizar o comando glMaterial*()void glMaterial{if}[v](GLenum face,

GLenum pname, TYPE param);

face: GL_FRONT, GL_BACK, GL_FRONT_AND_BACK

56

[Default]

face: GL_FRONT, GL_BACK, GL_FRONT_AND_BACK

pname: GL_AMBIENT param: (0.2, 0.2, 0.2, 1.0)GL_DIFFUSE (0.8, 0.8, 0.8, 1.0)GL_AMBIENT_AND_DIFFUSEGL_SPECULAR (0.0, 0.0, 0.0, 1.0)GL_SHININESS 0.0GL_EMISSION (0.0, 0.0, 0.0, 1.0)GL_COLOR_INDEX (0, 1, 1)

6.8 Especificação de Materiais/OpenGL

•Definir as propriedades do material iglFloat ka_i[]={0.2, 0.2, 0.2, 1.0};glFloat kd_i[]={1.0, 0.8, 0.0, 1.0};glFloat ks_i[]={1.0, 1.0, 1.0, 1.0};

•Utilizar o comando glMaterial*()

57

•Utilizar o comando glMaterial*()glMaterialfv(GL_FRONT, GL_AMBIENT, ka_i);glMaterialfv(GL_FRONT, GL_DIFFUSE, kd_i);glMaterialfv(GL_FRONT, GL_SPECULAR, ks_i);glMaterialf (GL_FRONT, GL_SHININESS, 100.0);

6.8 Especificação de Materiais/OpenGL

•Para superfícies emissoras de luzglFloat emissao[]={0.0, 0.3, 0.3, 1.0};glMaterialfv(GL_FRONT, GL_EMISSION, emissao);

58

6.8 Especificação de Materiais/OpenGL

• Aspectos de programação– Toda mudança de material implica em um grande número de chamadas a glMaterial–Melhor escrever a seguinte função para trocar o material

59

trocar o materialvoid materials(materialStruct *materials){glMaterialfv(GL_FRONT, GL_AMBIENT, materials->ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE, materials->diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, materials->specular);glMaterialf (GL_FRONT, GL_SHININESS, materials->shininess);}

6.8 Especificação de Materiais/OpenGL

• Aspectos de programaçãotypedef struct{ GLfloat ambient[4];

GLfloat diffuse[4];

60

GLfloat specular[4];GLfloat shininess[4];

} materialStruct;

6.8 Especificação de Materiais/OpenGL

• Aspectos de programação– Bronze e OuromaterialStruct brassMaterial = { 0.33, 0.22, 0.03, 1.0,

0.78, 0.57, 0.11, 1.0,0.99, 0.94, 0.81, 1.0,

61

0.99, 0.94, 0.81, 1.0,27.89};

materialStruct goldMaterial = { 0.25, 0.20, 0.07, 1.0,0.75, 0.61, 0.23, 1.0,0.63, 0.56, 0.37, 1.0,51.2};

6.9 Coloração do Modelo da Esfera

• Habilitação de propriedades e testesglEnable (GL_LIGHTING);glEnable (GL_LIGHT0);glEnable (GL_DEPTH_TEST);glPolygonMode(GL_FRONT, GL_FILL);

62

glPolygonMode(GL_FRONT, GL_FILL);

• Atribuição do material ouro• Definição da fonte de luz• Desenho da esfera Código Fonte

Código Exec

6.10 Coloração Global

• Modelo de iluminação local– Colore-se cada objeto independentemente• Fonte de luz + objeto + observador

63

Iluminação local

Iluminação global

6.10 Coloração Global

• Modelo de iluminação global– Luz que chega ao olho do observador é oriunda de múltiplas reflexões e refrações– Ray-tracing: segue raio caminho inverso

64

– Ray-tracing: segue raio caminho inverso

6.10 Coloração Global

• Modelo de iluminação global– Radiosidade: balanço de energia no ambiente define a energia em cada superfície

65

Fim do capítulo 6Fim do capítulo 6