6.10.2  Usando el mapeo de fotones en tus escenas

Cuando se diseña una escena con fotones, sirve de ayuda pensar en los objetos como si hubiera dos categorías. Los objetos de la primera categoría mostrarán cáusticas de fotón cuando sean alcanzados por los fotones. Los objetos en la segunda categoría provocan cáusticas de fotón mediante la reflexión o refracción de los fotones. Algunos objetos pueden estar en las dos categorías, y algunos objetos pueden no estar en ninguna.

Categoría 1 - Objetos que muestran cáusticas de fotón

Por defecto, todos los objetos se hallan en la primera categoría. Cuando un fotón alcanza un objeto, el fotón se almacena para utilizarse más tarde en la generación de las cáusticas en ese objeto. Esto significa que, por defecto, las cáusticas de los fotones pueden aparecer en cualquier superficie. Para acelerar el proceso de interpretación (render), se pueden quitar objetos de esta categoría. Esto se hace con la línea photons(collect off). Si se usa esta sintaxis, las cáusticas de los fotones no aparecerán en el objeto. Esto ahorrará tanto memoria como tiempo de cálculo durante el proceso de generación de la escena.

Categoría 2 - Objetos que provocan cáusticas de fotón

Por defecto, no hay objetos de la segunda categoría. Si se quiere que un objeto provoque cáusticas, es necesario hacer dos cosas. Primero, convertir el objeto en "objetivo". Esto se hace con el identificador target. Esto provoca que las fuentes de luz arrojen fotones en el objeto. Segundo, es necesario especificar si el objeto producirá reflexión de los fotones, refracción de los fotones, o ambas. Esto se hace mediante los identificadores reflection on y refraction on. Para permitir que un objeto refleje o refracte fotones, se deben utilizar las siguientes líneas de código dentro del objeto:

photons{
  target
  reflection on
  refraction on
}

Como regla general, no se querrá que un objeto esté en las dos categorías. La mayoría de los objetos que provocan cáusticas de fotón no tienen mucho color o brillo por sí mismos. Normalmente sólo refractan o reflejan lo que tienen a su alrededor. Por este motivo, generalmente es un desperdicio de tiempo mostrar las cáusticas de fotón en dichas superficies. Aunque se calculasen, los efectos de las cáusticas serían tan tenues que pasarían desapercibidos.

A veces, puede que también se quiera añadir photons(collect off) a otros objetos nítidos o reflexivos, aunque no sean objetivo (target) de los fotones. De nuevo, esto se hace para prevenir cálculos innecesarios de iluminación cáustica.

Por último, tal vez se quiera activar la reflexión o refracción de fotón para una superficie, aunque ésta no sea un objetivo (target). Esto permite que los fotones indirectos (fotones que ya han colisionado con una superficie y han sido reflejados o refractados) prosigan su viaje tras impactar con este objeto.

6.10.2.1  Ajustes globales de fotones

BLOQUE_GLOBAL_DE_FOTONES:
photons {
  spacing <espacio_entre_fotones> | count <fotones_emitidos>

  [gather <recoleccion_minima>, <recoleccion_maxima>]
  [media <pasos_maximos> [,<factor>]]
  [jitter <cantidad>]
  [max_trace_level <nivel_de_trazado_de_fotones>]
  [adc_bailout <adc_bailout_de_fotones>]
  [save_file "nombrearchivo" | load_file "nombrearchivo"]
  [autostop <fraccion_de_autoparada>]
  [expand_thresholds <incremento_porcentual>, <expansion_minima>]
  [radius <radio_de_recoleccion>,<multiplicador>,
          <radio_de_recoleccion_del_medio>,<multiplicador>]
}

Todos los valores por defecto para fotones:

Global :
  expand_min    : 40 
  gather        : 20, 100
  jitter        : 0.4
  media         : 0

Object :
  collect       : on
  refraction    : off
  reflection    : off
  split_union   : on
  target        : 1.0

