POVRAY en Castellano

Un sitio de intercambio sobre POVRAY

Como lo prometido es deuda, voy a comentar el uso de las isosuperficies en mis dos últimas imágenes que he colocado en la galería de fotos.
Las isosuperficies me parecen ideales para modelar objetos con detalles complejos, rugosos o objetos de la naturaleza con apariencia fractal (montañas, rocas, corteza de arboles...)


En la imagen del desván las he usado para crear una pared vieja y desconchada. Utiliza una función del tipo z + pigment{bozo}. El mapa de color permite ajustar el tamaño y densidad de los desconchones de la pared; las irregularidades se obtienen con los ajustes de turbulencia.
A la hora de la textura utilizo tres capas de textura que son:
- Una con un mapa de pigmentos en gradiente para que las partes no desconchadas tengan la textura de cal y los agujeros sean de adobe.
- Una capa de textura de suciedad con un patron gradiente con algo de turbulencia para que las zonas inferiores esten mas oscuras.
- Una última capa de textura slope que simula la acumulación de polvo. Esta textura no es muy evidente y la he utilizado en todos los objetos para darle un aspecto más envejecido.

En cuanto a las vigas, la función es abs(x) + abs(z) + pigment{ Granite}. Con el mapa de color y la escala apropiada se puede simular el aspecto de una viga envejecida. La textura es una simple textura de madera.

La pared con ventana, es una simple diferencia de una caja. Inicialmente modelé una isosuperficie con el hueco de la ventana para que también las irregularidades se prolongaran, pero a la hora de texturizar me daba problemas al utilizar un gradiente como patrón. De todas formas en vez de restar una caja podía haber restado otra isosuperficie y solventaba el problema; pero ay! caí tarde en ese detalle.

NOTA: El código fuente esta disponible para cualquiera que me lo solicite.

USANDO ISOSUPERFICIES (II)

Continuo comentando algo más acerca de las isosuperficies con la imagen de la botella.


Las isosuperficies son estupendas en entornos naturales. En este caso se utilizan para la arena de la playa con una función y - f_bozo - f_wrinkles. La primera función (Y) define un plano X-Z, la función f_bozo añade al plano ondulaciones. Se puede escalar cada eje multiplicando o dividiendo por un factor para hacer que las pequeñas dunas de la arena sean alargadas como es más natural. Finalmente la función wrinkles añade irregularidades de menor escala a la arena para que no sea tan uniforme. Además la textura utilizada incorpora una perturbación de la normal para simular el granulado de la arena.

Las rocas que hay en segundo plano utilizan una función f_sphere - f_crackle + f_granite. La función f_sphere crea evidentemente una esfera a la que se añade la función f_crackle para crear las rocas. El usar una esfera como base sirve para formar un cúmulo de rocas que no tenga el corte brusco del contained_by. Por último, la función f_granite erosiona la roca para darle un aspecto más parecido a una roca castigada por el mar. La función f_granite se escalo en cada eje en un factor distinto, aplanando las estrias que se forman en el eje Y.

El corcho de la botella tambien es una isosuperficie, en este caso simplemente f_bozo - valor. La función f_bozo en los tres ejes crea un patrón de ruido que al restarle un valor forma una estructura similar a un queso gruyere. Modificando el valor que restamos agrandamos o reducimos los agujeros. Como las isosuperficies solo pueden estar contenidas en una caja o una esfera, para crear la forma del corcho utilicé una intersección entre la isosuperficie y un cono truncado. En estos casos puede ser necesario añadir la palabra all_intersecction.

En internet se puede encontrar un manual de Mike Williams muy util sobre el uso de la isosuperficies y las superficies paramétricas. Tiene una orientación muy matemática (de hecho este señor es matemático), pero es muy util porque define una infinidad de funciones muy interesantes y vistosas. Aqui está la dirección: http://www.econym.demon.co.uk/isotut

Espero que os sea util

Compartir 

Agregar un comentario

¡Tienes que ser miembro de POVRAY en Castellano para agregar comentarios!

Únete a esta red social

Rafael Comentario de Rafael el diciembre 30, 2008 a las 6:43am
He visto el manual de Mike Williams y creo que está muy bien. Digo creo porque mi inglés es como el de aquel chiste:
Le dice un amigo a otro: -Oye, ¿tu dominas el inglés?
y el amigo le responde: -Si es pequeñito y se deja...
La verdad es que al ser tan técnico se entiende bastante bien, no obstante sería de una gran ayuda disponer de la traducción al castellano (animo desde aquí a su traducción a quien esté capacitado para realizarla).
Hay un pequeño problema (mayor que el idioma): la página de Ingo Janssen no está, por lo que no se encuentra el param.inc, si alguien me pudiera facilitar el archivo se lo agradecería.
Saludos.
Francisco Javier Cruz Jiménez Comentario de Francisco Javier Cruz Jiménez el octubre 29, 2008 a las 10:11am
Finalmente, quiero comentar las limitaciones de la instrucción que he explicado anteriormente.
Puesto que es un height_field, se trata de una malla poligonal que forma diversas alturas en el eje Y, pero jamas podrá curvarse sobre si misma como en el caso de una isosuperficie. Esto significa que cuando se define una función, por ejemplo f_wrinkles(x,y,z) los unicos ejes que se consideran son el eje X y el Y. Esto es así porque lo que se obtiene es una evaluación de la función en el plano X-Y.

