5.2.6  Opciones de Trazado

Existe más de una forma de trazar un rayo. A veces, existe un compromiso entre calidad y velocidad. Sucede en ocasiones que las opciones diseñadas para trazar más rápido pueden hacer más lento el trazado. Esta sección trata de las opciones con las que se le dice a POV-Ray cómo trazar los rayos con los ajustes apropiados de calidad y velocidad.

5.2.6.1  Ajustes de calidad

Quality=n Ajusta la calidad de trazado a n (0 <= n <= 11)
+Qn Igual que Quality=n

La opción Quality=n, o el interruptor +Qn, te permiten especificar la calidad de trazado de la imagen. Puedes desear bajar la calidad en trazados de prueba y subirla para el trazado final. Los ajustes de la calidad suelen hacerse por eliminación de algunos de los cálculos que normalmente se hacen. Por ejemplo, los ajustes por debajo de 4 no trazan las sombras. Por debajo de 8 no se usan la reflexión ni la refracción. Los valores duplicados se reservan para futuras expansiones. Éstos son los valores para los diferentes niveles de calidad:

0, 1 Representa sólo colores rápidos. Sólo se usa luz de ambiente completa. Los colores rápidos se usan hasta el nivel 5.
2, 3 Muestra la luz difusa y de ambiente especificada en las texturas.
4 Traza sombras, pero no luces extendidas.
5 Traza sombras, incluyendo luces extendidas.
6, 7 Procesa los patrones de textura, activa el uso de fotones
8 Calcula los rayos reflejados, refractados y transmitidos.
9, 10, 11 Calcula el medio y la radiosidad

El valor por defecto, si no se especifica otro, es 9.

5.2.6.2  Control Automático de la Acotación

Bounding=booleano Activa o desactiva la acotación.
+MB Activa la acotación, fijando el umbral en 25 o el valor previo.
-MB Desactiva la acotación.
Bounding_Threshold=n Establece el umbral de acotación a n
+MBn Activa la acotación estableciendo el umbral a n
-MBn Desactiva la acotación, fijando el umbral a n para futuros usos
Light_Buffer=booleano Activa o desactiva el buffer de luz
+UL Activa el buffer de luz
-UL Desactiva el buffer de luz
Vista_Buffer=booleano Activa o desactiva el buffer de vistas
+UV Activa el buffer de vistas
-UV Desactiva el buffer de vistas

POV-Ray utiliza varios sistemas de subdivisión espacial para acelerar las comprobaciones de intersección rayo-objeto. El sistema primario consiste en una jerarquía de cajas de acotación anidadas. Este sistema descompone todos los objetos finitos de la escena en invisibles cajas rectangulares que se organizan en un árbol jerárquico. Antes de comprobar los objetos contenidos en las cajas de acotación, se desciende por el árbol, y sólo se comprueban aquellos objetos cuyas acotaciones sean tocadas por el rayo. Ello mejora considerablemente la velocidad de trazado. Sin embargo, en escenas con pocos objetos, el trabajo extra de usar cajas de acotación no compensa el esfuerzo. La opción Bounding=off o el interruptor -MB te permiten forzar la desactivación de la acotación. Por defecto, está activada.

Tanto la opción Bounding_Threshold=n como el interruptor +MBn te permiten establecer el número mínimo de objetos (umbral) necesario para usar la acotación. El valor por defecto es +MB25, lo que significa que si tu escena tiene menos de 25 objetos, POV-Ray desactivará automáticamente la acotación, ya que el trabajo extra no vale la pena. Normalmente es una buena idea usar un valor menor, como por ejemplo +MB5.

Además, POV-Ray usa otros sistemas, conocidos como buffer de vistas y buffer de luces para acelerar aun más el trazado. Estos sistemas sólo funcionan cuando la acotación está activada y cuando exista un número de objetos mayor que el umbral de acotación especificado. El buffer de vistas se crea proyectando la jerarquía de cajas de acotación en la pantalla, y determinando las áreas rectangulares cubiertas por cada elemento de la jerarquía. Sólo se comprueban con el rayo primario aquellos objetos cuyos rectángulos contengan el píxel dado. El buffer de vistas sólo se puede usar con las cámaras ortográfica y de perspectiva, ya que se basan en un punto de vista fijo y una proyección razonable (p.ej.: las líneas rectas deben de ser rectas también en la proyección).

El buffer de luz se crea encerrando cada fuente de luz en una caja imaginaria y proyectando la jerarquía de cajas de acotación en cada uno de sus lados. Ya que esto se basa en un punto de luz fijo, no se puede usar con las luces de área.

Los rayos reflejados y transmitidos no usan en absoluto ninguno de los dos buffers.

Los valores por defecto son Vista_Buffer=on o +UV, y Light_Buffer=on o +UL. La opción para desactivar estas características puede utilizarse para demostrar su utilidad, y también como protección ante errores desconocidos que pudieran existir en estos sistemas de acotación.

