6.5.7  Fuentes de luz

Las fuentes de luz (light_source) no son realmente objetos, ya que no tienen una forma propia visible. Son solamente puntos o áreas que emiten luz. Se categorizan como objetos debido a que pueden combinarse con éstos usando la unión CSG. La sintaxis completa es la siguiente:

FUENTE_DE_LUZ:
    light_source
    {
        <Location>, COLOR
        [MODIFICADORES_DE_LUZ...]
    }
MODIFICADOR_DE_LUZ:
    TIPO_DE_LUZ | 
    ITEMS_LUZ_CONICA | ITEMS_LUZ_PARALELA | ITEMS_LUZ_DE_AREA |
    MODIFICADORES_GENERICOS_DE_LUZ
TIPO_DE_LUZ:
    spotlight | shadowless | cylinder | parallel
ITEM_LUZ_CONICA:
    radius Radius | falloff Falloff | tightness Tightness |
    point_at <Spot>
ITEM_LUZ_PARALELA:
    point_at <Spot>
ITEM_LUZ_DE_AREA:
    area_light <Axis_1>, <Axis_2>, Size_1, Size_2 |
    adaptive Adaptive | jitter Jitter | circular | orient
MODIFICADORES_GENERICOS_DE_LUZ:
    looks_like { OBJETO } |
    TRANSFORMACION |
    fade_distance Fade_Distance |
    fade_power Fade_Power | media_attenuation [Bool] |
    media_interaction [Bool] | projected_through

Valores por defecto de las fuentes de luz:

TIPO_DE_LUZ        : pointlight  
falloff           : 70				 
media_interaction : on
media_attenuation : off
point_at          : <0,0,0>
radius            : 70
tightness         : 10

Los diferentes tipos de fuentes de luz y sus modificadores opcionales se describen en las siguientes secciones.

Los dos primeros ítems son comunes en todas las fuentes de luz. El vector <Location> indica el lugar de emplazamiento de la luz. COLOR especifica el color de la luz. Sólo los componentes rojo, verde y azul son significativos. Cualquier valor de filtro o transmisión es ignorado.

Nota: Este parámetro controla tanto el color de la luz como su intensidad. Por ejemplo, un color rgb <0.5,0.5,0.5> dará una luz con la mitad de intensidad que rgb <1,1,1>.

Todos las palabras clave o items de la sintaxis anterior pueden aparecer en cualquier orden. Algunos identificadores sólo tienen efecto si se especifican también otros. Éstos suelen estar agrupados en categorías funcionales para dejar más claro cuáles de ellos trabajan conjuntamente. Los modificadores generales funcionan con todos los tipos de luz y cualquier combinación de opciones.

Nota: Las transformaciones, tales como translacion, rotacion etc., pueden aplicarse a la fuente de luz, pero no puede usarse ningún otro de los modificadores de objetos.

Hay tres tipos de luz, que son mutuamente exclusivos. Si no se especifica ninguno, por defecto será una luz puntual. Las otras opciones son la luz cónica (spotlight) y la luz cilíndrica (cylinder).

6.5.7.1  Luces puntuales

Las luces puntuales son el tipo más simple de fuentes de luz. Una luz puntual envía rayos de luz, del color especificado, en todas las direcciones. Es el tipo de luz por defecto. El emplazamiento y el color son los únicos parámetros requeridos. Por ejemplo:

  light_source {
    <1000,1000,-1000>, rgb <1,0.75,0> //una luz anaranjada
  }

6.5.7.2  Fuentes de luz cónicas

Normalmente la luz irradia desde la fuente en todas las direcciones por igual. Sin embargo, podemos usar la palabra clave spotlight para crear un cono de luz más intensa en el centro, y que decae hacia los bordes suavemente.

Aunque el cono de luz decaiga suavemente en los bordes, los objetos iluminados por la luz cónica seguirán proyectando sombras nítidas. La sintaxis es la siguiente:

FUENTE_DE_LUZ_CONICA:
    light_source
    {
        <Location>, COLOR spotlight
        [MODIFICADORES_DE_LUZ...]
    }
