1 of 20

Iluminación

2 of 20

Papel fundamental

3 of 20

¿Qué es la luz?

4 of 20

Rendering equation

5 of 20

Simplificación

Phong Shading

Flat Shading

Gouraud Shading

Phong Shading

6 of 20

Phong Shading

Ambient

Diffuse

+

Specular

+

=

7 of 20

Ambient Light

Color = Ka * ambientColor

Simulamos la Iluminación Global usando un color que afecte a todos los objetos

8 of 20

Diffuse Light

Color = Kd * diffuseColor * saturate(N dot L)

Simulamos la Luz Refractada usando el color de la misma, dando más brillo según qué tan alineados están las normales de los fragmentos con respecto a la dirección de la luz

N

θ

θ

L

N dot L va desde -1 a 1 según qué tan paralelos sean N y L

N L ⇾ N dot L = 0

(siempre que sean unitarios)

9 of 20

Specular Light

Simulamos la Luz Reflejada usando el color de la misma

L

N

R

V

θ

Color = Ks * specularColor * saturate(R dot V)

shininess

10 of 20

Phong Shading

Ambient

Diffuse

+

Specular

+

=

Ka * ambientColor +

Kd * diffuseColor * saturate(N dot L) +

Ks * specularColor * saturate(R dot V)

shininess

Color =

Dependen del material

11 of 20

Problema con Phong

L

N

R

V

θ

L

N

R

V

θ

¿Qué pasa cuando el ángulo es mayor que 90°?

No se ve Specular Light. Esto está bien si estamos abajo de la superficie, pero no si estamos del otro lado

12 of 20

Blinn-Phong Shading

Blinn-Phong usa el vector H (halfway).

Se calcula como la suma normalizada de L + V.

L

N

V

θ

H

Color = Ks * specularColor * saturate(N dot H)

shininess

H = normalize(L + V)

13 of 20

Blinn-Phong Shading

Reflexiones más realistas

Blinn-Phong

Phong

14 of 20

Ecuación final

Color Final = (ambientLight + diffuseLight) * texelColor + specularLight

Ambient

Diffuse

+

Specular

+

=

15 of 20

Otro problema

Cuando transformamos nuestros vértices

¿Qué pasa con las normales?

Surgen dos inconvenientes a resolver:

  • Las normales son vectores de tres componentes
  • Las normales son direcciones, no hay que trasladarlas

N = (0.707, 0.707, 0)

x

Transformamos usando el primer cuadrante de 3x3 de la matriz World

¿Qué pasa si escalamos no uniformemente?

T

N

x(1.0, 2.0, 1.0)

T

N

Surgen tres inconvenientes a resolver:

  • Las normales son vectores de tres componentes
  • Las normales son direcciones, no hay que trasladarlas
  • Las tangentes se conservan, las normales no

16 of 20

Matriz Normal

Transforma las normales.

Es el cuadrante de 3x3 de la transpuesta de la inversa de la matriz de mundo

Matrix.Transpose(Matrix.Invert(world));

Como la tangente se altera correctamente, se deduce una transformación de su relación (dot(N, T) = 0).

La transformación es la matriz normal y orienta correctamente al vector normal una vez transformado

17 of 20

Importancia de las normales

Superficie

Superficie percibida

¿Como puedo hacer para incluir información distinta para cada fragmento?

18 of 20

Normal mapping - Matriz TBN

Tangente

Bitangente

Normal

Espacio tangente

Matriz TBN

Espacio de mundo

T

B

N

19 of 20

Normal mapping

Utilizamos texturas para guardar un vector normal por cada fragmento

Se guardan en espacio tangente.

Fuente:https://learnopengl.com/

20 of 20

¿Preguntas?