|
El problema es causado por el algoritmo de renderizado utilizado en POV-Ray. El texto que sigue es bastante técnico, así que si sólo desea leer acerca de posibles soluciones, puede pasar ésta y avanzar hasta la siguiente subsección
El problema es que el motor de renderizado asume que los objetos retornan la normal del vector como verdadera para el punto dado en su superficie. Para que un objeto se renderice correctamente, debe dar la normal exacta del vector(ie. un vector que es exactamente perpendicular a la superficie de ese punto).
Las mallas suavizadas y los campos de altura no hacen esto. Estos retornan normales de vectores que no son perpendiculares a la superficie real, y esto causa errores en el renderizado.
Lo que sucede es que cuando el motor de renderizado emite un rayo y éste llega a la superficie de un objeto, el motor le pregunta al objeto "¿cuál es la normal de vector en este punto de tu superficie?". Ahora, si el ángulo entre la normal de vector que retorna y el vector del rayo es menor de 90 grados (esto es, la normal del vector apunta fuera del punto de vista del punto que comienza el rayo), entonces el motor revierte la normal de vector que ha retornado. Esto es esencial para que la luz funcione apropiadamente (si la normal no es revertida en este caso, obtendría toda clase de errores de iluminación, ej, superficies que están iluminadas desde atrás cuando no debieran, o superficies sin iluminación aún cuando se hallan frente a una fuente luminosa).
Este asume que la normal de vector retornado por el objeto es una normal de vector verdadera, y funciona perfectamente cuando es así.
Sin embargo, si el objeto retorna una normal de vector errónea, ej, un vector que no es perpendicular a la superficie, pueden ocurrir errores de renderizado.
Los triángulos suavizados y los campos de altura hacen esto, y el precio a pagar son los artefactos en la iluminación en ciertas situaciones.
El artefacto se produce cuando la verdadera normal de vector tendría un ángulo mayor de 90 grados con respecto al rayo, pero el vector real que retorna el objeto tiene un ángulo menor de 90 grados con respecto al rayo. En este caso el motor de renderizado revierte la normal del vector aún cuando no debería. Esto es porque asume que es la normal verdadera del vector, cuando de hecho no lo es.
Este problema pudiera resolverse tomando la decisión de invertir la normal de retorno del vector de acuerdo con la normal verdadera del vector de la superficie en vez de hacerlo con la que retorna. Sin embargo, debido a la implementación interna del motor de renderizado en el actual POV-Ray 3.5, no es trivial hacer esto. Puede que se resuelva en POV-Ray 4.0, en el que el motor de renderizado será escrito otra vez y en el que esta clase de cosas pueden tomarse en cuenta desde el principio.
|