MODIFICADOR_DE_LUZ:
    ITEMS_LUZ_CONICA | ITEMS_LUZ_DE_AREA | MODIFICADORES_GENERICOS_DE_LUZ
ITEM_LUZ_CONICA:
    radius Radius | falloff Falloff | tightness Tightness |
    point_at <Spot>
Valores por defecto:
  radius:    30 degrees
  falloff:   45 degrees
  tightness:  0

La palabra clave point_at especifica a qué punto del espacio debe apuntar la luz cónica. La línea que va desde el emplazamiento de la luz hasta la coordenada point_at, define el centro del cono de luz. La siguiente ilustración puede ser de ayuda para comprender cómo se relacionan los diferentes valores.

Geometria de una luz conica
Geometría de una luz cónica

Las palabras clave falloff, radius, y tightness controlan la manera en que la luz decae hacia los bordes del cono. Éstas sólo funcionan cuando se han especificado los tipos de luz spotlight o cylinder.

La palabra clave falloff especifica el tamaño total del cono. Éste es el punto donde la luz decae hasta intensidad 0. El valor de coma flotante que debes especificar es el ángulo, en grados, entre el borde del cono y la línea central. El radio ( radius) especifica el tamaño del "punto caliente" en el centro del cono de luz. Este punto caliente es un cono de luz más intensa dentro del cono del foco, con la misma línea central. El valor del radio indica el ángulo, en grados, entre el borde de este cono interior y la línea central. La luz en el interior de este cono tiene una intensidad uniforme. La luz entre los dos conos decae hasta 0.

Por ejemplo, asumiendo un valor tightness 0, con radius 10 y falloff 20, la luz desde el centro hasta un radio de 10 grados retiene toda la intensidad. Desde 10 a 20 grados desde la linea central, la luz decae hasta una intensidad 0. Para valores mayores de 20 no hay luz.

Nota: Si los valores del radio y el decaimiento son iguales o muy cercanos, la intensidad de la luz decae rápidamente y la luz cónica tendrá un borde nítido.

Los valores de los ángulos para radius y tightness son la mitad del ángulo abierto de los respectivos conos, y nunca pueden ser mayores de 90 grados. La luz decaerá suavemente entre los dos ángulos, de la manera ilustrada en las siguientes figuras (siempre que el ángulo del radio no sea negativo).

Curvas de intensidad para un decaimiento de 45 grados y distintos radios
Curvas de intensidad para un decaimiento de 45 grados y distintos radios
Curvas de intensidad para un radio de 45 grados y distintos angulos de decaimiento
Curvas de intensidad para un radio de 45 grados y distintos ángulos de decaimiento

La palabra clave tightness (tensión) se usa para especificar un suavizado exponencial de los bordes. Cualquier valor distinto de 0 afecta a la luz en el interior de ambos conos. La intensidad de la luz, para un ángulo dado desde la línea central, será intensidad_total * cos(ángulo) * tightness. El valor por defecto de tightness es 0. Los valores bajos crean una luz cónica más intensa, haciéndola más ancha y con bordes más nítidos. Los valores altos crearán luces cónicas menos intensas, con un punto central más pequeño y unos bordes más suaves. Los valores aceptables varían entre 0 y 100.

Intensidad para un radio de 30 grados y un decaimiento de 60 grados, con diferentes valores de tightness
Intensidad para un radio de 30 grados y un decaimiento de 60 grados, con diferentes valores de "tightness"

Observa en estas figuras que el radio y el decaimiento interactúan con el parámetro tightness. Para controlar sólo con este parámetro la luz cónica, usa radius 0 falloff 90. Como puedes ver en la figura inferior, en este caso el ángulo de decaimiento no surte efecto, y el área iluminada viene determinada tan sólo por el valor del parámetro tightness.

Curvas de intensidad para angulos de radio negativos y diferentes valores de tightness
Curvas de intensidad para ángulos de radio negativos y diferentes valores de "tightness"