Light_source:
  area_light    : off
  refraction    : off
  reflection    : off

Para especificar las opciones de concurrencia y recolección de los fotones se debe añadir un bloque photons a la sección global_settings de la escena.

Por ejemplo:

 global_settings {
   photons {
     count 20000
     autostop 0
     jitter .4
   }
 }

El número de fotones generado se puede establecer mediante uno de los identificadores spacing o count:

El identificador gather permite especificar cuántos fotones se recogen en cada punto durante un paso normal de la generación. El primer número (por defecto 20) es el mínimo número a recoger, mientras que el segundo número (por defecto 100) es el máximo. Estos valores son adecuados y sólo deben modificarse si se sabe lo que se está haciendo.

El identificador media activa los fotones en el medio. El parámetro especifica el número máximo de fotones a depositar en un intervalo. El parámetro opcional factor especifica la diferencia del espaciado del medio en comparación con el espaciado de la superficie. Se puede incrementar el factor y disminuir el máximo de pasos si se depositan demasiados fotones en el medio.

El identificador jitter especifica la cantidad de temblor en el muestreo de los rayos de luz durante el paso de pre-proceso. El valor por defecto es adecuado y normalmente no es necesario cambiarlo.

Los identificadores max_trace_level y adc_bailout permiten especificar estos atributos para el paso de trazado de fotones. Si no se quieren especificar, se utilizarán los valores del paso principal de trazado de rayos. [N.T. max_trace_level y adc_bailout se amplían en la sección 6.11: Ajustes globales]

Los identificadores save_file y load_file permiten guardar y cargar mapas de fotón. Si se carga un mapa de fotón, no se dispararán fotones. El archivo con el mapa de fotón contiene todos los fotones de la superficie (cáustica) y del medio.

radius se utiliza para reunir fotones. Cuanto mayor sea el radio, más tiempo llevará recolectar los fotones. Pero si se usa un radio demasiado pequeño, puede que no se obtengan suficientes fotones para realizar un buen cálculo. Por lo tanto, elegir un buen radio es importante. Normalmente POV-Ray mira a través del mapa de fotón y utiliza determinados análisis estadísticos de cara a determinar un radio razonable. A veces hace un buen trabajo, a veces no. El identificador radius permite anular o ajustar la estimación de POV-Ray.

Parámetros de radius (todos son opcionales):

  1. Establecer manualmente el radio de recolección para fotones de superficie. Si es 0 o se deja como esté, POV-Ray hará un análisis y una estimación.
  2. Ajustar el radio para los fotones de superficie indicando un multiplicador. Si POV-Ray, por ejemplo, escoge un radio que parece demasiado grande (la generación es demasiado lenta), se puede usar "radius ,0.5" para reducir el radio (multiplicando por 0.5) y acelerar el proceso de generación disminuyendo la calidad.
  3. Establecer manualmente el radio de recolección para fotones del medio.
  4. Ajustar el radio para los fotones del medio indicando un multiplicador.

Los identificadores autostop y expand_thresholds se explicarán más adelante.

6.10.2.2  Lanzando fotones contra un objeto

BLOQUE_FOTONES_DE_OBJETO:
photons {
  [target [<multiplicador_de_espaciado>]]
  [refraction on|off]
  [reflection on|off]
  [collect on|off]
  [pass_through]
}

Para lanzar fotones a un objeto, se necesita decir a POV que el objeto recibe fotones. Para esto, se crea un bloque photons ( ) dentro del objeto. Por ejemplo:

 object {
   MiObjeto
   photons {
     target
     refraction on
     reflection on
     collect off
   }
 }

En este ejemplo, el objeto a un tiempo refleja y refracta los fotones. Cualquiera de estas opciones puede desactivarse (especificando reflection off, por ejemplo). De este modo, se tiene un objeto con un acabado reflexivo que no refleja fotones por razones de memoria y velocidad.

El identificador target convierte el objeto en objetivo.

