M©todos para Rendering de Superf­cie - Bem-vindo ao LCAD ... paulovic/aulas/CG/slides_novos/SCC0250... 

  • View
    221

  • Download
    1

Embed Size (px)

Text of M©todos para Rendering de Superf­cie - Bem-vindo ao LCAD ......

Mtodos para Rendering de Superfcie

Mtodos para Rendering de Superfcie

SCC0250 - Computao Grca

Prof. Fernando V. Paulovichhttp://www.icmc.usp.br/~paulovic

paulovic@icmc.usp.br

Instituto de Cincias Matemticas e de Computao (ICMC)Universidade de So Paulo (USP)

25 de abril de 2013

1 / 50

http://www.icmc.usp.br/~paulovic

Mtodos para Rendering de Superfcie

Introduo

Sumrio

1 Introduo

2 Programao OpenGL (Rendering)

3 OpenGL Shading LanguageProgramao OpenGL

2 / 50

Mtodos para Rendering de Superfcie

Introduo

Sumrio

1 Introduo

2 Programao OpenGL (Rendering)

3 OpenGL Shading LanguageProgramao OpenGL

3 / 50

Mtodos para Rendering de Superfcie

Introduo

Introduo

Baseado no modelo de iluminao, um mtodo de rendering desuperfcie usado para determinar a cor dos pixels

O modelo de iluminao pode ser usado de formas diferentes paradenir a cor de uma superfcie

Ray-tracing: executado em cada pixel projetado (realismo)Scan-line: executado em alguns pixels e interpolado no restante(tempo real)

4 / 50

Mtodos para Rendering de Superfcie

Introduo

Mtodos de Rendering de Superfcie

Maioria das APIs grcas reduz o processamento usando algoritmosde scan-line

As intensidades so calculadas nos vrtices e interpoladas nasposies restantes dos polgonos

5 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Intensidade Constante

O mtodo mais simples para renderizar uma superfcie usar amesma cor para todos seus pontos (at surface rendering)

Emprega-se o modelo de iluminao para determinar a intensidadedas 3 componentes RGB em uma nica posio da superfcie

Vrtice ou centride do polgono

6 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Intensidade Constante

O at surface rendering normalmente dene resultados precisos seO polgono uma face de um poliedro e no uma seo de umasuperfcie curva

Todas as fontes de luz esto distantes o suciente da superfcie deforma que N L e a funo de atenuao so constantesA posio viso distante o suciente do polgono de forma queV R (ou N H) constante

I = ka Ia +n

l=1 Il[kd(N L) + ks(N H)ns ]

Mesmo se alguma dessas condies for falsa, uma boa aproximaopode ser conseguida se os polgonos empregados forem pequenos

7 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Gouraud

O esquema de Gouraud surface rendering interpola linearmente asintensidades nos vrtices por toda face do polgono de um objetoiluminado

Desenvolvido para aproximar superfcies curvas, amenizando astransies de intensidades entre polgonos adjacentes

Elimina as descontinuidades de intensidades do at surface rendering

8 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Gouraud

Cada polgono de uma superfcie processado usando o seguinteprocedimento

1 Determina o vetor unitrio normal mdio em cada vrtice do polgono2 Aplica o modelo de iluminao em cada vrtice para obter as

intensidades3 Interpola linearmente as intensidades dos vrtices sobre a rea

projetada do polgono

9 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Gouraud

O vetor normal mdio em um vrtice obtido fazendo a mdia dasnormais de todos os polgonos que compartilham esse vrtice

NV =

nk=1 Nk

|n

k=1 Nk|

Usando essas normais o modelo de iluminao ento executadopara calcular as intensidades em cada vrtice

10 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Gouraud

Esses valores de intensidade so ento interpolados para se obter asintensidades ao longo de scan-lines que intersectam a rea projetadado polgono

As intensidades das interseces das scan-lines com as arestas dospolgonos so calculadas interpolando linearmente as intensidadesdos pontos nais das arestas

11 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Gouraud

Por exemplo, a intensidade em 4 pode ser calculada considerandosomente o deslocamento vertical da scan-line

I4 =y4 y2y1 y2

I1 +y1 y4y1 y2

I2

A intensidade em 5 pode ser obtida da mesma forma interpolandoverticalmente as intensidades em 2 e 3

12 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Gouraud

Considerando as intensidades obtidas em 4 e 5, as intensidades emqualquer ponto p da scan-line so obtidas interpolando na horizontal

Ip =x5 xpx5 x4

I4 +xp x4x5 x4

I5

Esse mtodo conhecido como interpolao bilinear e executadopara os 3 componentes RGB separadamente

13 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Gouraud