Las luces cónicas pueden usarse en cualquier situación en que pueda usarse una fuente de luz normal. Como todas las fuentes de luz, son invisibles. Pueden usarse al mismo tiempo que el área de luz.

6.5.7.3  Fuentes de luz cilíndricas

La palabra clave cylinder dentro de una fuente de luz, especifica que ésta es cilíndrica, lo cual es muy útil para recrear rayos láser. Las fuentes de luz cilíndricas funcionan de forma muy parecida a las cónicas, excepto en que los rayos se ciñen a un cilindro en vez de a un cono. La sintaxis es la siguiente:

FUENTE_DE_LUZ_CILINDRICA:
    light_source
    {
        <Location>, COLOR cylinder
        [MODIFICADORES_DE_LUZ...]
    }
MODIFICADOR_DE_LUZ:
    ITEMS_LUZ_CONICA | ITEMS_LUZ_DE_AREA | MODIFICADORES_GENERICOS_DE_LUZ
ITEM_LUZ_CONICA:
    radius Radius | falloff Falloff | tightness Tightness |
    point_at <Spot>
Valores por defecto:
  radius:     0.75 grados
  falloff:    1    grados
  tightness:  0

Las palabras clave point_at, radius, falloff y tightness controlan las mismas características que en las luces cónicas. Mira la sección "Fuentes de luz cónica".

Debes tener en cuenta que la luz cilíndrica es realmente una luz puntual. Los rayos se emiten desde un punto en todas direcciones, aunque se ven confinados en un cilindro. Los rayos de una luz cilíndrica no son paralelos.

6.5.7.4  Fuente de luz paralela

Ésta es su sintaxis:

light_source {
  <Location>, COLOR
  [ITEMS_FUENTE_DE_LUZ...]
  parallel
  point_at <Spot>
}

La palabra clave parallel puede usarse con cualquier tipo de fuente de luz.

Nota: En las fuentes de luz puntual normales, el vector point_at debe ir después de la palabra parallel.

Las luces paralelas son útiles para simular luces muy distantes, como el sol. Como el nombre sugiere, hace que los rayos de luz viajen paralelos.

Técnicamente, esto se hace lanzando los rayos desde el punto más cercano en un plano, hasta el punto de intersección con el objeto. Este plano viene determinado por la perpendicular definida por el vector de posición location y el parámetro point_at.

Al escoger el emplazamiento de una fuente de luz paralela y la distancia desde ésta a los objetos iluminados, hay que tener dos cosas en cuenta:

  1. Cualquier parte del objeto por encima del plano de la luz, será iluminado de acuerdo a la dirección de la luz, pero no provocará ni recibirá sombras.
  2. Los parámetros fade_distance y fade_power utilizan la posición de la luz para determinar la distancia implicada en la atenuación de la luz, así que ésta se comportará igual que en una luz puntual. El área de luz también utiliza la posición de la luz para sus cálculos.

6.5.7.5  Luz de área

Las fuentes de luz de área ocupan un área del espacio finita de 1 o 2 dimensiones. Proyectan sombras suaves dado que los objetos pueden bloquear la luz parcialmente, mientras que en una luz puntual la luz simplemente se bloquea o no se bloquea (totalmente).

La palabra clave area_light en POV-Ray crea unas fuentes de forma rectangular, como un panel del luz. En vez de realizar los complejos cálculos que se requieren para modelar un área de luz verdadera, se aproxima mediante una matriz de luces puntuales repartidas sobre el área ocupada por la luz. Este efecto se aplica sólo a las sombras. La iluminacion del objeto se realiza, sin embargo, como si se tratara de una luz puntual. La intensidad de cada luz puntual de la matriz se disminuye para que el total de luz emitida sea el especificado en la declaración del color de la luz. Su sintaxis es la siguiente:

FUENTE_DE_LUZ_DE_AREA:

  light_source {
    <Location>, COLOR
    area_light
    AXIS_1_VECTOR, AXIS_2_VECTOR, Size_1, Size_2
    [adaptive Adaptive] [ jitter ]
    [ circular ] [ orient ]
    [ MODIFICADORES_DE_LUZ...]
  }

