25.07.2013 Views

Modelos de Sombreado - Departamento de Ciencias e Ingeniería ...

Modelos de Sombreado - Departamento de Ciencias e Ingeniería ...

Modelos de Sombreado - Departamento de Ciencias e Ingeniería ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Mo<strong>de</strong>los</strong> <strong>de</strong> <strong>Sombreado</strong><br />

VyGLab – Lab. <strong>de</strong> Investigación y Desarrollo en Visualización y<br />

Computación Gráfica<br />

Dpto. <strong>de</strong> <strong>Ciencias</strong> e <strong>Ingeniería</strong> <strong>de</strong> la Computación<br />

Universidad Nacional <strong>de</strong>l Sur<br />

Tratamos el problema <strong>de</strong> calcular la intensidad <strong>de</strong> la luz en un punto<br />

<strong>de</strong>l objeto. Si la intensidad la calculamos con el método <strong>de</strong><br />

iluminación <strong>de</strong> Phong, utilizamos la siguiente fórmula:<br />

I=k aI a + k dI p( L·N ) + k s I p( R·V ) n<br />

<strong>Sombreado</strong><br />

Consi<strong>de</strong>raremos ahora cómo aplicar tal mo<strong>de</strong>lo a un polígono para<br />

calcular así la intensidad <strong>de</strong> luz sobre su superficie.<br />

Silvia Castro CG 2012<br />

1


<strong>Sombreado</strong> <strong>de</strong> un objeto<br />

<strong>Sombreado</strong><br />

La iluminación retorna el color en un solo punto. ¿Cómo calculamos<br />

la iluminación en toda la superficie <strong>de</strong>l objeto?<br />

Silvia Castro CG 2012<br />

Normalmente no calculamos el color en cada uno <strong>de</strong> los puntos <strong>de</strong><br />

una superficie sino que la <strong>de</strong>scomponemos en pequeños polígonos<br />

planos y calculamos la iluminación para cada uno <strong>de</strong> éstos.<br />

Hay distintos métodos que nos permiten sombrear polígonos.<br />

<strong>Sombreado</strong><br />

Silvia Castro CG 2012<br />

2


Las distintas técnicas son:<br />

• <strong>Sombreado</strong> plano<br />

• Técnicas interpolantes<br />

<strong>Sombreado</strong> <strong>de</strong> Gouraud<br />

<strong>Sombreado</strong> <strong>de</strong> Phong<br />

<strong>Sombreado</strong><br />

Silvia Castro CG 2012<br />

<strong>Sombreado</strong> plano<br />

Se calcula la iluminación una sola vez por polígono y se<br />

<strong>de</strong>termina así un solo valor <strong>de</strong> intensidad que se aplicada a todo<br />

el polígono.<br />

Silvia Castro CG 2012<br />

3


<strong>Sombreado</strong> plano<br />

• <strong>Sombreado</strong> plano:<br />

Trabaja bien para todos los objetos hechos con todas las caras<br />

realmente planas.<br />

Si el mo<strong>de</strong>lo no tiene caras planas la apariencia <strong>de</strong>pen<strong>de</strong> <strong>de</strong> la<br />

cantidad <strong>de</strong> polígonos usados para simular caras curvas.<br />

• Si el mo<strong>de</strong>lo poliédrico es una aproximación, entonces <strong>de</strong>be ser<br />

suavizado.<br />

Silvia Castro CG 2012<br />

Esto es válido cuando:<br />

<strong>Sombreado</strong> plano<br />

- La fuente <strong>de</strong> luz está infinitamente lejana (paralela), es <strong>de</strong>cir, que<br />

L es constante en todo el polígono (L·N es constante)<br />

- El observador está infinitamente lejano, es<br />

<strong>de</strong>cir que V es constante en todo el<br />

polígono (R·V es constante)<br />

-Se está mo<strong>de</strong>lando un polígono que no es<br />

una aproximación <strong>de</strong> una superficie curva<br />

(superficie plana N es constante)<br />

- ¿Son válidas estas observaciones si<br />

