3.9.3  Acabados

La parte final de una textura de POV-Ray es el acabado (finish). Éste controla las propiedades de la superficie de un objeto. Puede hacerla brillante y reflexiva, o apagada y mate. También puede especificar qué le sucede a la luz que atraviesa pigmentos transparentes, qué le pasa a la luz que es dispersada por superficies que no son perfectamente lisas, y qué sucede con la luz que es reflejada por las superficies con propiedades de interferencia de película fina. POV-Ray dispone de doce propiedades distintas para especificar el acabado de cualquier objeto. Estas propiedades son controladas por los siguientes identificadores: ambient (ambiente), diffuse (luz difusa), brilliance (brillo), phong (brillo phong), specular (brillo especular), metallic (brillo metálico), reflection (reflexión), crand (granulado aleatorio) e iridescence (iridiscencia). Diseñemos un par de texturas para poder utilizar estos parámetros.

3.9.3.1  Usando el ambiente (ambient)

Ya que los objetos en POV-Ray son iluminados por fuentes de luz, las porciones de estos objetos que queden en sombra se verían completamente negros si no fuera por las dos primeras propiedades de los acabados, ambient (ambiente) y diffuse (luz difusa). Ambiente es usado para simular la luz dispersada por toda la escena que no viene directamente de una fuente de luz. La luz difusa determina que cantidad de la luz que se ve, viene directamente de una fuente de luz. Estos dos identificadores trabajan juntos para controlar la simulación de la luz ambiental. Volvamos a nuestra esfera gris para demostrar esto. También cambiemos el pigmento de nuestro plano al que tenía originalmente, el patrón a cuadros verde y blanco.

  plane {
    y, -1.5
    pigment {checker Green, White}
  }
  sphere {
    <0,0,0>, 1
    pigment { Gray75 }
    finish {
      ambient .2
      diffuse .6
    }
  }

En el ejemplo superior, se usaron los valores por defecto de ambiente y luz difusa. Generamos esto para ver cuál es el efecto y luego realizamos el siguiente cambio en el bloque finish de acabado.

  ambient 0
  diffuse 0

La esfera es negra porque hemos especificado que nada de la luz que viene de cualquier fuente sea reflejada por la esfera. Cambiemos el valor de diffuse nuevamente al valor por defecto de 0.6.

Ahora vemos el color gris de la superficie en las partes donde la luz que viene de la fuente llega directamente a la esfera, pero la parte con sombra sigue absolutamente negra. Cambiemos diffuse a 0.3 y ambient a 0.3.

Ahora la esfera parece casi sin profundidad. Esto sucede porque hemos especificado un grado bastante alto de luz ambiente y sólo una pequeña porción de la luz proveniente de las fuentes es reflejada difusamente hacia la cámara. Los valores por defecto de ambient y diffuse son una media bastante buena y un buen punto de partida. En la mayoría de los casos, un valor de ambiente de 0.1 ... 0.2 es suficiente y un valor de luz difusa de entre 0.5 ... 0.7 funcionará bien. Hay algunas excepciones. Si tenemos una superficie completamente transparente con valores altos de refracción y/o reflexión, valores bajos de ambiente y luz difusa pueden ser más apropiados. Aquí hay un ejemplo:

sphere {
   <0,0,0>, 1
   pigment { White filter 1 }
   finish {
      ambient 0
      diffuse 0
      reflection .25
      specular 1
      roughness .001
   }
   interior { ior 1.33 }
}

Esto es vidrio, obviamente. El vidrio es un material que toma casi toda su apariencia de sus alrededores. Muy poco de la superficie se ve porque transmite o refleja prácticamente toda la luz que cae sobre él. Vea glass.inc para otros ejemplos.

Si alguna vez necesitamos que un objeto esté completamente iluminado independientemente de la iluminación de la escena, podemos lograrlo artificialmente especificando un valor ambiente de 1, y 0 de luz difusa. Ello eliminaría todo el sombreado y le daría al objeto su color más brillante en todos sus puntos. Esto sirve para simular objetos que emiten luz como las bombillas de luz y cielos en las escenas donde éste no pueda ser iluminado apropiadamente por otros medios.

Probémoslo con nuestra esfera.

  sphere {
     <0,0,0>, 1
     pigment { White }
     finish {
        ambient 1
        diffuse 0
     }
  }

Al generar esto nos encontramos con una esfera blanca cegadora sin brillos superficiales o partes sombreadas. Podría ser la luz de un poste de calle.

3.9.3.2  Usando brillos superficiales (highlights)

En el ejemplo del vidrio, vimos que había pequeños puntos brillantes sobre la superficie. Esto le dio a la esfera una apariencia dura y brillante. POV-Ray nos ofrece dos modos de especificar los brillos superficiales. El primero se llama brillo Phong. Generalmente, los brillos Phong se describen usando dos identificadores: phong y phong_size. El número de coma flotante que sigue a phong determina la luminosidad del brillo mientras que el número que sigue a phong_size determina su tamaño. Probémoslo.

  sphere {
    <0,0,0>, 1
    pigment { Gray50 }
    finish {
      ambient .2
      diffuse .6
      phong .75
      phong_size 25
    }
  }