Cualquier tipo de luz puede ser una luz de área

La instrucción area_light define la posición, el tamaño y la orientación del área de luz, así como el número de luces en la matriz de luces. El vector de posición es el centro de un rectángulo definido por los vectores <Axis_1> y <Axis_2>. Éstos especifican la longitud y dirección de los bordes de la luz.

Luz de area de 4x4, con su posicion y vectores de orientacion
Luz de área de 4x4, con su posición y vectores de orientación

Como las luces de área son de forma rectangular, estos vectores deben ser perpendiculares entre sí. Cuanto mayor sea el tamaño de la luz, más delgada será la parte suave de las sombras. Los valores enteros Size_1 y Size_2 especifican el número de filas y columnas de la matriz del área de luz. Cuantas más luces uses, más suaves serán las sombras, pero se incrementará el tiempo de renderizado.

Nota: es posible especificar los parámetros del foco (spotlight) junto con los de la luz de área, para crear focos con luz de área. De esta manera se puede acelerar el renderizado de escenas con luz de área, ya que se reducen los cálculos de sombras suaves sólo a aquellas partes de la escena que lo necesitan.

Se puede crear un efecto interesante con una luz lineal. En lugar de tener forma rectangular, una luz lineal se extiende a lo largo de una línea, como un tubo fluorescente muy fino. Para crear este tipo de luz, usa una luz de área con una de las dimensiones ajustada a 1.

El comando jitter es opcional. Si se especifica, las posiciones de los puntos de luz en la matriz se agitan aleatoriamente para eliminar los efectos de regularidad en las sombras (bandas de sombra). El agitado es completamente aleatorio para cada renderizado, y no debería de usarse en las animaciones.

El comando adaptive se usa para activar el muestreo adaptativo en las fuentes de luz. Por defecto, POV-Ray calcula la cantidad de luz recibida por una superficie, desde una luz de área, por medio de un rayo de pruebas lanzado desde cada punto de luz dentro de la matriz. Como puedes imaginar, esto es bastante lento. El muestreo adaptativo intenta aproximar estos cálculos usando el menor número de rayos posible. El número especificado tras la sentencia controla la cantidad de muestreo a utilizar. Cuanto más alto sea este número, mayor precisión tendrán las sombras, pero serán más lentas de renderizar. Si no estás seguro de qué valor usar, para empezar puedes especificar adaptive 1. Esta sentencia sólo acepta valores enteros, y no puede ser menor de 0.

Cuando calcula el muestreo adaptativo, POV-Ray empieza por lanzar un rayo de prueba hacia cada una de las esquinas de la luz de área. Si la cantidad de luz recibida por las cuatro esquinas es aproximadamente la misma, se asume que la luz de área es totalmente visible o totalmente invisible. La intensidad de la luz se calcula entonces como la media de la intensidad recibida desde las esquinas. Sin embargo, si la intensidad de luz de las esquinas difiere de forma significativa, se asume que la luz de área es sólo parcialmente visible. La luz de área se divide en cuatro cuartos, y cada sección es tratada de la forma anteriormente descrita. Ello permite a POV-Ray aproximar rápidamente la cantidad de luz de área visible, sin tener que lanzar un rayo de prueba desde cada punto de la matriz. A continuacion se ilustra este proceso:

Muestreo adaptativo de una luz de area.
Muestreo adaptativo de una luz de área.

Aunque que el método de muestreo adaptativo es rápido (relativamente hablando), puede a veces producir errores en las sombras. La solución consiste en reducir la cantidad de muestreo adaptativo. El número tras la sentencia adaptive especifica el número de veces que la luz de área será dividida antes de que empiece la fase adaptativa. Por ejemplo, si usas adaptive 0 se lanzará un mínimo de 4 rayos hacia la luz. Si usas adaptive 1 se lanzará un minimo de 9 rayos. Con adaptive 2 se lanzarán 25 rayos, con adaptive 3 81 rayos, y así sucesivamente. Obviamente, cuantos más rayos de sombra se lanzan, más lento será el renderizado, así que deberías usar el mínimo valor posible que obtenga buenos resultados.