calculamos la iluminación con el método <strong>de</strong><br />

iluminación <strong>de</strong> Cook-Torrance? ¿Por qué?<br />

Silvia Castro CG 2012<br />

4


<strong>Sombreado</strong> plano<br />

Silvia Castro CG 2012<br />

• Se calcula el sombreado en un<br />

punto representativo y se aplica al<br />

polígono completo<br />

• Ventajas:<br />

Un solo cálculo <strong>de</strong> sombreado<br />

por polígono; se pinta todo el<br />

polígono <strong>de</strong> mismo color.<br />

• Desventajas:<br />

Inexacto<br />

¿Cuáles son los problemas?<br />

<strong>Sombreado</strong> plano<br />

Silvia Castro CG 2012<br />

5


Métodos Interpolantes<br />

Con el objetivo <strong>de</strong> no calcular todos los parámetros para<br />

evaluar la ecuación <strong>de</strong> iluminación en cada punto que<br />

corresponda <strong>de</strong>l polígono, se propuso el sombreado<br />

interpolante.<br />

La interpolación se realiza a lo largo <strong>de</strong> las líneas <strong>de</strong> scan y,<br />

para aumentar la eficiencia se pue<strong>de</strong> utilizar, para los<br />

parámetros que corresponda, un cálculo incremental.<br />

Silvia Castro CG 2012<br />

Se calcula la intensidad <strong>de</strong> la luz en los vértices <strong>de</strong>l polígono y se<br />

interpolan estas intensida<strong>de</strong>s para encontrar los valores en los pixels en<br />

los que proyecta el polígono en pantalla.<br />

La intensidad en cada vértice se calcula usando un mo<strong>de</strong>lo <strong>de</strong> reflexión<br />

local, por ejemplo, el método <strong>de</strong> Phong.<br />

La intensidad <strong>de</strong> cada pixel se interpola<br />

bilinealmente a partir <strong>de</strong> la iluminación calculada<br />

en los vértices.<br />

La interpolación se realiza a lo largo <strong>de</strong> las<br />

líneas <strong>de</strong> scan <strong>de</strong> manera incremental.<br />

<strong>Sombreado</strong> <strong>de</strong> Gouraud<br />

I Phong = k a I a + f at I p (k d (L·N) + k s (R·V) n )<br />

Silvia Castro CG 2012<br />

6


Se calcula la intensidad <strong>de</strong> la luz en los vértices <strong>de</strong>l polígono y<br />

se interpolan estas intensida<strong>de</strong>s para encontrar los valores en<br />

los pixels en los que se proyecta el polígono.<br />

Para calcular la intensidad en cada<br />

punto, ¿qué normal se utiliza?.<br />

<strong>Sombreado</strong> <strong>de</strong> Gouraud<br />

Silvia Castro CG 2012<br />

Las normales para cada vértice se calculan:<br />

<strong>Sombreado</strong> <strong>de</strong> Gouraud<br />

Silvia Castro CG 2012<br />

N v<br />

N1<br />

N2<br />

N3<br />

N4<br />

<br />

N N N N<br />

N v se utiliza para calcular la intensidad en el vértice v que es<br />

común a todos los polígonos que lo comparten<br />

1<br />

2<br />

3<br />

4<br />

7


<strong>Sombreado</strong> <strong>de</strong> Gouraud<br />

… la interpolación bilineal se realiza <strong>de</strong>l siguiente modo:<br />

Se interpola entre puntos a<br />

lo largo <strong>de</strong> los lados<br />

A partir <strong>de</strong> la iluminación calculada en<br />

ciertos puntos clave como los vértices <strong>de</strong>l<br />

polígono …<br />

Se interpola a lo largo <strong>de</strong> las<br />

líneas <strong>de</strong> scan.<br />

Silvia Castro CG 2012<br />

La interpolación bilineal se realiza <strong>de</strong>l siguiente modo:<br />

<br />

y<br />

y<br />

I ( 1<br />

) I <br />

I<br />

p<br />

<strong>Sombreado</strong> <strong>de</strong> Gouraud<br />

