Escena navideña en Povray (Tutorial)

'demo_navidad.pov' Para luz a medio día.
'demo_navidad.pov' Para luz a medio día.

En esta última entrega de nuestra serie navideña, hemos armado una bonita escena (espero que os guste) recurriendo a los recursos que hemos ido construyendo en los últimos artículos. Con ella finalizamos esta serie navideña.

Podemos apreciar lo enriquecedor que resulta usar las iteraciones y la recursividad para crear una escena. Hemos colocado quince pinos. Se podrían haber puesto tantos como quisiéramos, pero el consumo de CPU ya es suficientemente importante. ¿Te has parado a pensar cuantas diminutas púas de pino están definidas en la escena? En efecto, son un montón.

La parte de los árboles debe de ser comentada si queremos hacer pruebas para ajustar otros elementos de la escena, porque ellos solos consumen mucha CPU. Les hemos cargado de bolas ornamentales y les hemos puesto un tiesto.

Jugamos con el realismo y la ficción. La escena sugiere que tiene lugar al aire libre (por el cielo y los efectos atmosféricos), pero hemos usado un suelo de mármol rojo (privilegio de un creador caprichoso) Lo hice así porque me gustó como destacaba con el verde de los pinos.

No nos hemos limitado a recopilar el material presentado en artículos anteriores. En esta escena hemos añadido alguna cosilla nueva, y como de costumbre aprovecharemos para comentarla. Por algo llamamos a esto tutorial. La idea es aprender cada vez alguna cosilla suelta. De esta forma, el día que necesites algo dispondrás de un ejemplo completo para reutilizar lo que te convenga.

En esta ocasión aprovecharemos para aprender un poco, el tema de las nubes y de la niebla baja.

Para ello empezaremos comentando algunas sentencias.

color_map:
Esta sentencia se usa en la definición de muchos diseños de color. Por ejemplo: agate, bozo, granite, leopard, marble, onion, spotted, wood, gradiente, crackle, … Sin duda merece mucho la pena jugar con ella y aprender a usarla. Aquí la usamos para el cielo. ¿Serías capaz de cambiar el cielo a tu gusto modificando esta sentencia? Te vamos ayudar con dos ejemplos de cielo para la misma escena.

Puede que no sepas que a pesar de no haberla comentado antes, no es la primera vez que usamos ‘color_map’.

En ‘Exploración espacial’ (parte 4): La nave, ya habíamos usado ‘color_map’ para crear un patrón de colorido de tipo ‘crackle’, pero no habíamos explicado en qué consiste ‘color_map’.

El diseño de colores se hace en base a una tabla que se define para valores comprendidos entre 0 y 1. Ponemos como ejemplo el ‘color_map’ de ‘Exploración espacial’ (parte 4): La nave.
#declare ColorMap = color_map {
[0.0 color rgb <0.1,0,0.1>]
[0.02 color <0.3,0.2,0.2>]
[0.15 color <0.5, 0.4, 0.3>]
[1.0 color <0.6, 0.4, 0.6>]
}
#declare Crackle = texture {
pigment { crackle
color_map { ColorMap }
scale 20
}
}

crackle:
Usando la sentencia ‘crackle’ estamos indicando que los colores se reparten adoptando formas poliédricas irregulares. En el patrón anterior se ve que en 0.0 hemos asociado un color que es casi negro, y muy próximo a él, en 0,02 un valor considerablemente más claro para que queden lineas oscuras delgadas resaltando los polígonos tal y como puede verse a continuación.

Nave espacial sobre un fondo crackle.
Nave espacial sobre un fondo crackle.

bozo:
Usando la sentencia ‘bozo’ el color se reparte usando una función tipo ruido aleatorio donde puntos cercanos tienen valores similares. Esta función podrás encontrarla con el nombre de plasma. Es muy útil y usando variaciones de la misma sirve para un montón de cosas diferentes.

turbulence:
La sentencia turbulence indica alteración de la distribución de los colores mediante aplicación de efectos de distorsión por aremolinamiento aleatorio. Su acción será similar a la agitación de un fluido, y su efecto será más o menos pronunciado dependiendo del valor introducido a continuación de la palabra turbulence.

Definiendo nuestro cielo de dos formas diferentes:

Para las nubes de la escena navideña hemos definido nuestra propia textura para el cielo en lugar de tomar una de la librería de Povray. No es difícil hacerlo, y como ves han quedado bastante realistas.

Recordemos que ‘rgb .95’ es una forma abreviada de indicar el color cuando sus componentes R,G,B tienen el mismo valor. ‘rgb .95’ equivale a ‘rgb <0.95, 0.95, 0.95>’ (casi blanco).
Vemos una amplia zona azul entre 0.00 y 0.45, y en el resto algunas gamas de blanco más o menos gris.

Nosotros hemos usado una variable ‘Ocaso’ para ilustrar en el mismo fuente dos ejemplos distintos. Uno de ellos con luz de día y el otro con luz de ocaso.

'demo_navidad.pov' Para luz de ocaso.
'demo_navidad.pov' Para luz de ocaso.