La densidad de los fotones se puede ajustar especificando el multiplicador de espaciado. Si, por ejemplo, se especifica a 0.5, entonces la separación para los fotones que impactan en este objeto será de 1/2 de la distancia de separación para otros objetos.

Nota: Esto representa unas cuatro veces los fotones de superficie y unas ocho veces los fotones del medio.

El identificador collect off provoca que el objeto ignore los fotones. Los fotones no se depositan ni se recogen en ese objeto.

El identificador pass_through provoca que los fotones pasen a través del objeto sin verse afectados en su camino hacia el objeto destino. Una vez el fotón alcanza el objeto destino, se ignorará indicador pass_through. Éste es básicamente el equivalente para los fotones del identificador no_shadow, con la excepción de que el medio interno del objeto sigue siendo afectado por los fotones (a menos que se haya indicado collect off en el medio). Si se usa el identificador no_shadow, el objeto será etiquetado como pass_through automáticamente. Entonces se puede desactivar pass_through, en caso de que sea necesario, utilizando photons { pass_through off }.

Nota: Los fotones no se disparan a un objeto a menos que se especifique el identificador target. Limitarse a activar la refracción no es suficiente.

Cuando se disparan fotones a una unión CSG, a veces puede resultar provechoso utilizar split_union off dentro de la unión. POV-Ray se verá obligado a disparar al objeto en su totalidad, en lugar de partirlo y disparar fotones a las partes que lo componen.

6.10.2.3  Los fotones y las fuentes de luz

 BLOQUE_FOTONES_DE_FUENTE_DE_LUZ:
 photons {
   [refraction on | off]
   [reflection on | off]
   [area_light]
 }

Ejemplo:

 light_source {
   MiLuz
   photons {
     refraction on
     reflection on
   }
 }

A veces, se quiere que los fotones se lancen desde una fuente de luz y no desde otra. En este caso se pueden activar los fotones para un objeto, pero especificando photons {reflection off refraction off} en la definición de la fuente de luz. También se puede desactivar sólo la refracción o sólo la refracción para cada una de las fuentes de luz.

6.10.2.4  Los fotones y el medio

 global_settings {
   photons {
     count 10000
     media 100
   }
 }

Los fotones también interactúan completamente con el medio. Esto significa que los fotones volumétricos se almacenan en la dispersión del medio. Esta capacidad se activa utilizando el identificador media dentro de un bloque photons.

Para acumular fotones en el medio, POV deposita fotones a su paso por el medio durante la fase de trazado de fotones al generar la imagen. Depositará estos fotones al tiempo que traza las cáusticas de fotones, de modo que el número de los fotones del medio depende del número de cáusticas de fotones. Al tiempo que un rayo de luz pasa a través de los una sección del medio, los fotones se depositan, separados aproximadamente por la misma distancia que separa a los fotones de superficie.

Se puede especificar un factor como segundo parámetro opcional del identificador media. Si, por ejemplo, se pone el factor a 2.0, entonces los fotones tendrán una separación dos veces mayor de la que hubieran tenido en otras circunstancias.

A veces, sin embargo, si una sección del medio es muy grande, utilizando esta configuración se podría crear un enorme número de fotones muy rápido y desbordar la memoria. Por lo tanto, siguiendo el ejemplo del identificador media, se debe especificar el número máximo de fotones que se depositan por cada rayo que viaja a través de una sección del medio. Un valor de 100 debería funcionar bien en la mayoría de los casos.

Se puede establecer collect off dentro del medio para hacer que el medio ignore los fotones. Los fotones no serán depositados ni recogidos en un medio que los está ignorando. Los fotones tampoco serán recogidos ni depositados en un medio sin dispersión. Sin embargo, si existen múltiples medios en el mismo espacio, y al menos uno de ellos no ignora los fotones y tiene dispersión, entonces los fotones se depositarán en ese intervalo y serán recolectados para su uso en todo el medio de ese intervalo.