Sombreado

El sombreado Gouraud, desarrollado por Henri Gouraud en 1971, fue una de las primeras técnicas de sombreado desarrolladas para los gráficos 3D por ordenador.

En los gráficos por ordenador, el sombreado se refiere al proceso de alterar el color de un objeto/superficie/polígono en la escena 3D, basándose en cosas como (pero no limitadas a) el ángulo de la superficie con respecto a las luces, su distancia con respecto a las luces, su ángulo con respecto a la cámara y las propiedades del material (e.p. ej. la función de distribución de reflectancia bidireccional) para crear un efecto fotorrealista.

El sombreado se realiza durante el proceso de renderizado mediante un programa llamado shader.

Ángulo de la superficie con respecto a una fuente de luzEditar

El sombreado altera los colores de las caras de un modelo 3D basándose en el ángulo de la superficie con respecto a una o varias fuentes de luz.

La primera imagen de abajo tiene las caras de la caja renderizadas, pero todas del mismo color. Aquí también se han renderizado las líneas de borde, lo que hace que la imagen sea más fácil de ver.

La segunda imagen es el mismo modelo renderizado sin líneas de borde. Es difícil saber dónde termina una cara de la caja y empieza la siguiente.

La tercera imagen tiene el sombreado activado, lo que hace que la imagen sea más realista y facilita ver qué cara es cada una.

Imagen renderizada de una caja. Esta imagen no tiene sombreado en sus caras, sino que utiliza líneas de borde (también conocidas como wireframe) para separar las caras y un contorno más grueso para separar el objeto del fondo.

Esta es la misma imagen con las líneas eliminadas; la única indicación de la geometría interior son los puntos de la silueta del objeto.
Este es el mismo objeto renderizado con sombreado plano. El color de las 3 caras frontales visibles se ha establecido en función de su ángulo (determinado por el vector normal) con respecto a las fuentes de luz.

Tipos de iluminaciónEditar

Efectos de sombreado de un foco usando un trazador de rayos

Cuando un shader calcula el color resultante, utiliza un modelo de iluminación para determinar la cantidad de luz reflejada en puntos específicos de la superficie. Diferentes modelos de iluminación pueden combinarse con diferentes técnicas de sombreado – mientras que la iluminación dice cuánta luz se refleja, el sombreado determina cómo se utiliza esta información para calcular el resultado final. Por ejemplo, puede calcular la iluminación sólo en puntos específicos y utilizar la interpolación para rellenar el resto. El sombreador también puede decidir sobre cuántas fuentes de luz tener en cuenta, etc.

Iluminación ambientalEditar

Una fuente de luz ambiental representa una fuente de luz omnidireccional, de intensidad y color fijos que afecta a todos los objetos de la escena por igual (es omnipresente). Durante el renderizado, todos los objetos de la escena se iluminan con la intensidad y el color especificados. Este tipo de fuente de luz se utiliza principalmente para proporcionar a la escena una visión básica de los diferentes objetos que la componen. Es el tipo de iluminación más sencillo de implementar, y modela cómo la luz puede dispersarse o reflejarse muchas veces, produciendo así un efecto uniforme.

La iluminación ambiental puede combinarse con la oclusión ambiental para representar cómo de expuesto está cada punto de la escena, afectando a la cantidad de luz ambiental que puede reflejar. Esto produce una iluminación difusa y no direccional en toda la escena, sin proyectar sombras claras, pero con las zonas cerradas y protegidas oscurecidas. El resultado suele ser visualmente similar a un día nublado.

Iluminación puntualEditar

La luz se origina en un único punto y se propaga hacia fuera en todas las direcciones.

Iluminación de focoEditar

Modela un foco: la luz se origina en un único punto y se propaga hacia fuera en un cono.

Iluminación de áreaEditar

La luz se origina en un área pequeña en un único plano. (Un modelo más realista que una fuente de luz puntual.)

Iluminación direccionalEditar

Una fuente de luz direccional ilumina todos los objetos por igual desde una dirección determinada, como una luz de área de tamaño infinito y a distancia infinita de la escena; hay sombreado, pero no puede haber desvanecimiento de distancia. Esto es como el sol.

Desfase de distanciaEditar

Dos cajas renderizadas con OpenGL. (Obsérvese que el color de las dos caras frontales es el mismo aunque una esté más alejada)
El mismo modelo renderizado con ARRIS CAD, que implementa el desvanecimiento de la distancia para que las superficies que están más cerca del ojo sean más brillantes.

Teóricamente, dos superficies que son paralelas se iluminan prácticamente igual desde una fuente de luz lejana no bloqueada, como el sol. El efecto de decaimiento de la distancia produce imágenes que tienen más sombreado y por lo tanto sería realista para las fuentes de luz proximales.

La imagen de la izquierda no utiliza el decaimiento de la distancia. Observe que los colores de las caras frontales de las dos cajas son exactamente iguales. Puede parecer que hay una ligera diferencia donde las dos caras se superponen directamente, pero esto es una ilusión óptica causada por el borde vertical debajo de donde las dos caras se encuentran.

La imagen de la derecha sí utiliza el decaimiento de la distancia. Observe que la cara frontal de la caja más cercana es más brillante que la cara frontal de la caja trasera. Además, el suelo pasa de claro a oscuro a medida que se aleja.

CálculoEditar