Lo que de verdad nos interesa al ofrecer este dos en uno, es ilustrar el cambio tan importante que puede obrarse en el aspecto de las nubes cambiando el patrón de colores con ‘color_map’. Lógicamente hemos cambiado también la niebla y el color de la luz del sol para lograr una nueva escena coherente.

#declare Azul=rgb <.15, .15, .4>;
#declare Naranja=rgb <1,.9, .3>;
#declare Gris=rgb .3;

#declare Ocaso=0; // EDITAR EL VAR DE ESTA VARIABLE *** Ocaso=1 --> Ocaso; Ocaso=0 --Luz de día
#if (Ocaso) // En el ocaso
#declare ColorLuz=Naranja;
#declare ColorFog=Naranja*.7;
#declare DistFog=3000; // Niebla ligera
#declare TextuCielo=texture{
pigment{ bozo turbulence 0.92
color_map {
[0.00 Azul]
[0.45 Azul]
[0.6 (Azul+Naranja*2)/3]
[0.65 Naranja]
[0.7 (Naranja*3+Gris)/4]
[0.85 rgb Gris]
[0.99 rgb Gris] }
scale<1,1,1>*2.5
translate<1.0,0,-1>
}// end of pigment
finish {ambient 1 diffuse 0}
}// end of TextuCielo
#else // A plena luz del dia
#declare ColorLuz=White;
#declare ColorFog=White;
#declare DistFog=1700; // Niebla densa blanca
#declare TextuCielo=texture{
pigment{ bozo turbulence 0.92
color_map {
[0.00 rgb <0.3, 0.3, 1>*0.95]
[0.45 rgb <0.3, 0.3, 1>]
[0.75 rgb .95]
[0.85 rgb .9]
[1.0 rgb .8]}
scale<1,1,1>*2.5
translate<1.0,0,-1>
}// end of pigment
finish {ambient 1 diffuse 0}
}// end of texture
#end

fog { fog_type 2
distance DistFog
color ColorFog
fog_offset 50
fog_alt 40
turbulence 1.8
}
#declare Luz=light_source { <1500, 950, 0> ColorLuz }
#declare Cielo=sphere{<0,0,0> 10000
texture{TextuCielo scale <600,150,600>}
hollow
}

fog:
La niebla que hemos usado, da un aspecto más realista a la escena. Normalmente, las imágenes sintéticas son demasiado limpias y eso no es algo realista. La hemos definido de la siguiente forma.

fog { fog_type 2
distance 1700
color White
fog_offset 50
fog_alt 40
turbulence 1.8
}

Se trata de una niebla de color blanco. No es una niebla uniforme sino de tipo 2 (fog_type 2) es decir una niebla estratificada. En ella fog_set determina la altura que tiene la niebla manteniendose constante a máxima intensidad, y fog_alt determina una altura extra en la cual se va diluyendo hasta desaparecer completamente.

La sentencia ‘distance’ afecta a la densidad de la niebla. El valor de distance determinará la distancia donde el 36.8% del fondo resulta aún visible.

hollow:
Las nieblas no se pueden usar dentro de objetos mazizos. Habrá que usar la sentencia ‘hollow’ (hueco) para indicar que el cuerpo es hueco. Nosotros hemos usado como de costumbre una esfera a modo de boveda celeste, y dado que podemos mirar desde dentro de ella, tenemos tendencia a olvidar que el objeto esfera no es hueco. Se trata de un olvido frecuente.

Paquete de fuentes ‘Navidad.zip:
Todos lo fuentes de las escenas navideñas han sido empaquetadas ennavidad.zip (15 KBytes)junto a un lanzador en lenguaje python. (pov.py). Un shell ‘makepov.sh’ para renderizar un fuente pov determinado con el comando (pov.py $1 t 11 11) y un shell ‘makeallpov.sh’ que sirve para renderizar todos los pov que encuentra invocando a ‘makepov.sh’. (Se trata de facilitar el trabajo a los principiantes).

Es decir, en Linux, si tienes instalado Povray bastará, ejecutar ‘makeallpov.sh’ en un directorio incluido en el $PATH,

  1. Asegúrate que tienes instalado ‘povray’
  2. Descomprime el fichero ‘Navidad.zip’
  3. Abre un terminal y sitúate en el directorio ‘Navidad’ creado.
  4. Ejecuta el comando: PATH=.:$PATH
  5. Ejecuta el comando: makeallpovs.sh
  6. Ya te puedes ir a tomar algo.

Todas las imágenes de los diferentes fuentes pov (6 en total) se irán obteniendo con resolución 1280×720 y en formato tga para mayor calidad.

Recuerda que el fuente ‘demo_navidad.pov’ debe ser reeditado para obtener la imagen alternativa dependiendo del valor de la variable Ocaso (Tal cual viene la escena para luz de día). Si decides editarlo, puedes renderizar luego este fuente usando el comando:
makepov.sh demo_navidad

Al estar comprimido e incluir sólo los fuentes, el paquete ocupa sólo 15 Kbytes. La licencia de todo ello es GPL.

Share

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*