En general, cualquier objeto finito, y muchos tipos de CSG de objetos finitos, responden correctamente al sistema de acotación. Además, las burbujas y mallas usan sistemas propios de acotación, que no pueden controlarse con las opciones anteriores, pero que pueden desactivarse con las sentencias adecuadas en el archivo de escena (véase las secciones "Objeto Burbuja" y "Objeto Malla" para más detalles). Los objetos de texto se dividen en letras individuales que se acotan con la jerarquía de cajas. Algunas combinaciones de CSG entre objetos finitos e infinitos también se acotan automáticamente. El resultado final es que raramente tendrás que añadir cajas de acotación manualmente, como era necesario en versiones anteriores de POV-Ray, a no ser que utilices muchos objetos infinitos.

5.2.6.3  Eliminación de la Acotación del Usuario

Remove_Bounds=bool Activa o desactiva la eliminación de acotaciones innecesarias
+UR Activa la eliminación de acotaciones innecesarias
-UR Desactiva la eliminación de acotaciones innecesarias
Split_Unions=bool Activa o desactiva el desglose de acotaciones en uniones
+SU Activa el desglose de acotaciones en uniones
-SU Desactiva el desglose de acotaciones en uniones

Las versiones antiguas de POV-Ray no tenían ningún sistema de acotación automática o subdivisión espacial para acelerar las comprobaciones de intersección entre rayo y objeto. El usuario debía crear manualmente las cajas de acotación para acelerar el trazado. Desde la versión 3.0, POV-Ray posee un sistema de acotación automática más sofisticado que el de versiones anteriores. En muchos casos, la acotación manual de las viejas escenas es más lenta que el nuevo sistema automático. Es por ello que POV-Ray elimina las acotaciones manuales cuando cree que será beneficioso. En raras ocasiones, es posible que quieras mantener la acotación manual. Algunas escenas viejas usaban incorrectamente la acotación donde deberían haber usado el recorte (clipping). Si POV-Ray elimina las acotaciones, estas escenas no trazan la imagen esperada. Para desactivar la eliminación automática de las acotaciones manuales, debes especificar Remove_Bounds=off o usar -UR. El valor por defecto es Remove_Bounds=on.

Un área en la que "el jurado no se pone de acuerdo" es el desglose de las uniones acotadas manualmente. Las uniones sin acotar siempre se desglosan en sus componentes para que la acotación automática funcione mejor. Muchos usuarios no acotan las uniones ya que saben que normalmente es más lento. Si acotas manualmente una unión, asumimos que realmente quieres acotarla, así que por seguridad no eliminaremos estas acotaciones Si quieres que se eliminen automáticamente, deberás especificar Split_Unions=on o usar +SU. El valor por defecto es Split_Unions=off.

5.2.6.4  Opciones del Anti-alias

Antialias=bool Activa o desactiva el anti-alias
+A Activa el anti-alias y establece el umbral a 0.3 o el valor previo
-A Desactiva el anti-alias
Sampling_Method=n Selecciona el método de muestreo del anti-alias (sólo son válidos 1 o 2)
+AMn Ídem que Sampling_Method=n
Antialias_Threshold=n.n Establece el umbral del anti-alias
+An.n Activa el anti-alias con un umbral de n.n
-An.n Desactiva el anti-alias (umbral a n.n para uso futuro)
Jitter=bool Activa o desactiva el agitado del rayo
+J Activa el agitado del rayo con un valor de 1.0 o el valor previo
-J Desactiva el agitado del rayo
Jitter_Amount=n.n Fija el valor de agitado a n.n. Si n.n <= 0, se desactivará.
+Jn.n Activa el agitado, fijando un valor de n.n. Si n.n <= 0, se desactivará.
-Jn.n Desactiva el agitado, pero establece un valor de n.n para uso futuro
Antialias_Depth=n Establece la profundidad del anti-alias (1 <= n <= 9)
+Rn Ídem que Antialias_Depth=n

El proceso de trazado de rayos es en realidad un muestreo digital (discreto) de la imagen, normalmente con una muestra por píxel. Este muestreo puede introducir diferentes errores, como líneas curvas o inclinadas con apariencia escalonada, líneas finas rotas o discontinuas, efectos de tipo moaré, patrones de interferencia y pérdida de detalle o incluso de objetos que son tan pequeños que residen entre dos píxeles adyacentes. El efecto responsable de estos errores es llamado alias.

El anti alias es cualquier técnica que se use para intentar eliminar estos errores, o para reducir su efecto negativo en la imagen. En general, el anti alias hace que la imagen trazada aparezca suavizada. La opción Antialias=on o el interruptor +A activan el sistema de anti alias de POV-Ray.

Cuando se activa el anti alias, POV-Ray intenta reducir los errores enviando más de un rayo de visualización por cada píxel, y calculando la media entre los resultados para determinar el color aparente del píxel. Esta técnica se llama supermuestreo, y puede mejorar la apariencia de la imagen final, pero también incrementa drásticamente el tiempo requerido para trazar una escena, ya que deben realizarse muchos más cálculos.

POV-Ray te ofrece la opción de usar dos métodos distintos de supermuestreo. La opción Sampling_Method=n o el interruptor +AMn, seleccionan uno de los dos tipos: 1 o 2. El hecho de seleccionar alguno de los métodos no activa el anti alias. Éste ha de ser activado usando el interruptor +A o la opción Antialias=on.

