6.11.7   Nivel máximo de trazado (Max_Trace_Level)

En escenas con muchas superficies reflexivas y transparentes POV-Ray puede sobrecargarse trazando reflexiones múltiples y refracciones que muy poco contribuyen con el color de un píxel en particular. El ajuste global max_trace_level define el número entero máximo de niveles recursivos que POV-Ray trazará por cada rayo.

 global_settings { max_trace_level Level }

Este número se usa cuando un rayo es reflejado o está pasando a través de un objeto transparente y cuando se proyectan rayos de sombra. Cuando un rayo se topa con una superficie reflexiva, produce otro rayo para ver qué punto refleja. Éste es el nivel de trazado uno. Si éste toca otra superficie reflexiva se produce otro rayo, que sería el nivel dos. El máximo nivel por definición es cinco.

Una mejora en velocidad añadida a POV-Ray en la versión 3.0 es Adaptive Depth Control (ADC). Cada vez que se produce un nuevo rayo como resultado de una reflexión o refracción, su contribución al color general del píxel se reduce por la cantidad de reflexión o por el valor del filtro de la superficie refractiva. En algún punto, esta contribución puede considerarse como insignificante y no hay razón para trazar más rayos. El control de profundidad adaptivo es lo que vigila esta contribución y hace la decisión de cuándo detenerla. En escenas que usan una cantidad considerable de superficies parcialmente reflexivas o de superficies refractivas, esto puede resultar en una reducción considerable del número de rayos emitidos y hace más segura la utilización de valores max_trace_level más altos.

Esta reducción en la contribución de color es el resultado de escalar por la cantidad de reflexión y/o los valores de filtros en cada superficie, de manera que un espejo perfecto o una superficie perfectamente transparente no sea intervenida por ADC. Puede ver los resultados de ADC al observar los índices Rays Saved (rayos ahorrados) y Highest Trace Level (nivel de trazado máximo) en la pantalla de estadística.

El punto en el cual la contribución de un rayo es considerada como insignificante está controlada por el valor adc_bailout. El valor por definición es 1/255 ó aproximadamente 0.0039 puesto que un cambio menor que eso pudiera no ser visible en una imagen de 24 bits. Generalmente, este valor es perfectamente adecuado y debería dejarse tal cual está. Ajustar el adc_bailout a 0 inhabilitará ADC, dependiendo completamente de max_trace_level para definir un límite superior del número de rayos trazados.

Si max_trace_level se alcanza antes que se consiga una superficie no reflexiva y si ADC no ha permitido una salida temprana del árbol de rayos, el color es devuelto como negro. Incremente max_trace_level si observa áreas negras en una superficie reflexiva donde debiera haber otro color.

El otro síntoma que podrá observar se refiere a objetos transparentes. De hecho, intente hacer una unión de esferas concéntricas con una textura transparente en ellas. Haga diez esferas en la unión, con radios de 1 a 10 y ejecute la escena. La imagen mostrará las primeras esferas correctamente, pero las siguientes en negro. Esto es porque se usa un nuevo nivel cada vez que se pasa a través de una superficie transparente. Incremente max_trace_level para resolver el problema.

Note: que elevando max_trace_level usará más memoria y tiempo y pudiera hacer que el programa deje de funcionar debido a un error de stack overflow, aunque ADC aliviará esto en gran medida.

Los valores para max_trace_level pueden ajustarse hasta un máximo de 256. Si no hay un valor predeterminado de max_trace_level y se alcanza el valor por definición en el renderizado de la escena, se generará un alerta.