Otro efecto negativo a tener en cuenta es que el resultado de la función en algun punto del height field se un valor mayor de 1 o inferior a 0 por lo que nos encontraremos con cortes en el height field. Cuando esto ocurre, el valor se recorta en tantos enteros como exceda del rango permitido. Por ejemplo, si el valor resultante es una altura de 1,3 el valor que se representa es 0,3.

Espero que os sirvan los comentarios que he hecho sobre las isosuperficies y los height field y que disfruteis utilizandolos tanto como yo.
Saludos
Francisco Javier Cruz Jiménez Comentario de Francisco Javier Cruz Jiménez el octubre 29, 2008 a las 9:29am
Después de todo lo comentado, cabría preguntarse ¿se pueden utilizar las características de las isosuperficies con height field?. La respuesta es si. En el comentario anterior explicaba como se usa Height field utilizando como entrada un patron de pigmento. Ahora explicaré como utilizar como entrada una función directa como las de las isosuperficies. La sintaxis es simple:
height_field { function RESX, RESY { DEFINICION_FUNCION } }

Donde, RESX y RESY es la resolución del Height_field y DEFINICION_FUNCION cualquier definición de una función. Lo podemos ver mejor con un ejemplo en el que veamos el potencial de la instrucción y las limitaciones:

Primero declaramos algunas funciones de varios tipos:
#declare fn_pigmGranite = function { pigment { granite turbulence 1 color_map { [0 rgb 0] [1 rgb 1] } scale 5 } }

#declare fn_pigmMarble = function {pigment { marble color_map { [0 rgb 0] [1 rgb 1] } sine_wave turbulence .5 scale 0.25 rotate y*50 } }
En este caso son funciones pigment y su funcionamiento es el normal de un pigmento. El mapa de color se utilizará para extraer el valor que devuelva la función, para ello hay que indicarle el canal de color que se va ha usar.

Ahora podemos construir un terreno utilizando estas funciones:
height_field {
function 500,500 {pow(fn_pigmGranite(x,y,z).gray, f_wrinkles(x*5,y*5,z*5)*5) - fn_pigmMarble(x,y,z).gray*.2 + .2}
smooth
hierarchy
translate -0.5
scale <10, 2, 10>
texture { TEXTURA }
}

Voy a comentar lo que se ha hecho en function. La función fn_pigmGranite se a elevado a la función f_wrinkles. Observese que al final de la cada función se añade ".gray" que es el canal de color que se va a usar para evaluar la función (recuerda que el mapa de color era en escala de grises, lo que facilita las cosas). Además, la función f_wrinkles se a escalado reduciendola por 5, y por ultimo multiplica la intensidad de la función por 5.

Después se le resta la función fn_pigmMarble. No se le aplica ninguna escala a los ejes pero si la intensidad se reduce en un 20%.
Finalmente se suma 0.2 a toda la función.
Francisco Javier Cruz Jiménez Comentario de Francisco Javier Cruz Jiménez el octubre 22, 2008 a las 6:01am
Quería continuar los comentarios que empecé acerca de las isosuperficies. En este caso quería hablar de mi experiencia con height field utilizando funciones como entrada. Una de las caracteristicas más interesantes de las isosuperficies es la capacidad para crear superficies complejas y rugosas con detalles muy finos (como los agujeros en la pared del a imagen "desvan"). Pero en su contra tenemos que pueden ser dificiles de controlar y sobre todo algo lentas en el render, sobre todo si las usamos con CSG.

A veces, si no necesitamos mucho control o complejidad, podemos utilizar la sentencia height_field de la siguiente forma:
height_field { function RESX, RESZ { pattern { IDENTIFICADOR_PATRON MODIFICADORES_PATRON }}}

donde RESX, RESZ es la resolución a la que se va ha evaluar la función para construcir el campo elevado. El identificador de patron es cualquier patrón disponible: agate, bozo, granite, etc. y finalmente y opcionalmente cualquier modificador del patrón: turbulence, lambda, warp, scale, etc.

La ventaja, es la velocidad de render. Al igual que con la isosuperficies podemos ajustar el nivel de detalle. Con la isosuperficie usamos accuracy y en este caso la resolución de la malla poligonal. Además nos evitamos el problema de establecer el valor para max_gradient y la caida en la velocidad del render cuando el gradiente se hace muy elevado. La desventaja es que no podemos construir funciones complejas como con las isosuperficies.

La siguiente imagen esta hecha utilizando esta característica descrita aquí:

Insignia

Cargando…

Tu caja de dialogo en POVRAY en Castellano

© 2009   creado por Mario Antonio Herrero Machado en Ning.   Crear tu propia red social

Insignias  |  Informar un problema  |  Privacidad  |  Términos de servicio

Iniciar sesión para hablar