Essa interpolao de intensidades elimina descontinuidades mas temalguns problemas

Brilhos na superfcie podem apresentar formatos estranhosIntensidades claras ou escuras podem parecer riscadas (machbands)

14 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Gouraud

Efeito de mach bands consiste em faixas claras ou escuras que sopercebidas prximo das fronteiras entre duas regies de diferentesgradientes de luz

15 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Phong

Um mtodo mais preciso de interpolao conhecido como Phongsurface rendering

Ao invs de interpolar valores de intensidades, normais sointerpoladas

Clculos mais precisos de intensidadesBrilhos mais realsticos nas superfciesReduo do efeito mach-band

Computacionalmente mais caro que o mtodo de Gouraud

16 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Phong

Cada polgono processado usando o seguinte procedimento1 Determina o vetor unitrio normal mdio em cada vrtice do polgono2 Interpola linearmente as normais dos vrtices sobre a rea projetada

do polgono3 Aplica o modelo de iluminao nas posies ao longo da scan-line

para calcular as intensidades dos pixels usando as normaisinterpoladas

17 / 50

Mtodos para Rendering de Superfcie

Introduo

Rendering de Superfcie de Phong

O procedimento de interpolao das normais o mesmo dainterpolao das intensidades do mtodo de Gouraud

Por exemplo, o vetor normal N verticalmente interpolado a partirdas normais nos vrtices 1 e 2 fazendo

N =y y2y1 y2

N1 +y1 yy1 y2

N2

18 / 50

Mtodos para Rendering de Superfcie

Programao OpenGL (Rendering)

Sumrio

1 Introduo

2 Programao OpenGL (Rendering)

3 OpenGL Shading LanguageProgramao OpenGL

19 / 50

Mtodos para Rendering de Superfcie

Programao OpenGL (Rendering)

Funes de Rendering de Superfcie

Podemos usar dois mtodos de rendering da superfcie: (1) deintensidade constante (at); (2) e o modelo de Gouraud(smoothing)

No existe suporte para o modelo de Phong

Para denir o mtodo de rendering usamos

1 gl.glShadeModel(rendering_method);

Onde rendering_method pode ser GL.GL_FLAT eGL.GL_SMOOTH

20 / 50

Mtodos para Rendering de Superfcie

Programao OpenGL (Rendering)

Funes de Rendering de Superfcie

Para se denir a normal usamos

1 gl.glNormal3*(Nx, Ny, Nz);

Com o suxo dependendo do tipo de parmetro b, s, i, f e d, oucom a adio de v caso o parmetro seja um vetor

Valores byte, short e integer so convertidos para valores de pontoutuante na faixa de 1.0 a 1.0

A normal um valor de estado da OpenGL e tem valor padro iguala (0.0, 0.0, 1.0)

21 / 50

Mtodos para Rendering de Superfcie

Programao OpenGL (Rendering)

Funes de Rendering de Superfcie

Para rendering de intensidade constante denimos apenas umanormal para cada polgono

1 gl.glNormal3fv(normal_vector);2

3 gl.glBegin(GL.GL_TRIANGLES);4 gl.glVertex3fv(vertex1);5 gl.glVertex3fv(vertex2);6 gl.glVertex3fv(vertex3);7 gl.glEnd();

22 / 50

Mtodos para Rendering de Superfcie

Programao OpenGL (Rendering)

Funes de Rendering de Superfcie

Para o rendering de Gouraud uma normal deve ser denida paracada vrtice

1 gl.glBegin(GL_TRIANGLES);2 gl.glNormal3fv(normal_vector1);3 gl.glVertex3fv(vertex1);4

5 gl.glNormal3fv(normal_vector2);6 gl.glVertex3fv(vertex2);7

8 gl.glNormal3fv(normal_vector3);9 gl.glVertex3fv(vertex3);

10 gl.glEnd();

23 / 50

Mtodos para Rendering de Superfcie

Programao OpenGL (Rendering)

Funes de Rendering de Superfcie

Apesar dos vetores normais no precisarem ser especicados comtamanho unitrio, fazendo isso reduzimos o custo computacional

possvel solicitar a OpenGL normalizar qualquer vetor normal queno seja unitrio chamando

1 gl.glEnable(GL.GL_NORMALIZE);

Esse comando renormaliza todas as normais s superfcies incluindoas que foram modicadas por transformaes geomtricas de escalae cisalhamento

24 / 50

Mtodos para Rendering de Superfcie

Programao OpenGL (Rendering)

Rendering de Superfcie

1 public class Rendering implements GLEventListener {2

3 /** calcula o produto vetorial. */4 private Point3D crossproduct(Point3D a, Point3D b) {5 Point3D prod