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 ...
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