El decaimiento de la distancia puede calcularse de varias maneras:

  • Potencia de la distancia – Para un punto dado a una distancia x de la fuente de luz, la intensidad de la luz recibida es proporcional a 1/xn.
    • Ninguna (n = 0) – La intensidad de la luz recibida es la misma independientemente de la distancia entre el punto y la fuente de luz.
    • Lineal (n = 1) – Para un punto dado a una distancia x de la fuente de luz, la intensidad de la luz recibida es proporcional a 1/x.
    • Cuadrática (n = 2) – Así es como la intensidad de la luz disminuye en la realidad si la luz tiene un camino libre (es decir, sin niebla o cualquier otra cosa en el aire que pueda absorber o dispersar la luz). Para un punto dado a una distancia x de la fuente de luz, la intensidad de la luz recibida es proporcional a 1/x2.
  • También se puede utilizar cualquier número de otras funciones matemáticas.

Técnicas de sombreadoEditar

Durante el sombreado a menudo se necesita una normal de superficie para el cálculo de la iluminación. Las normales pueden ser precalculadas y almacenadas para cada vértice del modelo.

Sombreado planoEditar

Sombreado plano de un cubo texturizado

Aquí, la iluminación se evalúa sólo una vez para cada polígono (normalmente para el primer vértice del polígono, pero a veces para el centroide de las mallas triangulares), basándose en la normal de la superficie del polígono y en la suposición de que todos los polígonos son planos. El color calculado se utiliza para todo el polígono, haciendo que las esquinas se vean nítidas. Se suele utilizar cuando las técnicas de sombreado más avanzadas son demasiado costosas desde el punto de vista computacional. Los brillos especulares se representan mal con el sombreado plano: Si hay un gran componente especular en el vértice representativo, ese brillo se dibuja uniformemente en toda la cara. Si un brillo especular no cae en el punto representativo, se pierde por completo. En consecuencia, el componente de reflexión especular no suele incluirse en el cálculo del sombreado plano.

Sombreado suaveEditar

En contraste con el sombreado plano, en el que los colores cambian de forma discontinua en los bordes de los polígonos, con el sombreado suave el color cambia de píxel a píxel, dando lugar a una transición de color suave entre dos polígonos adyacentes. Normalmente, los valores se calculan primero en los vértices y se utiliza la interpolación bilineal para calcular los valores de los píxeles entre los vértices de los polígonos. Los tipos de sombreado suave incluyen el sombreado Gouraud y el sombreado Phong.

Sombreado GouraudEditar
  1. Determinar la normal en cada vértice del polígono.
  2. Aplicar un modelo de iluminación a cada vértice para calcular la intensidad de la luz a partir de la normal del vértice.
  3. Interpolar las intensidades de los vértices utilizando interpolación bilineal sobre el polígono de la superficie.

Problemas:

  • Debido a que la iluminación se calcula sólo en los vértices, las imprecisiones (especialmente de los brillos especulares en triángulos grandes) pueden llegar a ser demasiado evidentes.
  • Las uniones en T con polígonos contiguos pueden dar lugar a veces a anomalías visuales. En general, deben evitarse las uniones en T.
Sombreado PhongEdit

El sombreado Phong es similar al sombreado Gouraud, excepto que en lugar de interpolar las intensidades de luz se interpolan las normales entre los vértices y la iluminación se evalúa por píxel. Así, los brillos especulares se calculan con mucha más precisión que en el modelo de sombreado de Gouraud.

  1. Calcular una normal N para cada vértice del polígono.
  2. Utilizando la interpolación bilineal calcular una normal, Ni para cada píxel. (La normal tiene que ser renormalizada cada vez.)
  3. Aplica un modelo de iluminación a cada píxel para calcular la intensidad de la luz a partir de Ni.
  4. Sombreado diferidoEditar

    El sombreado diferido es una técnica de sombreado mediante la cual el cálculo del sombreado se difiere a una etapa posterior al renderizar en dos pases, aumentando potencialmente el rendimiento al no descartar los píxeles sombreados costosos. La primera pasada sólo captura los parámetros de la superficie (como la profundidad, las normales y los parámetros del material), la segunda realiza el sombreado real y computa los colores finales.:884

    Otros enfoquesEditar

    Tanto el sombreado Gouraud como el sombreado Phong pueden ser implementados usando interpolación bilineal. Bishop y Weimer propusieron utilizar una expansión en serie de Taylor de la expresión resultante de aplicar un modelo de iluminación y la interpolación bilineal de las normales. Por lo tanto, se utilizó la interpolación polinómica de segundo grado. Este tipo de interpolación bicadrática fue elaborado por Barrera et al., donde se utilizó un polinomio de segundo orden para interpolar la luz difusa del modelo de reflexión de Phong y otro polinomio de segundo orden para la luz especular.

    La interpolación lineal esférica (Slerp) fue utilizada por Kuij y Blake para calcular tanto la normal sobre el polígono, como el vector en dirección a la fuente de luz. Un enfoque similar fue propuesto por Hast, que utiliza la interpolación de cuaterniones de las normales con la ventaja de que la normal siempre tendrá una longitud unitaria y se evita la pesada normalización computacional.

    Sombreado plano vs. suave smooth shadingEdit

    Flat Smooth
    Uses the same color for every pixel in a face – usually the color of the first vertex Smooth shading uses linear interpolation of either colors or normals between vertices
    Edges appear more pronounced than they would on a real object because in reality almost all edges are somewhat round The edges disappear with this technique
    Same color for any point of the face Each point of the face has its own color
    Individual faces are visualized Visualize underlying surface
    Not suitable for smooth objects Suitable for any objects
    Less computationally expensive More computationally expensive