Iluminación
Papel fundamental
¿Qué es la luz?
Rendering equation
Simplificación
Phong Shading
Flat Shading
Gouraud Shading
Phong Shading
Phong Shading
Ambient
Diffuse
+
Specular
+
=
Ambient Light
Color = Ka * ambientColor
Simulamos la Iluminación Global usando un color que afecte a todos los objetos
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)
Specular Light
Simulamos la Luz Reflejada usando el color de la misma
L
N
R
V
θ
Color = Ks * specularColor * saturate(R dot V)
shininess
Phong Shading
Ambient
Diffuse
+
Specular
+
=
Ka * ambientColor +
Kd * diffuseColor * saturate(N dot L) +
Ks * specularColor * saturate(R dot V)
shininess
Color =
Dependen del material
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
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)
Blinn-Phong Shading
Reflexiones más realistas
Blinn-Phong
Phong
Ecuación final
Color Final = (ambientLight + diffuseLight) * texelColor + specularLight
Ambient
Diffuse
+
Specular
+
=
Otro problema
Cuando transformamos nuestros vértices
¿Qué pasa con las normales?
Surgen dos inconvenientes a resolver:
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:
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
Importancia de las normales
Superficie
Superficie percibida
¿Como puedo hacer para incluir información distinta para cada fragmento?
Normal mapping - Matriz TBN
Tangente
Bitangente
Normal
Espacio tangente
Matriz TBN
Espacio de mundo
T
B
N
Normal mapping
Utilizamos texturas para guardar un vector normal por cada fragmento
Se guardan en espacio tangente.
Fuente:https://learnopengl.com/
¿Preguntas?