Al generar vemos un brillo bastante amplio y suave que le da a la esfera una apariencia un poco plástica. Ahora cambiemos phong_size a 150. Esto da un brillo mucho más pequeño que da una apariencia de ser más duro y brillante.

Existe otro tipo de brillo que es calculado por otros medios llamado brillo especular. Se especifica con el identificador specular y opera en conjunción con otro identificador llamado roughness (aspereza). Estos dos identificadores trabajan juntos de un modo muy similar al de phong y phong_size para crear brillos que alteran la brillantez aparente de la superficie. Probemos el brillo especular en nuestra esfera.

  sphere {
     <0,0,0>, 1
     pigment { Gray50 }
     finish {
        ambient .2
        diffuse .6
        specular .75
        roughness .1
    }
  }

Viendo el resultado vemos un brillo amplio y suave similar al que obtuvimos cuando usamos un phong_size de 25. Cambiemos roughness a .001 y generemos nuevamente. Ahora vemos un brillo pequeño más definido, parecido al que obtuvimos con phong_size a 150. Generalmente, el brillo especular es más preciso y por ello levemente más realista que el brillo phong, pero deberías probar ambos métodos al diseñar una textura. Hay incluso ocasiones en que, tanto el brillo phong como el especular, pueden ser usados en un mismo acabado.

3.9.3.3  Usando la reflexión y efectos metálicos (reflection, metallic)

Existe otro parámetro de superficie que va de la mano con los brillos, la reflexión. Las superficies que son muy brillantes generalmente tienen un grado de reflexión. Veamos un ejemplo.

  sphere {
     <0,0,0>, 1
     pigment { Gray50 }
     finish {
        ambient .2
        diffuse .6
        specular .75
        roughness .001
        reflection {
           .5
        }
     }
  }

Observamos que ahora nuestra esfera refleja el plano a cuadros verde y blanco y el fondo negro, pero el color gris de la esfera parece fuera de lugar. Éste es otro caso donde un valor bajo de luz difusa es necesario. Generalmente, cuanto más alto es el valor de reflection, más bajo debe ser el valor de diffuse. Bajamos el valor de la luz difusa a 0.3 y el ambiente a 0.1 y generamos la imagen nuevamente. Así esta mucho mejor. Ahora hagamos que nuestra esfera sea tan brillante y pulida como una cuenta de oro.

  sphere {
     <0,0,0>, 1
     pigment { BrightGold }
     finish {
        ambient .1
        diffuse .1
        specular 1
        roughness .001
        reflection {
           .75
        }
     }
   }

Eso se acerca pero hay algo que no anda muy bien, el color del reflejo y del brillo. Para hacer que la superficie se asemeje más a un metal se utiliza el identificador metallic. Añadámoslo para ver la diferencia.

  sphere {
     <0,0,0>, 1
     pigment { BrightGold }
     finish {
        ambient .1
        diffuse .1
        specular 1
        roughness .001
        reflection {
          .75
          metallic
        }
     }
  }

La reflexión posee más del color dorado que del color de sus alrededores. El último detalle, el brillo. Agregamos otra instancia del identificador metallic, esta vez al bloque del acabado (finish) y no dentro del bloque de reflexión.

  sphere {
     <0,0,0>, 1
     pigment { BrightGold }
     finish {
        ambient .1
        diffuse .1
        specular 1
        roughness .001
        metallic
        reflection {
          .75
          metallic
        }
     }
  }

Vemos que el brillo ha tomado el color de la superficie en lugar del de la fuente de luz. Esto hace que la superficie tenga una apariencia más metálica.

3.9.3.4  Usando la iridiscencia (iridescence)

Iridiscencia es lo que vemos en la superficie de una capa de aceite cuando el sol brilla sobre ella. El efecto de arco-iris es creado por algo llamado interferencia de película fina (lea la sección "Iridiscencia" para más detalles). Por ahora sólo tratemos de usarla. La iridiscencia se especifica mediante la declaración de irid y tres valores: amount (cantidad), thickness (espesor) y turbulence (turbulencia). La cantidad es la contribución al color total de la superficie. Usualmente de 0.1 a 0.5 es suficiente. El espesor afecta la "concurrencia" del efecto. Mantenga esto entre 0.25 y 1 para tener buenos resultados. La turbulencia es un poco diferente a la turbulencia de los pigmentos o normales. No podemos especificar octavas, lambda u omega pero sí podemos especificar un valor que afectará el espesor de manera un tanto diferente al identificador thickness. Los valores entre 0.25 y 1 son los que funcionan mejor aquí también. Finalmente, la iridiscencia responde a la normal de la superficie ya que depende del ángulo de incidencia de los rayos de luz que llegan a ésta. Con todo esto en mente, agreguemos un poco de iridiscencia a nuestra esfera de vidrio.

sphere {
     <0,0,0>, 1
     pigment { White filter 1 }
     finish {
        ambient .1
        diffuse .1
        reflection .2
        specular 1
        roughness .001
        irid {
          0.35
          thickness .5
          turbulence .5
        }
     }
     interior{
        ior 1.5
        fade_distance 5
        fade_power 1
        caustics 1
     }
}

Podemos cambiar los valores de amount, thickness y turbulence para ver qué variaciones causan. También podemos probar añadiendo un bloque de normal y observar qué ocurre.