|
"Cuando dispongo varios objetos transparentes uno enfrente de otro o dentro de otro, POV-Ray calcula unos pocos de ellos, pero el resto aparece completamente negro, no importa los valores de transparencia les haya dado."
Respuesta breve: Pruebe incrementando el valor de max_trace_level
en el bloque global_settings(el valor por definición es
5).
Respuesta larga:
El trazado de rayos -Raytracing- tiene una característica particular: Puede calcular la reflexión y la refracción. Cada vez que un rayo alcanza la superficie de un objeto, el programa averigua si la superficie es reflectiva y/o refractiva. Si es asi, lanza otro rayo a partir de este punto en la dirección apropiada.
Ahora, imagine que tenemos una esfera de vidrio. El vidrio refleja y refracta, por eso cuando el rayo alcanza a la esfera, se calculan dos rayos adicionales, uno fuera de la esfera (para la reflexión) y otro por dentro (para la refracción). Ahora el rayo interior tocará a la esfera otra vez, para que dos nuevos rayos sean calculados de nuevo, y así una y otra vez...
Se observa fácilmente que debe haber un número máximo de reflexiones/refracciones calculadas, porque de otra manera POV-Ray estaría calculando solo ese pixel por siempre.
Este número puede determinarse con la opción max_trace_level
en el bloque global_settings.
El valor por definición es 5, que es suficiente para la mayoría de las
escenas. Algunas veces no lo es (especialmente cuando hay bastantes
objetos semi-transparentes uno encima de otro) y entonces debe
incrementarlo.
Pruebe algo como esto:
global_settings
{
max_trace_level 10
}
"Cuando hago una imagen con POV-Ray, parece que use solamente unos pocos colores puesto que obtengo bandas de color o círculos concéntricos de color o lo que sea, donde no debiera. ¿Cómo puedo hacer que POV-Ray use más colores? "
POV-Ray siempre genera imágenes en color verdadero (true color), esto es, con 16777216 colores, 256 tonos de rojo, 256 tonos de verde y 256 tonos de azul (esto puede cambiar si la salida es en PNG o en TGA blanco y negro -B/W- pero esto es irrelevante en esta respuesta).
Por eso, POV-Ray no es el culpable, ya que siempre utiliza la máxima resolución de color disponible para el formato de salida de la imagen.
Este problema sucede a menudo cuando se utilizan ventanas de 16-bit de color (sólo 65536 colores, el llamado modo hicolor ) y al abrir una imagen creada por POV-Ray en un programa que no hace mezcla de color (dither) de la imagen. La imagen sigue siendo de color verdadero, pero el programa es incapaz de mostrar todos los colores, y solo muestra 65536 de ellos ("dithering" es un método que "simula" más colores mezclando pixeles de dos colores adyacentes para emular los colores que se producen entre ellos).
Por eso el problema no está en POV-Ray, sino en su programa visualizador de imágenes. Aun si POV-Ray muestra una imagen pobre durante la renderización, es porque usted tiene una resolución de muy pocos colores. La imagen creada poseerá un rango de color completo.
"Cuando roto un objeto, éste desaparece de la imagen o se mueve de manera muy extraña. ¿Por qué? "
Necesita comprender cómo funciona la rotación en POV-Ray.
Los objetos se rotan siempre alrededor de los ejes.
Cuando usted rota, por ejemplo, <20,0,0>, eso
significa que está rotando 20 grados alrededor del eje de las X (contra
el sentido de las agujas del reloj). Esto es independiende de la
ubicación del objeto: Siempre rota alrededor de los ejes (¿Cuál es el
centro del objeto? ¿Cómo lo ha posicionado?). Esto implica que si el
objeto no está centrado en el eje, orbitará alrededor de este eje como
la Luna
orbita la Tierra (mostrando siempre el mismo lado hacia el planeta
Tierra).
Es una práctica recomendable definir todos los objetos centrados en
el origen (ej, su 'centro' se localiza en <0,0,0>).
Luego puede rotarlos arbitrariamente. Después de esto puede
trasladarlos a su ubicación designada en la escena (porque nunca puede
decir si lo rotará otro dia).
Y que pasaría si, después de todo, tuviera definido un objeto muy
complicado, cuyo centro no estuviera en el origen, y deseara rotarlo
alrededor de su centro? Puede trasladarlo a su origen, rotarlo, y luego
devolverlo a su lugar. Suponga que el centro del objeto se localiza en <10,20,-30>;
puede rotarlo así:
translate -<10,20,-30>
rotate <rotacion deseada>
translate <10,20,-30>
"Si le digo a POV-Ray que renderice una imagen cuadrada o que de alguna manera cambie la proporción de tamaño -aspect ratio- la imagen de salida aparece distorsionada. ¿Qué estoy haciendo mal? "
El problema es que la cámara está definida para una relación de tamaño =aspect ratio- de 4/3, mientras que la imagen que está tratando de renderizar tiene una proporción de 1/1 (o la que sea).
Puede cambiar la relación de tamaño con el indicador 'right' en el bloque del código de la cámara. La manera generalizada de determinar la proporción correcta para las dimensiones de su imagen es:
camera
{ right x*ImageWidth/ImageHeight
(otros ajustes de la camara...)
}
Este indicador puede usarse también para cambiar la orientación de POV-Ray (ver la pregunta acerca de Moray y la orientacón de POV-Ray para más detalles).
Nota: Se pudiera pensar "Por qué POV-Ray no determina automáticamente la relación de tamaño de la cámara de acuerdo con la resolución de la imagen?".
Hay algo errado en este pensamiento : Asume que los pixeles son siempre cuadrados (ie. la proporción de los pixeles es 1/1). La lógica de este comportamiento se aclara con un ejemplo:
Suponga que diseña una escena usando el aspecto de proporción o relación de tamaño regular de 4/3, como siempre (como 320x240, 640x480 y asi). Esta imagen está diseñada para lucir bien cuando se vea en un monitor 4/3 (como los de las computadoras personales).
Ahora quiere renderizar esta imagen para la imagen de inicio de Windows. La resolución de la imagen de inicio de Windows es 320x400. Esta resolución no tiene una proporción de 4/3 y los pixeles no son cuadrados (los pixeles tienen una proporción de 1/0.6 en vez de 1/1). Ahora, cuando renderiza su imagen a la resolución de 320x400 con POV-Ray y la muestra en el monitor ajustado a esa resolución (como está definida en el inicio de windows cuando se muestra la imagen de inicio), la proporción será la correcta (y no aparecerá estirada en ninguna dirección).
Si hubiese cambiado la proporción de la cámara a 320/400 (en vez de usar el valor por definición de 4/3) hubiera obtenido no solamente una imagen diferente (mostrando partes de la escena que no aparecen en el original o partes escondidas visibles en el original), sino que hubiera aparecido estirada al mostrarse a la resolución de 320x400 de la pantalla.
Así, la relación de tamaño de la cámara es la proporción o aspecto de la imagen final en la pantalla, vista en su resolución final (que puede no ser la de 4/3). Puesto que la pantalla del monitor tiene una proporción de 4/3, es el valor por definición de la cámara también.
Este es el típico 'problema de superficies coincidentes'. Sucede cuando dos superficies están exactamente en el mismo lugar. Por ejemplo:
union
{ box { <-1,0,-1>,<1,-2,1> texture { Texture1 } }
box { <-2,0,-2>,<2,-1,2> texture { Texture2 } }
}
La superficie superior de la primera caja coincide con la superficie superior de la segunda. Cuando un rayo alcanza esta área, POV-Ray debe decidir cuál superficie es la más cercana. No puede, puesto que están exactamente en el mismo lugar. La que escoja depende en realidad de los cálculos del valor flotante, error de rounding , parámetros iniciales, posición de la cámara, etc, y varía de pixel a pixel, generando esos aparentes pixeles "al azar".
La solución al problema pasa por decidir que superficie desea que esté arriba, y trasladar esa superficie sólo un poco, para que sobresalga pasando la superficie no deseada. En el ejemplo anterior, si queremos, por ejemplo, que la segunda caja esté encima, tecleamos algo como:
union
{ box { <-1,0,-1>,<1,-2,1> texture { Texture1 } }
box { <-2,0.001,-2>,<2,-1,2> texture { Texture2 } }
}
Nótese que un problema similar aparece cuando una fuente de luz está exactamente sobre una superficie: POV-Ray no puede calcular exactamente si está dentro o fuera de la superficie, por eso parecen pixeles oscuros (de sombra) en cada superficie que esa luz ilumine.
La única cosa que funciona con sky_sphere son los
pigmentos. Las texturas y acabados no están permitidos. Sin embargo, no
se desanime, porque todavía puede utilizar las texturas de stars.inc
con el método siguiente:
Extraiga solamente el pigmento de las texturas declaradas. Por ejemplo:
texture
{ pigment { color_map { [0 rgb ...][.5 rgb ...][1.0 rgb ...] } scale ... }
finish { ... }
}
se convierte en:
pigment { color_map { [0 rgb ...][.5 rgb ...][1.0 rgb ...] } scale ... }
La razón de esto es que sky_sphere no tiene una
superficie, no es un objeto real. Es en realidad sólo una versión
extendida de la característica del fondo que extrae un color de un
pigmento en vez de ser un color plano. A causa de esto, las
características de normal y acabado, que dependen de las
características del objeto para su cálculo, no pueden usarse. Las
texturas de stars.inc estaban destinadas a mapearse sobre
una esfera real, y pueden ser utilizadas así:
sphere
{ 0, 1
hollow // para que no interfiera con ningún efecto de media en la escena
texture { SuTexturaCeleste }
scale 100000
}
POV-Ray puede aplicar filter o transmit solamente a imágenes con
paletas de 8 bit y 256 colores. Puesto que la mayoría de las imágenes .tga,
.png, y .bmp
son de 24bit y 16 millones de colores, no funcionan con filter o
transmit. Si necesita usar filter o transmit con sus mapas de imágenes
debe reducir la profundidad de color a un formato que soporte 256
colores, como el formato de imagen .gif.
Revise también la documentación de POV-Ray respecto del uso del
canal alfa -alpha channel- de los archivos .png si
necesita áreas transparentes específicas.
"Mi isosuperficie no renderiza apropiadamente; hay aberturas o ruido al azar en areas grandes e incluso toda la isosuperficie simplemente desaparece."
La causa más común para este tipo de fenómeno con las isosuperficies
es un valor de max_gradient damasiado bajo. Utilice evaluate
para hacer que POV-Ray calcule un max_gradient apropiado
para la superficie (recuerde especificar un max_gradient
sensible, inclusive al usar evaluate o el resultado puede
no ser correcto).
Algunas veces un valor de accuracy demasiado alto
también puede causar problemas aún cuando el valor de max_gradient
esté bien. Si el probar con lo anterior no parece ayudar, pruebe
también disminuyendo accuracy.
Recuerde que especificar un max_gradient que sea
demasiado alto para una isosuperficie, aunque dé el resultado correcto,
es innecesariamente lento, por eso debe calcular el max_gradient
apropiado para cada isosuperficie que haga.
Nótese que hay ciertas funciones patológicas en las que ningún valor
de max_gradient
o accuracy ayudará.
Estas funciones usualmente tienen descontinuidades o propiedades
"enfermizas" similares. Con estas sólo le queda encontrar una solución
que proporcione el mejor intercambio calidad/velocidad. Las
isosuperficies trabajan mejor con funciones que generan superficies
suaves.
|