El número de rayos nunca excede el valor especificado de filas y columnas en la luz de área. Por ejemplo, area_light x,y,4,4 especifica una matriz de luces de 4x4. Si usas adaptive 3, debería empezarse el muestreo adaptativo con una matriz de 9x9, pero como la matriz de la luz es menor, no se realiza ningún muestreo y se utiliza directamente la matriz de 4x4.

El comando circular se ha añadido a las luces de área para simular mejor las sombras circulares. Con luces de área normales, los puntos de luz se reparten en una rejilla rectangular, con lo que proyectan sombras parcialmente rectangulares alrededor de los objetos, incluyendo los circulares. Con la inclusión del comando circular en la luz de área, la luz se comprime y estira para que parezca un círculo: de esta manera se simulan mejor las luces circulares o esféricas.

Hay que recordar varios aspectos:

El comando orient se ha añadido para simular mejores sombras suaves. Sin este modificador, debes crear concienzudamente los vectores de los ejes de una luz de área, ya que éstos definen tanto el área como la orientación. Las luces de área son bidimensionales: los objetos más encarados con el área de la luz reciben mayor cantidad de luz que los que se encuentran a los lados.

Luz de area encarando un objeto
Luz de área encarando un objeto

Realmente, el área de luz en los lados de la matriz se reduce a una simple línea, que proyecta sombras suaves sólo en una dirección.

Luz de area lateral al objeto
Luz de área lateral al objeto

Entre estos dos extremos, la superficie de área que emite luz progresa gradualmente. Incluyendo el modificador orient en la luz de área, la luz se gira para que siempre encare el punto que se está comprobando. La orientación inicial no es importante, sólo tienes que considerar las dimensiones del área al especificar los vectores. De hecho, esto hace que la luz de área parezca realmente tridimensional (esto es: una luz de área con ejes perpendiculares del mismo tamaño y dimensiones, que usa los modificadores circular y orient, simula una luz esférica).

El modificador de orientación tiene unas cuantas restricciones:

  1. Sólo puede usarse con áreas de luz circulares.
  2. Los dos ejes de la luz de área deben ser de igual longitud.
  3. Los dos ejes de la luz de área deben usar el mismo número de puntos de luz, el cual debe ser mayor de 1.

Ello es debido a que sin estas restricciones se pueden obtener resultados impredecibles.

Si alguna de las dos primeras reglas se transgrede, POV-Ray emitirá un mensaje de alerta y corregirá automáticamente el problema. En el caso de transgredir la tercera, sólo se emitirá un mensaje de error, y POV-Ray no corregirá el problema automáticamente.

6.5.7.6  Luces sin sombra

Usando el comando shadowless puedes hacer que una fuente de luz no proyecte sombras. Estas luces se suelen llamar "luces de relleno". Existe otra forma de simular luz de ambiente, pero las luces sin sombra tienen la ventaja de poseer una fuente definida. Su sintaxis es la siguiente:

FUENTE_DE_LUZ_SIN_SOMBRAS:
    light_source
    {
        <Location>, COLOR shadowless
        [MODIFICADORES_DE_LUZ...]
    }
MODIFICADOR_DE_LUZ:
    ITEMS_LUZ_DE_AREA | MODIFICADORES_GENERICOS_DE_LUZ

El comando shadowless puede usarse con todos los tipos de fuentes de luz. La única restricción es que el comando debe aparecer antes o después de todas las palabras reservadas de los comandos spotlight y cylinder. Si se mezclan, se obtiene un mensaje de error indicando que la palabra que sigue al comando shadowless no puede usarse con una fuente de luz estándar. También debes observar que las luces sin sombras no provocan brillos (highlights) en los objetos iluminados.

6.5.7.7  Apariencia (looks_like)