Ia<br />

<br />

( 1<br />

12)<br />

I1<br />

12I<br />

I ( 1<br />

) I <br />

I<br />

b<br />

scan 1<br />

scan 1<br />

12 13<br />

<br />

ab<br />

y2<br />

y1<br />

y3<br />

y1<br />

Silvia Castro CG 2012<br />

y<br />

13<br />

ab<br />

1<br />

a<br />

y<br />

13<br />

ab<br />

2<br />

3<br />

b<br />

x p xa<br />

<br />

x x<br />

b<br />

a<br />

8


La iluminación en cada punto se calcula entonces:<br />

Se pue<strong>de</strong> realizar un cálculo incremental:<br />

I<br />

I<br />

I<br />

a<br />

b<br />

p<br />

I<br />

I<br />

1<br />

1<br />

I<br />

a<br />

( I<br />

12<br />

13<br />

2<br />

3<br />

I ) I <br />

( I I ) I<br />

1<br />

1<br />

1<br />

1<br />

0 <br />

0 <br />

0 <br />

1<br />

1<br />

1<br />

Silvia Castro CG 2012<br />

12<br />

( I I ) I <br />

ab<br />

b<br />

a<br />

<strong>Sombreado</strong> <strong>de</strong> Gouraud<br />

a<br />

13<br />

<br />

I<br />

I<br />

I<br />

b<br />

ab<br />

a<br />

p<br />

12<br />

13<br />

<br />

<br />

<br />

<br />

( 1<br />

) I<br />

( 1<br />

) I<br />

ab<br />

12<br />

13<br />

ab<br />

I<br />

a<br />

I<br />

( 1<br />

) I I<br />

<strong>Sombreado</strong> <strong>de</strong> Gouraud<br />

Si la interpolación bilineal se realiza incrementalmente:<br />

I<br />

I<br />

Silvia Castro CG 2012<br />

p<br />

p 1<br />

I<br />

<br />

p<br />

( 1<br />

<br />

I<br />

p<br />

b<br />

x<br />

x<br />

b<br />

b<br />

x<br />

x<br />

I<br />

a<br />

p<br />

p<br />

a<br />

) I<br />

b<br />

1<br />

1<br />

<br />

x<br />

( I b I<br />

x x<br />

12<br />

13<br />

ab<br />

a<br />

x<br />

)<br />

x<br />

b<br />

b<br />

12<br />

13<br />

ab<br />

x<br />

x<br />

2<br />

3<br />

p<br />

a<br />

b<br />

I<br />

a<br />

9


<strong>Sombreado</strong> <strong>de</strong> Gouraud<br />

Silvia Castro CG 2012<br />

• Sombrear<br />

normal.<br />

cada vértice con su<br />

• Interpolar linealmente el color en toda<br />

la cara<br />

• Ventajas:<br />

Cálculos incrementales que son<br />

rápidos en el proceso <strong>de</strong><br />

rasterizado.<br />

Mucho más suave – usa una<br />

normal por vértice compartido<br />

para lograr continuidad <strong>de</strong><br />

sombreado<br />

parches.<br />

entre distintos<br />

• Desventajas:<br />

¿Cuáles son lo problemas?<br />

¿Es exacto?<br />

<strong>Sombreado</strong> <strong>de</strong> Gouraud<br />

Silvia Castro CG 2012<br />

10


<strong>Sombreado</strong> <strong>de</strong> Phong<br />

Se calculan las normales en cada vértice <strong>de</strong>l polígono. Luego<br />

se interpolan para cada punto <strong>de</strong>l polígono que se proyecta<br />

en un pixel.<br />

Estas normales interpoladas se<br />

utilizan en el cálculo <strong>de</strong> intensidad<br />

en los puntos <strong>de</strong>l polígono que<br />

correspon<strong>de</strong>n a cada pixel<br />

proyectado.<br />

Silvia Castro CG 2012<br />

El sombreado <strong>de</strong> Phong<br />

da una imagen <strong>de</strong> mejor<br />