El tipo 1 es un método de supermuestreo adaptativo y no recursivo. Es adaptativo ya que no todos los píxeles son supermuestreados. El tipo 2 es un método adaptativo y recursivo. Es recursivo ya que el píxel se subdivide recursivamente, y adaptativo por que el nivel de esta recursión es variable.

Por defecto, con el método no recursivo (+AM1), POV-Ray traza inicialmente un rayo por píxel. Si el color del píxel difiere del de sus vecinos (arriba o a la izqda.) por encima de un umbral, se supermuestrea enviando un número dado de rayos adicionales. El umbral por defecto es 0.3, pero puede cambiarse usando la opción Antialias_Threshold=n.n. Si se usan los interruptores, el umbral puede especificarse detrás de +A. Por ejemplo, +A0.1 activa el anti alias y establece el umbral en 0.1.

El cálculo de comparación con el umbral se detalla a continuación. Si r1, g1, b1 y r2, g2, b2 son los componentes rgb de dos píxeles, la diferencia entre ambos píxeles se calcula con la fórmula:

  dif = abs(r1-r2) + abs(g1-g2) + abs(b1-b2)

Si esta diferencia es mayor que el umbral, ambos píxeles se supermuestrean. Los valores rgb están en el rango de 0.0 a 1.0, así que lo más que pueden diferir es 3.0. Si el umbral del anti alias es 0.0, se supermuestrean todos los píxeles. Si el umbral es de 3.0, no se usa el anti alias. Los valores bajos del umbral implican mayor nivel de anti alias, pero menor velocidad de trazado. Usa el anti alias para la versión final de tu imagen, no para los bocetos. Cuanto más bajo es el contraste, menor debería ser el umbral. Imágenes con alto contraste pueden salvarse con valores más altos del umbral. Los valores buenos parecen oscilar entre 0.2 y 0.4.

Cuando se usa el método no recursivo, el número por defecto de supermuestras por píxel es de nueve, localizadas en una rejilla de 3x3. La opción Antialias_Depth=n o el interruptor +Rn controlan el número de filas y columnas de muestras que se tomará por cada píxel supermuestreado. Por ejemplo, +R4 nos daría 4x4=16 muestras por píxel.

El segundo método de supermuestreo adaptativo recursivo, empieza por trazar cuatro rayos desde las esquinas de cada píxel. Si el color resultante difiere en más del valor umbral, se tomarán muestras adicionales. Ello se hace recursivamente, dividiendo el píxel en cuatro sub-píxeles que se trazan por separado y se comprueban para ver si hay que seguir subdividiendo. La ventaja de este método es el reducido número de rayos que deben ser trazados. Las muestras comunes a píxeles y sub-píxeles adyacentes se guardan y se reutilizan para evitar re-trazar rayos. El carácter recursivo de este método hace que el supermuestreo se concentre en aquellas partes del píxel que probablemente más lo necesitan (véase la figura inferior).

Ejemplo de como funciona el supermuestreo recursivo
Ejemplo de cómo funciona el supermuestreo recursivo

El número máximo de subdivisiones se especifica con la opción Antialias_Depth=n o el interruptor +Rn. Véase la diferencia con el método adaptativo no recursivo, en el que se especifica el número total de supermuestras. El número de muestras por píxel que se obtiene para un número máximo de subdivisiones n, se facilita en la siguiente tabla:

+Rn Número de muestras por píxel supermuestreado con el método no recursivo +AM1 Número máximo de muestras por píxel supermuestreado con el método recursivo +AM2
1 1 9
2 4 25
3 9 81
4 16 289
5 25 1089
6 36 4225
7 49 16641
8 64 66049
9 81 263169

Ten en cuenta que el número máximo de muestras en el método recursivo raramente se alcanza para un píxel dado. Si el método recursivo se usa sin anti alias, cada píxel será la media de los rayos trazados desde sus esquinas. En muchos casos, un nivel de recursión de 3 es suficiente.

Otra manera de reducir los efectos secundarios del anti alias es introducir ruido en el proceso de muestreo. A esto se le llama jittering (agitado) y funciona gracias al sistema humano de vision, que ignora el ruido más fácilmente que los patrones regulares. La localización de los supermuestreos se sacude o agita ligeramente mientras se usa el anti alias. El agitado está activado por defecto, pero puede desactivarse con la opción Jitter=off o el interruptor -J. El nivel de agitado puede ajustarse la opción Jitter_Amount=n.n. Cuando se usan los interruptores, deberá especificarse tras el interruptor +J. Por ejemplo, +J0.5 usaría la mitad del agitado normal. El valor por defecto es 1.0, que es el máximo agitado que asegura que todas las supermuestras permanecen dentro del píxel original.

Observa que este agitado es aleatorio e irrepetible, por lo que no deberías usarlo en secuencias de animación, ya que los píxeles con anti alias variarán de fotograma en fotograma, produciendo un ruido molesto.

Si no se usa el anti-alias, sólo se tomará una muestra por píxel, sin importar el método de muestreo especificado.