|
Las propiedades de acabado de una superficie afectan en gran manera
a su apariencia. ¿Cómo refleja la luz? ¿Qué ocurre en
penumbra? ¿Qué tipo de reflejos son visibles? Para responder a
estas preguntas, necesitamos un acabado (finish
).
La sintaxis de finish
es la siguiente:
FINISH: finish { [IDENTIFICADOR_DE_ACABADO] [ELEMENTOS_DE_ACABADO...] } ELEMENTOS_DE_ACABADO: ambient COLOR | diffuse Cantidad | brilliance Cantidad | phong Cantidad | phong_size Cantidad | specular Cantidad | roughness Cantidad | metallic [Cantidad] | reflection COLOR | crand Cantidad | conserve_energy BOOL_ON_OFF | reflection { Color_Reflection_Min [ELEMENTOS_DE_REFLEXION...] }| irid { Irid_Amount [ELEMENTOS_IRID...] } ELEMENTOS_DE_REFLEXION: COLOR_REFLECTION_MAX | fresnel BOOL_ON_OFF | falloff FLOAT_FALLOFF | exponent FLOAT_EXPONENT | metallic FLOAT_METALLIC ELEMENTOS_IRID: thickness Cantidad | turbulence Cantidad
El IDENTIFICADOR_DE_ACABADO es opcional, pero debe ser colocado después de todos los demás elementos, ya que cualquier elemento que siga al IDENTIFICADOR_DE_ACABADO modifica o sobrescribe los ajustes dados en el IDENTIFICADOR_DE_ACABADO. Si no se especifica ningún identificador, entonces los elementos modifican los valores de acabado en la textura por defecto actual.
Aviso: No se permiten transformaciones dentro de un acabado (finish), debido a que los elementos de acabado cubren de modo uniforme toda la superficie. Cada uno de los ELEMENTOS_DE_ACABADO listados antes está descrito en las subsecciones siguientes.
En las primeras versiones de POV-Ray, las palabras clave refraction
,
ior
y caustics
eran parte de la declaración de finish
,
pero ahora son parte de la declaración de interior
.
Aunque aún se toleran en finish
, por motivos de
compatibilidad, los resultados pueden no ser 100% idénticos a
versiones previas. Consultar "¿Por qué son Interior y Media
necesarios?" para más detalles.
Una declaración de acabado (finish) es parte de una especificación de textura. Sin embargo, puede resultar tedioso gastar una declaración de textura para añadir sólo un reflejo u otras propiedades de iluminación a un objeto. Por lo tanto, podemos unir directamente un acabado a un objeto sin especificar que forma parte de una textura. Un ejemplo de ello puede ser:
object { Mi_Objeto texture { finish { phong 0.5 } } }
se puede abreviar así:
object { Mi_Objeto finish { phong 0.5 } }
Trabajando así crearíamos una estructura completa de textura
con las declaraciones de pigment
y normal
por
defecto, exactamente igual que si hubiéramos tecleado la textura
(...) completa a su alrededor.
Los identificadores de acabado pueden ser declarados para hacer los ficheros escénicos más legibles y para parametrizar escenas en las que cambiar una sola declaración afecte a muchos valores. Un identificador se declara de esta manera:
DECLARACIÓN_DE_ACABADO: #declare IDENTIFIER = FINISH | #local IDENTIFIER = FINISH
Donde IDENTIFIER es el nombre del identificador de hasta 40 caracteres de largo y FINISH cualquier declaración válida de acabado. Ver "#declare vs. #local" para más información sobre el alcance de los identificadores.
La luz que, en el mundo real, vemos en las áreas sombreadas, proviene de la reflexión difusa de otros objetos. Esta luz no puede simularse directamente mediante el trazado de rayos. Sin embargo, podemos usar un truco llamado iluminación ambiente para imitar la luz interior de un área sombreada.
Luz ambiente es la luz que se esparce por todas partes en una habitación. Rebota en cualquier sitio y se encarga de iluminar un poco allí donde no llega la iluminación directa. Computar luz ambiente realista llevaría mucho tiempo, así que imitaremos la luz ambiente añadiendo un poco de luz blanca (o de otro color, como se verá más abajo) a cada textura tanto si ya está iluminada como si no.
Esto significa que partes del objeto que están completamente en la sombra aún tendrán un poco del color de su superficie. Es casi como si la textura brillara, pensemos que la luz ambiente en una textura sólo afecta al objeto sobre la que se proyecta.
La palabra clave ambient
controla la cantidad de luz
ambiente. Normalmente se especifica un valor en coma flotante
aunque estemos utilizando la sintaxis para invocar un color. Por
ejemplo, un valor flotante de 0.3
se promociona al
vector de color completo <0.3,0.3,0.3,0.3,0.3>
,
lo cual es aceptable ya que sólo se utilizan las partes roja, verde
y azul.
El valor por defecto es 0.1, lo cual proporciona una luz ambiente
muy débil. Se admiten valores entre 0.0 y 1.0. La luz ambiente
afecta por igual a las áreas sombreadas y no sombreadas, así que
si subimos el valor de ambient
deberemos bajar los valores
de diffuse
y reflection
.
Aviso: este método no tiene en cuenta el color de los objetos cercanos. Si estuvieramos en una habitación con paredes, techo y suelo de color rojo con nuestro traje de la primera comunión, podría parecer que vestimos como la pantera rosa debido a la luz reflejada. La luz ambiente abreviada de POV-Ray no tiene en cuenta este detalle y además, tampoco hay modo de modelar la iluminación especular indirecta, como un puntero láser brillando sobre un espejo.
Podemos colorear la luz ambiente de dos maneras. Una consiste en
especificar un color en vez de un valor en coma flotante después
de ambient
en cada declaración de acabado. Por
ejemplo:
finish { ambient rgb <0.3,0.1,0.1> } // un ambiente rosado
O también podemos ajustar la luz ambiente utilizada al calcular la
iluminación ambiente de un objeto mediante el ajuste global ambient_ligth
.
La fórmula es conseguida con Ambiente = Acabado Ambiente * Fuente de
luz Ambiente Global. Ver sección "Luz
Ambiente" para más detalles.
Cuando la luz rebota en una superficie, las leyes de la física dicen que debería abandonar la superficie en el mismo ángulo en el que llegó. De un modo parecido al que las bolas de billar rebotan en los bordes de una mesa de billar. Esta reflexión perfecta se llama reflexión especular. Sin embargo, sólo las superficies muy pulidas reflejan la luz de esta manera, ya que la mayor parte de las veces la luz se refleja y es dispersada en todas direcciones por la rugosidad de la superficie. Esta dispersión es llamada reflexión difusa debido a que la luz se desparrama o difunde por gran variedad de direcciones. Esto es cierto para la mayoría de las luces que podemos ver en el mundo real.
La palabra clave diffuse
se utiliza en una declaración
de acabado para controlar que cantidad de luz, que proceda directamente
de cualquier fuente de luz, será reflejada por el método de
reflexión difusa. Por ejemplo:
finish { diffuse 0.7 }
significa que el 70% de la luz que refleja el objeto viene
directamente del punto de luz. El valor por defecto es diffuse
0.6
.
La cantidad de luz directa que se difunde desde un objeto depende
del ángulo en el que llega a su superficie. Cuando la luz llega en
un ángulo muy cerrado, ilumina menos. Cuando la luz es
perpendicular a la superficie, ésta estará más iluminada. Puede
utilizarse la palabra clave brilliance
en una
declaración de acabado para variar el modo en que disminuye la luz
dependiendo del ángulo de incidencia. Así controlamos la tirantez
de la iluminación difusa básica en los objetos y, en menor modo,
el aspecto del brillo superficial. Los objetos pueden aparentar
ser más metálicos incrementando su luminosidad. El valor por
defecto es 1.0. Mayores valores, entre 5 y 10, provocan que la luz
se refleje en ángulos mucho menores. No hay límites para los valores
de luminosidad. Un consejo: experimentar con diversos valores es la
mejor manera de comprobar lo que conviene para cada situación
particular. Se obtienen mejores resultados si se combina con
destellos (highlights).
Las superficies muy rugosas, como cemento o arena, exhiben un
granulado oscuro en su color aparente. Esto es debido a las
sombras que causan los pequeños agujeros en su superficie. Puede
añadirse la palabra clave crand
a un acabado finish
para causar un oscurecimiento aleatorio menor en la reflexión
difusa de la iluminación directa. Los valores típicos oscilan
entre crand 0.01 y crand 0.5 o más. El valor por defecto es 0.
Ejemplo:
finish { crand 0.05 }
Esta característica viene incluida desde las versiones primarias de POV-Ray y se considera obsoleta. Esto es debido a que el grano o ruido causado se aplica píxel a píxel y, debido a esta forma de calcular el ruido, se obtienen los mismos resultados en objetos lejanos o cercanos. Además, el efecto es diferente dependiendo de la resolución que se utilice para generar la imagen.
Aviso: No se debería usar la
granulosidad cuando se generen animaciones. Ésta es una de las
pocas características realmente aleatorias utilizadas en POV-Ray y
produciría un mareante "zumbido" de píxeles voladores en cualquier
textura animada con un valor crand
. Por estas
razones, éste no es un modo demasiado preciso para modelar efecto
rugoso en una superficie.
Los destellos son las manchas brillantes que aparecen cuando una fuente de luz se refleja en un objeto pulido. Son una mezcla entre reflexión especular y reflexión difusa. Son especulares porque dependen del ángulo de visión y del ángulo de iluminación. Sin embargo, también son difusos porque provocan algo de dispersión. A la hora de modelar exactamente un destello debemos calcular reflexión especular de miles de microscópicos bultos llamados microfacetas. Cuantas más microfacetas estén orientadas hacia el espectador mayor será la apariencia brillante del objeto y más intensos los destellos. POV-Ray utiliza dos modelos diferentes para simular destellos sin tener que calcular microfacetas. Son los modelos Phong y especular.
Aviso: los destellos especulares y Phong no son mutuamente excluyentes. Es posible especificar ambos y ambos tendrán efecto sobre el objeto. Sin embargo, lo normal es especificar sólo uno de los dos tipos de destello.
La palabra clave phong
en la declaración de acabado
controla la cantidad de destellos Phong en el objeto. Provoca una
mancha luminosa brillante en el objeto del color de la fuente de
luz reflejada.
El método Phong mide la media de las facetas orientadas en la dirección en que se refleja el foco de luz sobre el objeto y el espectador.
Los típicos valores de Phong alcanzan de 0.0 a 1.0, donde 1.0
provoca una saturación completa del color de la fuente de luz en
el área más brillante (centro) del destello. El valor por defecto phong
0.0
no causa reflejos.
El tamaño del destello se define por el valor phong_size
.
Cuanto mayor sea el valor de phong, más "duro" será el reflejo, y
más pequeño y brillante la apariencia del reflejo. Por el
contrario, cuanto más pequeño sea el valor de phong, mayor será el
tamaño del reflejo y menos brillante su apariencia.
Los valores típicos oscilan entre 1.0 (acabado mate) a 250 (muy
pulido) aunque se puede utilizar cualquier valor. Si no se
especifica phong_size
el valor por defecto del tamaño del
destello es 40 (plástico). Por ejemplo:
finish { phong 0.9 phong_size 60 }
Si no se especifica phong
, phong_size
no
tiene ningún efecto.
La palabra specular
en una declaración de acabado (finish
)
provoca un reflejo muy similar a los destellos Phong, pero usa un
modelo ligeramente diferente. El modelo especular, examinado más
de cerca, se ajusta más a la reflexión especular real y
proporciona una distribución de los reflejos más creíble de los
destellos que ocurren cerca de los bordes del objeto.
El valor típico especular va de 0.0 a 1.0, donde 1.0 causa una
saturación completa del color del punto de luz en la zona más
brillante (centro) del destello. El valor por defecto specular
0.0
no causa reflejos.
El tamaño del reflejo se define mediante
la palabra clave roughness
(rugosidad). Los valores
típicos van de 1.0 (muy áspero - reflejo grande) a 0.0005 (muy
suave - reflejo pequeño). El valor por defecto, si no se
especifica otra rugosidad, es 0.05 (plástico).
Es posible que se especifiquen valores erróneos para la rugosidad que generen un error mientras se trate de procesar un fichero. No se debe utilizar 0 y, si se obtienen mensajes de error, hay que comprobar que no se está utilizando un valor excesivamente pequeño que pueda estar causando el error. Por ejemplo:
finish { specular 0.9 roughness 0.02 }
Si no se especifica specular
, roughness
no surte ningún efecto.
Aviso: Nótese que cuando la luz es
reflejada por una superficie, como un espejo, se le llama
reflexión especular, aunque dicha reflexión no se genere con la
palabra clave specular
. La reflexión especular del
tipo espejo es determinada por la palabra clave reflection
.
La palabra clave metallic
(metálico) puede ser
utilizada con los destellos phong
o specular
. Esta palabra clave indica que el color de los destellos se
calculará mediante una función empírica que modela la reflexión de superficies metálicas.
Normalmente los destellos son del color de la fuente de luz. Añadiendo esta palabra clave, filtramos el destello y conseguimos que la luz blanca reflejada sobre una superficie metálica tome el color especificado por el pigmento.
La palabra clave metallic
puede estar seguida,
opcionalmente, por un valor numérico para especificar la
influencia del efecto. Si no se especifica, el valor por defecto
es 0. Si se especifica metallic
sin ningún valor
detrás, se toma el valor 1 por defecto. Por ejemplo:
finish { phong 0.9 phong_size 60 metallic }
Si no se especifica algún destello, ya sea phong
o specular
,
metallic
no tiene efecto.
Cuando la luz no se desparrama al llegar a un objeto, sino que
rebota en el mismo ángulo en el que impactó, hablamos de reflexión
especular. Esta reflexión de espejo está controlada por el bloque reflection
(...)
en una declaración de finish
.
Sintaxis:
finish { reflection { [COLOR_REFLECTION_MIN,] COLOR_REFLECTION_MAX [fresnel BOOL_ON_OFF] [falloff FLOAT_FALLOFF] [exponent FLOAT_EXPONENT] [metallic FLOAT_METALLIC] } } [interior { ior IOR }]
Su uso más simple sería un espejo perfecto:
finish { reflection {1.0} ambient 0 diffuse 0 }
Esto proporciona al objeto un acabado de espejo en el que se reflejarán todos los demás objetos en la escena. Normalmente se especifica un valor en coma flotante después de la palabra clave, aunque la sintaxis invoque a un color. Por ejemplo un valor en coma flotante de 0.3 se promociona al vector de color entero <0.3,0.3,0.3,0.3,0.3>, lo cual es aceptable ya que sólo se utilizan las partes roja, verde y azul.
Los valores oscilarán entre 0.0 a 1.0. Por defecto no hay reflexión.
Avisos:
- Añadir reflexión a una textura incrementa el tiempo de generación
debido a los rayos adicionales que han de trazarse.
- La luz reflejada puede tintarse especificando un color en lugar de un
valor en coma flotante. Por ejemplo.
finish { reflection rgb <1,0,0> }
da un espejo rojo
que sólo refleja luz roja.
- Aunque a este tipo de reflexión se le llame reflexión especular,
no está controlada por la palabra clave specular
. Esa
palabra clave determina un destello especular.
- La sintaxis antigua para reflexión simple "reflection COLOR" y
"reflection_exponent Float" sin llaves, aún se soportan por
motivos de compatibilidad con versiones anteriores.
falloff
ajusta la
disminución del exponente en la reflexión variable. Éste es el
exponente que determinará lo rápido que disminuirá la reflexión, por ejemplo, lineal, cuadrática, cúbica, etc.
La palabra clave metallic
es
similar en funcionamiento a la palabra clave "metallic" usada para
los destellos de los acabados: imita las propiedades reflexivas
de las superficies metálicas, donde la luz reflejada toma el color
de la superficie. Cuando se usa metallic
, el color
"reflejado" se multiplica por el pigmento de color en cada punto.
Opcionalmente, se puede especificar un valor decimal, que será la
influencia que metallic
tendrá en el color reflejado. metallic
utiliza un tipo de ecuación llamado Fresnel que hace que el color
de la luz sea reflejado en ángulos oblicuos y el color del
metal sea reflejado en ángulos cercanos a la normal de la
superficie.
Exponente (exponent)
POV-Ray utiliza un modelo de luz limitado que no puede distinguir entre
objetos de color claro y objetos brillantes. Una hoja de papel
blanco, una bombilla, el sol y una supernova serían modelados como rgb<1,1,1>
y objetos levemente menos blancos sólo serían ligeramente más
oscuros. Es especialmente difícil modelar superficies parcialmente reflexivas de un modo realista. Objetos mediana o escasamente
brillantes tienden a parecer demasiado brillantes cuando se
vuelven reflexivos. Si se reduce el valor de reflexión también
tienden a oscurecerse demasiado los objetos brillantes. Por ellos
se ha añadido la palabra clave exponent
. Esto
provoca intensidades no-lineales de reflexión. El valor por defecto
de 1.0 produce una curva lineal. Valores más bajos oscurecen las
intensidades medio-bajas y mantienen brillantes las reflexiones de
alta intensidad. Ésta es una característica experimental diseñada
para su uso artístico y no se corresponde directamente con ninguna
propiedad reflectante del mundo real.
Reflexión Variable
Muchos materiales, como el agua, la cerámica
o el linóleo son más reflexivos cuando se observan desde ángulos
pequeños. Esto puede simularse añadiendo una reflexión mínima en
la declaración reflection (...)
.
Por ejemplo:
finish { reflection { 0.03, 1 }}
usa la misma función que la reflexión estándar, pero el primer
parámetro ajusta la reflexión mínima. Puede ser un vector de
color o un valor decimal (que será automáticamente promocionado a
un vector gris). Éste valor mínimo indica lo reflexiva que será
la superficie cuando sea observada desde una dirección paralela a
su normal.
El segundo parámetro ajusta la reflexión máxima, que también
puede ser un vector de color o un valor decimal (promocionado a un
vector gris). Este parámetro máximo indica cuan reflexiva será
la superficie cuando sea observada desde 90º a su normal.
Aviso: Se puede ajustar la reflexión máxima a un valor menor que la reflexión mínima, aunque el resultado sea algo que no ocurre nunca en la naturaleza.
Cuando se añade la palabra clave fresnel
, se utilizará
la función de reflexión Fresnel en lugar de la reflexión estándar. Aquí se calculará la
reflexión utilizando el acabado
IOR (Índice de Refracción) del objeto. Por ello, cuando se utilice
un tipo de reflexión fresnel se necesitará también una declaración interior
(ior IOR)
, aún con pigmentos opacos. Recuerda que en la
vida real la mayoría de los objetos opacos tienen una delgada capa
transparente en su superficie reflectante, que tiene un IOR.
Uno de los rasgos de POV-Ray es la reflexión variable, incluyendo
reflexión realista Fresnel (ver sección "Reflexión
Variable"). Desafortunadamente, cuando ésta se complementa con transmisión constante (transmit
), la textura puede
parecer irreal. Esta irrealidad se debe a que en la escena se
rompen las leyes de conservación de la energía. Mientras la
cantidad de luz reflejada cambia, la cantidad de luz transmitida
también debería cambiar (en una relación de toma-y-daca).
Esto puede conseguirse añadiendo la palabra clave conserve_energy
(conservar energía) al acabado del objeto. Cuando se habilita
conserve_energy, POV-Ray multiplicará la cantidad filtrada y
transmitida por el valor que quede de restar el valor de la
reflexión (por ejemplo, si la reflexión se ajusta al 80%, entonces
filtrar/transmitir se multiplicará por 20%).
La Iridescencia, o interferencia de película fina de
Newton, imita el efecto de la luz en superficies con una
microscópica capa transparente superpuesta. El efecto es parecido
al de una gota de aceite en un charco de agua o al color irisado
de una pompa de jabón. Este efecto se controla mediante la
declaración irid
dentro de una declaración de finish
.
Este parámetro modifica el color de la superficie en función del ángulo entre la fuente de luz y la superficie. Ya que este efecto funciona en conjunción con la posición y ángulo de las fuentes de luz, no se comporta siguiendo el mismo procedimiento que un patrón de pigmento.
La sintaxis es:
IRID: irid { Cantidad_Irid [IRID_ITEMS...] } IRID_ITEMS: thickness Cantidad | turbulence Cantidad
El parámetro requerido Cantidad_Irid
es la contribución
al efecto iridiscente del color de la superficie. Como norma general
hay que mantener este valor en .25 (25% de contribución) o menos,
aunque también se pueden experimentar otros valores. Si la
superficie se vuelve demasiado blanca, intenta bajar el valor de diffuse
y, posiblemente, también el de ambient
en la
superficie.
La palabra clave thickness
representa el grosor de la película. Éste es un parámetro incómodo
de manejar, ya que el valor del grosor no guarda relación con la escala
del objeto, sino que afecta a la escala del efecto. Una película
delgada tiene una alta frecuencia de cambios de color (ej: una
pompa de jabón), mientras que una película gruesa presentará
mayores áreas del mismo color (un objeto envuelto en plástico
transparente). El valor por defecto es 0.
El grosor de la película puede variarse
mediante la palabra clave turbulence
. Con iridiscencia
sólo se puede ajustar la cantidad de turbulencia, ya que los
valores de octaves, lambda y omega se ajustan internamente y no
necesitan ser modificados por el usuario. Este parámetro varía un
único valor, el grosor. Por ello, en vez de utilizar un vector,
como se suele utilizar para turbulence
, sólo se debe
indicar un valor en coma flotante.
Además de esto, perturbar la normal de la superficie usando patrones de bultos también afectará a la iridiscencia.
Para los curiosos, la interferencia de película delgada ocurre cuando el rayo golpea la superficie de la película y una parte de la luz es reflejada, mientras que otra porción es transmitida al interior de la película. Este rayo de subsuperficie viaja a través de la película y rebota en el substrato opaco del objeto. La luz emerge de la película ligeramente cambiada de fase junto con el rayo que rebota en la superficie.
Este cambio de fase produce interferencias que varían con la longitud de onda de los colores del componente, resultando que en ocasiones las ondas son alteradas, y en ocasiones anuladas. Cuando estos componentes se recombinan, el resultado es la iridiscencia. Consúltese también ajustes globales "Longitud de onda de iridiscencia".
El concepto utilizado en este efecto viene del libro Fundamentos de Gráficos Tridimensionales por Computadora, por Alan Watt (Addison-Wesley).
|