calidad que el <strong>de</strong><br />

Gouraud. Esto ocurre<br />

especialmente cuando<br />

hay puntos brillantes. El<br />

costo computacional es<br />

más alto.<br />

<strong>Sombreado</strong> <strong>de</strong> Phong<br />

Se utilizan la misma forma funcional para interpolar normales<br />

bilinealmente que para interpolar intensida<strong>de</strong>s.<br />

En cada pixel, la normal interpolada se transformada a coor<strong>de</strong>nadas<br />

<strong>de</strong>l sistema <strong>de</strong> coor<strong>de</strong>nadas <strong>de</strong>l mundo. Se calcula una nueva<br />

intensidad para el pixel en coor<strong>de</strong>nadas <strong>de</strong>l mundo.<br />

Silvia Castro CG 2012<br />

11


Los puntos brillantes se reproducen mejor con el sombreado <strong>de</strong> Phong;<br />

por ejemplo, si consi<strong>de</strong>ramos con diferentes valores <strong>de</strong> normales en<br />

los vértices compartidos:<br />

- tiene un vértice con alto<br />

coeficiente <strong>de</strong> brillo (n alto).<br />

<strong>Sombreado</strong> <strong>de</strong> Phong<br />

Gouraud Phong<br />

El sombreado <strong>de</strong> Gouraud <strong>de</strong>sparrama incorrectamente el brillo sobre<br />

el porque interpola intensida<strong>de</strong>s.<br />

El sombreado <strong>de</strong> Gouraud se implementa por hardware para la mayoría<br />

<strong>de</strong> las APIs. El <strong>de</strong> Phong pue<strong>de</strong> implementarse con sha<strong>de</strong>rs.<br />

Silvia Castro CG 2012<br />

V 1<br />

V 2<br />

V 3<br />

<strong>Sombreado</strong> <strong>de</strong> Phong<br />

La interpolación <strong>de</strong> las normales tiene un efecto geométrico favorable:<br />

Esto muestra que la interpolación <strong>de</strong> las normales tien<strong>de</strong> a<br />

restablecer la curvatura <strong>de</strong> la superficie original que se aproximó<br />

mediante una red poligonal.<br />

Observar qué ocurre con la magnitud <strong>de</strong> las normales.<br />

Silvia Castro CG 2012<br />

12


• Interpola las normales en todo el parche<br />

• Realiza el sombreado <strong>de</strong> cada pixel<br />

• Ventajas:<br />

Mejor<br />

exactas<br />

calidad, especularida<strong>de</strong>s más<br />

• Desventajas:<br />

Es más caro que el sombreado <strong>de</strong><br />

Gouraud.<br />

Es aún una aproximación para la<br />

mayoría <strong>de</strong> las superficies.<br />

• No <strong>de</strong>be confundirse con el mo<strong>de</strong>lo <strong>de</strong><br />

iluminación especular <strong>de</strong> Phong.<br />

<strong>Sombreado</strong> <strong>de</strong> Phong<br />

Silvia Castro CG 2012<br />

<strong>Sombreado</strong> <strong>de</strong> Phong<br />

Silvia Castro CG 2012<br />

13


Red<br />

más<br />

gruesa<br />

Comparación<br />

Plano Gouraud Phong<br />

Silvia Castro CG 2012<br />

Problemas <strong>de</strong> los métodos interpolantes para sombreado<br />

Siluetas poligonales<br />

No importa cuán bueno sea el mo<strong>de</strong>lo <strong>de</strong> sombreado interpolante usado en<br />

una superficie curva: la silueta es aún claramente poligonal.<br />

Esto se mejora subdividiendo la superficie en mayor número <strong>de</strong> polígonos a<br />

expensas <strong>de</strong> costo computacional.<br />

Silvia Castro CG 2012<br />

14


Problemas <strong>de</strong> los métodos interpolantes para sombreado<br />

Distorsión por la perspectiva<br />

Son las anomalías que ocurren <strong>de</strong>bido a que la interpolación es llevada a cabo<br />

