En este tema, exploraremos los conceptos fundamentales de la iluminación y el sombreado en gráficos 3D. Estos conceptos son cruciales para crear imágenes realistas y comprensibles en aplicaciones de gráficos por computadora.
Conceptos Clave
- Modelo de Iluminación: Describe cómo la luz interactúa con las superficies.
- Tipos de Luz: Diferentes fuentes de luz y sus características.
- Sombreado: Métodos para calcular la apariencia de una superficie bajo una fuente de luz.
- Modelos de Sombreado: Técnicas para aplicar el sombreado en gráficos 3D.
Modelo de Iluminación
El modelo de iluminación más comúnmente utilizado en gráficos 3D es el Modelo de Iluminación de Phong. Este modelo considera tres componentes principales:
- Luz Ambiente: Luz difusa que ilumina todos los objetos de manera uniforme.
- Luz Difusa: Luz que se dispersa en todas las direcciones cuando golpea una superficie.
- Luz Especular: Luz que se refleja en una dirección específica, creando puntos brillantes.
Fórmula del Modelo de Iluminación de Phong
\[ I = I_a + I_d + I_s \]
Donde:
- \( I \) es la intensidad total de la luz.
- \( I_a \) es la intensidad de la luz ambiente.
- \( I_d \) es la intensidad de la luz difusa.
- \( I_s \) es la intensidad de la luz especular.
Tipos de Luz
- Luz Puntual: Emite luz desde un punto en todas las direcciones.
- Luz Direccional: Emite luz en una dirección específica, como el sol.
- Luz Focal: Emite luz en un cono, como una linterna.
Ejemplo de Luz Puntual
class LuzPuntual: def __init__(self, posicion, intensidad): self.posicion = posicion self.intensidad = intensidad # Crear una luz puntual en la posición (10, 10, 10) con una intensidad de 1.0 luz = LuzPuntual((10, 10, 10), 1.0)
Sombreado
El sombreado determina cómo se calcula la luz en cada punto de una superficie. Los métodos más comunes son:
- Sombreado Plano: Calcula la iluminación una vez por polígono.
- Sombreado de Gouraud: Interpola la iluminación entre los vértices de un polígono.
- Sombreado de Phong: Interpola las normales entre los vértices y calcula la iluminación en cada píxel.
Ejemplo de Sombreado de Gouraud
class Vertice: def __init__(self, posicion, normal): self.posicion = posicion self.normal = normal # Crear vértices con posiciones y normales v1 = Vertice((1, 1, 1), (0, 0, 1)) v2 = Vertice((2, 1, 1), (0, 0, 1)) v3 = Vertice((1, 2, 1), (0, 0, 1)) # Interpolar la iluminación entre los vértices def interpolar_iluminacion(v1, v2, v3): # Código para interpolar la iluminación pass
Modelos de Sombreado
- Sombreado Plano: Simple y rápido, pero puede producir bordes duros.
- Sombreado de Gouraud: Suaviza los bordes, pero puede perder detalles especulares.
- Sombreado de Phong: Más realista, pero computacionalmente más costoso.
Comparación de Modelos de Sombreado
Modelo de Sombreado | Ventajas | Desventajas |
---|---|---|
Plano | Rápido y simple | Bordes duros |
Gouraud | Suaviza bordes | Pierde detalles especulares |
Phong | Más realista | Más costoso |
Ejercicio Práctico
Ejercicio 1: Implementar Sombreado de Phong
Implementa una función que calcule la iluminación usando el modelo de Phong.
def calcular_iluminacion_phong(posicion, normal, luz): # Luz ambiente I_a = 0.1 # Luz difusa L = normalizar(restar(luz.posicion, posicion)) N = normalizar(normal) I_d = max(dot(N, L), 0) # Luz especular V = normalizar(restar(camera_posicion, posicion)) R = reflejar(L, N) I_s = pow(max(dot(V, R), 0), shininess) # Intensidad total I = I_a + I_d + I_s return I # Funciones auxiliares def normalizar(v): norm = sqrt(sum([x**2 for x in v])) return [x / norm for x in v] def restar(v1, v2): return [v1[i] - v2[i] for i in range(len(v1))] def dot(v1, v2): return sum([v1[i] * v2[i] for i in range(v1)]) def reflejar(L, N): return [2 * dot(N, L) * N[i] - L[i] for i in range(len(L))] # Parámetros posicion = (1, 1, 1) normal = (0, 0, 1) luz = LuzPuntual((10, 10, 10), 1.0) camera_posicion = (0, 0, 10) shininess = 32 # Calcular iluminación intensidad = calcular_iluminacion_phong(posicion, normal, luz) print("Intensidad de la luz:", intensidad)
Solución
La función calcular_iluminacion_phong
calcula la iluminación en un punto dado usando el modelo de Phong. Utiliza la luz ambiente, difusa y especular para determinar la intensidad total de la luz.
Conclusión
En esta sección, hemos cubierto los conceptos fundamentales de la iluminación y el sombreado en gráficos 3D. Hemos aprendido sobre el modelo de iluminación de Phong, los tipos de luz, y los métodos de sombreado. Estos conceptos son esenciales para crear imágenes realistas en aplicaciones de gráficos por computadora.
En el siguiente módulo, aplicaremos estos conceptos para representar objetos 3D y explorar técnicas avanzadas de modelado y renderizado.
Matemáticas 3D
Módulo 1: Fundamentos de Álgebra Lineal
- Vectores y Espacios Vectoriales
- Matrices y Determinantes
- Sistemas de Ecuaciones Lineales
- Autovalores y Autovectores
Módulo 2: Transformaciones Lineales
- Definición y Propiedades
- Matrices de Transformación
- Rotaciones, Traslaciones y Escalados
- Composición de Transformaciones
Módulo 3: Geometría en el Espacio 3D
- Coordenadas y Planos
- Vectores en el Espacio 3D
- Producto Escalar y Vectorial
- Ecuaciones de Planos y Rectas