Normalmente, la fuente de luz no tiene una forma visible. La luz simplemente irradia de un punto o área invisible. Puedes dar cualquier forma a una fuente de luz utilizando la sentencia looks_like {OBJETO }.

El objeto contenido en la sentencia llevará un modificador no_shadow implícito, para que éste no bloquee la luz. Sin este modificador implícito, la luz no podría salir del interior del objeto y éste proyectaría una sombra sobre toda la escena.

Si quieres que el objeto asociado a la fuente de luz bloquee la luz de ésta, utiliza una unión de la siguiente forma:

  union {
    light_source { <100, 200, -300> color White }
    object { Mi_objeto_lampara }
  }

Presumiblemente, deberás hacer que partes de la lámpara sean transparentes, para dejar que escape algo de luz.

6.5.7.8  Proyección (projected_through)

Sintaxis:

  light_source {
    <Location>, COLOR
    [ITEMS_FUNTE_DE_LUZ...]
    projected_through { OBJETO }
  }

La sentencia projected_through puede usarse con cualquier tipo de luz. También puede usarse cualquier objeto, siempre que haya sido previamente declarado.

Proyectar una luz a través de un objeto puede ser considerado como lo contrario de la proyección de una sombra: sólo los rayos de luz que intersectan con el objeto contribuirán a iluminar la escena.

Este modificador también funciona con luces de área, provocando focos de luz con bordes suaves.

Los objetos situados entre la luz y el objeto a través del cual ésta se proyecta, no producen ninguna sombra para esta luz. Además, cualquier superficie en el interior del objeto de proyección tampoco provocará sombras.

Cualquier textura o interior del objeto de proyección será eliminada y el objeto no se mostrará en la escena.

6.5.7.9  Atenuación de la luz

Por defecto, POV-Ray no atenúa la luz que irradia de las fuentes de luz en función de la distancia. Para obtener un efecto más realista pueden usarse los modificadores fade_distance y fade_power, seguidos de unos valores de coma flotante, que ayudan a modelar la atenuación en función de la distancia recorrida.

El modificador fade_distance se usa para especificar la distancia a la cual llega la intensidad total de la luz, esto es, la intensidad que fue indicada en la especificación del color. La atenuacion real de la luz se describe con fade_power Fade_Power, que determina la tasa de disminucion. Por ejemplo, pueden usarse una disminucion lineal o cuadrática especificando respectivamente 1 o 2 para el valor de fade_power. La fórmula concreta utilizada para calcular el factor de atenuación es la siguiente:


siendo d la distancia recorrida por la luz.

Curvas de atenuacion de la luz para diversos valores de fade_power
Curvas de atenuación de la luz para diversos valores de fade_power

No debes pasar por alto dos hechos importantes. Primero, para una distancia de atenuación (fade_Distance) mayor que 1, la intensidad de la luz a distancias menores realmente se incrementa. Ello es necesario para obtener el color de la fuente de luz cuando la distancia recorrida es igual al valor especificado para fade_distance. Segundo, sólo se atenua la luz que proviene directamente de la fuente: la luz reflejada o refractada no se atenúa con la distancia.

6.5.7.10  Interacción con el medio atmosférico

Por defecto, las fuentes de luz interactuan con los medios atmosfericos añadidos a la escena. Este comportamiento puede desactivarse usando media_interaction off en la declaración de la fuente de luz.

Nota: en POV-Ray 3.0 esta característica se controlaba con el comando atmosphere.

6.5.7.11  Atenuación debida al medio atmosférico

Normalmente, la luz proveniente de las fuentes de luz no se ve influenciada por la niebla o el medio atmosférico. Puede activarse la atenuación atmosférica usando el modificador media_attenuation on en la fuente de luz. Toda la luz proveniente de esa fuente será entonces atenuada al atravesar la niebla o el medio, con una disminución exponencial dependiente de la niebla o medio. Si no hay ningún medio o niebla, no se efectuará ninguna atenuación.

Nota: en POV-Ray 3.0 esta característica se controlaba con el comando atmospheric_attenuation.