luego <strong>de</strong> la transformación en perspectiva en el sistema <strong>de</strong> coor<strong>de</strong>nadas 3D <strong>de</strong><br />

la pantalla: la interpolación lineal hace que la información <strong>de</strong> sombreado sea<br />

incrementada en forma constante <strong>de</strong> una línea <strong>de</strong> scan a la siguiente.<br />

¿Cómo se soluciona este problema?<br />

De una línea <strong>de</strong> scan a la siguiente Pero no es cierto que zs=(z1+z2)/2 ys=(y1+y2)/2 Is=(I1+I2)/2 Silvia Castro CG 2012<br />

Problemas <strong>de</strong> los métodos interpolantes para sombreado<br />

Distorsión por la perspectiva<br />

Primitiva original<br />

Espacio <strong>de</strong>l objeto<br />

<strong>Sombreado</strong> <strong>de</strong> Gouraud <strong>Sombreado</strong> correcto<br />

Silvia Castro CG 2012<br />

15


Problemas <strong>de</strong> los métodos interpolantes para sombreado<br />

No hay invariancia rotacional<br />

Los resultados <strong>de</strong>l sombreado interpolante pue<strong>de</strong>n cambiar con la<br />

orientación <strong>de</strong>l polígono.<br />

D<br />

A<br />

C<br />

B<br />

A<br />

B<br />

D<br />

Silvia Castro CG 2012<br />

C<br />

El punto <strong>de</strong> la izquierda<br />

está interpolado entre AD y<br />

AB ,<br />

El punto <strong>de</strong> la <strong>de</strong>recha está<br />

interpolado entre AB y BC<br />

Problemas <strong>de</strong> los métodos interpolantes para sombreado<br />

Vértices compartidos<br />

Pue<strong>de</strong>n ocurrir discontinuida<strong>de</strong>s <strong>de</strong> sombreado en C. La información <strong>de</strong><br />

sombreado <strong>de</strong>terminada directamente en C por los polígonos 1 y 2,<br />

típicamente no será la misma que la información interpolada en C por los<br />

valores en A y en B<br />

Silvia Castro CG 2012<br />

16


Problemas <strong>de</strong> los métodos interpolantes para sombreado<br />

Normales no representativas en los vértices<br />

Las normales calculadas en los vértices pue<strong>de</strong>n no representar<br />

a<strong>de</strong>cuadamente la geometría <strong>de</strong> la superficie.<br />

Silvia Castro CG 2012<br />

<strong>Sombreado</strong> en OpenGL<br />

¿Cómo <strong>de</strong>be ser la red poligonal que mo<strong>de</strong>la estos cuerpos? ¿En qué<br />

difieren?<br />

Silvia Castro CG 2012<br />

17


Iluminación en el Pipeline 3D<br />

Objeto Mundo Ojo<br />

C. Mo<strong>de</strong>lado C. <strong>de</strong>l Mundo C. <strong>de</strong>l ojo o cámara<br />

Clipping Pantalla 3D Ventana<br />

C. <strong>de</strong> Clipping C. 3D <strong>de</strong> Pantalla C. Ventana<br />

¿Dón<strong>de</strong> se calculan las normales? ¿Dón<strong>de</strong> se calcula el color?<br />

Silvia Castro CG 2012<br />

Iluminación en el Pipeline 3D<br />

Objeto Mundo Ojo Ojo<br />

C. Mo<strong>de</strong>lado C. <strong>de</strong>l Mundo C. <strong>de</strong> la cámara C. <strong>de</strong> la cámara<br />

Clipping Pantalla 3D Ventana<br />

C. <strong>de</strong> Clipping C. 3D <strong>de</strong> Pantalla C. Ventana<br />

¿Dón<strong>de</strong> se calculan las normales? ¿Dón<strong>de</strong> se calcula el color?<br />

Silvia Castro CG 2012<br />

18


• Ejemplos<br />

<strong>Sombreado</strong> Gouraud <strong>Sombreado</strong> Phong<br />

Ejemplo<br />

Silvia Castro CG 2012<br />

Ejemplo<br />

¿Cómo realizamos el sombreado <strong>de</strong> Phong?. Para esto,<br />

<strong>de</strong>bemos calcular la iluminación en cada punto <strong>de</strong>l objeto. Se<br />

interpolarán las normales.<br />

En nuestro programa <strong>de</strong> fragmentos <strong>de</strong>bemos contar con las<br />

normales interpoladas en cada punto <strong>de</strong>l objeto.<br />

Recor<strong>de</strong>mos que el rasterizador genera fragmentos para todas<br />

las primitivas que no se clipearon. Cada fragmento pue<strong>de</strong><br />

correspon<strong>de</strong>r a un pixel en el frame buffer y los atributos <strong>de</strong>l<br />

mismo son el color y la posición.<br />

Hay otros atributos que pue<strong>de</strong>n <strong>de</strong>terminarse a partir <strong>de</strong> los<br />

atributos <strong>de</strong> los vértices interpolando los valores en los<br />

vértices.<br />

Silvia Castro CG 2012<br />

19


Aún cuando tengamos:<br />

in vec4 vColor;<br />

out oColor;<br />

void pasarf(void)<br />

{ oColor = vColor;}<br />

Ejemplo<br />

el color <strong>de</strong> cada fragmento se interpolará a partir <strong>de</strong>l color <strong>de</strong> los<br />

vértices.<br />

Del mismo modo, también se interpolan las coor<strong>de</strong>nadas <strong>de</strong> textura <strong>de</strong><br />

los vértices.<br />

Adicionalmente po<strong>de</strong>mos hacer que se interpole automáticamente<br />

cualquier variable <strong>de</strong> salida <strong>de</strong>l programa <strong>de</strong> vértices. Esto permitirá<br />

que podamos hacer cálculos <strong>de</strong> iluminación fragmento a fragmento.<br />

Silvia Castro CG 2012<br />

Ejemplo<br />

Así, en lugar <strong>de</strong> interpolar colores, po<strong>de</strong>mos interpolar las<br />

normales a través <strong>de</strong>l polígono y aplicar el mo<strong>de</strong>lo <strong>de</strong><br />

sombreado a cada fragmento usando esas normales<br />

interpoladas.<br />

Nuestro procesador <strong>de</strong> vértices ¿qué <strong>de</strong>be hacer?<br />

Éste <strong>de</strong>be transferir datos <strong>de</strong>l programa <strong>de</strong> vértices al <strong>de</strong><br />

fragmentos.<br />

En el programa <strong>de</strong> vértices <strong>de</strong>bemos calcular:<br />

- posición en coor<strong>de</strong>nadas <strong>de</strong>l ojo<br />

- normal en coor<strong>de</strong>nadas <strong>de</strong>l ojo<br />

y luego pasarlas al programa <strong>de</strong> fragmentos.<br />

Silvia Castro CG 2012<br />

20


Ejemplo<br />

• Para llevar a cabo el sombreado <strong>de</strong> Phong (por fragmentos),<br />

el programa <strong>de</strong> fragmentos necesita conocer la posición y la<br />

normal en el fragmento.<br />

• Como el programa <strong>de</strong> fragmentos no pue<strong>de</strong> leer gl_Position,<br />

<strong>de</strong>bemos usar otro parámetro para pasar la posición.<br />

• Entonces, pasamos la posición y la normal en parámetros <strong>de</strong><br />

tipo out e in.<br />

• Notar que estos parámetros se interpolan bilinealmente <strong>de</strong><br />

manera automática cuando se pasan <strong>de</strong>l programa <strong>de</strong><br />

vértices al <strong>de</strong> fragmentos.<br />

Silvia Castro CG 2012<br />

Otros ejemplos<br />

• ¿Cómo incorporaría a su programa <strong>de</strong> vértices/fragmentos la<br />

atenuación con la distancia?<br />

• ¿Cómo incorporaría un spot?<br />

Silvia Castro CG 2012<br />

21


Silvia Castro CG 2012<br />

22

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

Saved successfully!

Ooh no, something went wrong!