Logo POVRay...
Instrucciones para "NVFA.inc" v1.0

Donación de Rafael Angel Campos Vargas, en el año 2014, a la Biblioteca de objetos de POV-Ray.  Este proyecto se encuentra actualmente inscrito con la patente LGPL;  para libre uso comercial y no comercial del software.

CC-GNU LGPL
The primary purpose of this collection is to make items publicly available under a common license that permits use, modification and re-distribution. To support this contributions are donated to the collection with consent for their use under the terms of the Creative Commons - Lesser General Purpose License (CC-GNU LGPL).
Chris Bartlett 2007
La versión actual v1.0 de "NVFA.inc" dibuja nubes 3D con volumen, muy poco flexibles.  Fueron diseñadas para evitar el uso de interior {}.  Simplemente son "fractales pintados y enrollados en el espacio".  No es compatible con PovRay 3.1. 

La forma de las nubes es el resultado de sumar un fractal y una función de perturbación.  Tanto el fractal como la función de perturbación pueden eliminarse, como se aprecia ante una lectura superficial del código.  Lo demás es básicamente gracias a las texturas. 

Indice de página:

  1. Instalación de Archivos
  2. Instrucciones básicas
  3. Características del objeto
  4. Modificadores
  5. Notas y Advertencias
  6. Sugerencias de modificación
  7. Sobre LibreN3D

Instalación de Archivos

El procedimiento siguiente es completamente optativo, corresponde simplemente al estándard de la Biblioteca de objetos POV-Ray.
  1. Cree el subdirectorio "ObjectCollections".  Se sugiere un subdirectorio del folder POV-Ray, creado por el instalador en algunas versiones en la sección de documentos o bien en la de código.
  2. Copie el archivo "NVFA.inc" en dicho subdirectorio;  únicamente éste es necesario.  En cuanto a la documentación y demás puede colocarla si desea en el mismo subdirectorio, el estándar ha sido diseñado para evitar problemas de compatibilidad.
  3. Actualice los archivos buscados por POV-Ray, en algún archivo ini pertinente.  Por ejemplo "POVRay.ini";  agregue el comando Library_Path="C:\FDOS\POVRAY31\ObjectCollections"; o el que corresponda a su sistema operativo.  POV-Ray ofrece muchas formas de realizar esto.  Si no sabe cómo, probablemente convenga leer el manual de referencia en la sección "Command-line options".   Cada sistema operativo presenta sus propias variantes.
Nota:  El archivo de prueba "NVFA.pov" puede ejecutarse sin ningún proceso de instalación.  Unicamente debería estar ubicado en el mismo folder que "NVFA.inc".


Instrucciones básicas

Nubes
Muy fácil de usar, tan simple como incluir el archivo y ubicar el objeto.  Sin embargo, requerirá elevar el valor de la variable global max_trace_level, para evitar desagradables puntos negros.  El siguiente ejemplo ilustra el proceso básico.

    #include "stdinc.inc"
    #include "stdcam.inc"
    #include "NVFA.inc"
    global_settings	{
      max_trace_level	10
    }
                          
    object      {
      NVFA_Nube1(off) 
      // NVFA_Nube2(off)       
      // NVFA_Nube3(off)       
      // NVFA_Nube4(off)       
      // NVFA_Nube5(off,0)       
      // NVFA_Nube6(off)       
      // NVFA_Nube7(off)
      // NVFA_Nube8(off,0.99,0)       
      // NVFA_Nube9(off)       
      // NVFA_Nube10(off,1.2)       
      translate      < -1.75,  1.30, -4.00 >   
      no_shadow
    }

El dibujo resulta algo decepcionante, pero ilustra el proceso básico.  Para lograr mejores resultados, conviene combinar con fog {} y utilizar un fondo sky_sphere {}.

La siguiente es la lista exhaustiva de macros en el archivo:

    #macro NVFA_Nube1 ( BoxSphere )                                        
    #macro NVFA_Nube2 ( BoxSphere )                                        
    #macro NVFA_Nube3 ( BoxSphere )                                        
    #macro NVFA_Nube4 ( BoxSphere )                                        
    #macro NVFA_Nube5 ( BoxSphere, VectorMovimiento )                                        
    #macro NVFA_Nube6 ( BoxSphere )                                        
    #macro NVFA_Nube7 ( BoxSphere )                                        
    #macro NVFA_Nube8 ( BoxSphere, NuevoThreshold, VectorMovimiento )                                        
    #macro NVFA_Nube9 ( BoxSphere )                                        
    #macro NVFA_Nube10( BoxSphere, NuevoThreshold )                                        

BoxSphere :
"on" ajusta el contenido a box { -1,1 }.  "off" ajusta el contenido a sphere { 0, 1 }.
VectorMovimiento :
Para desplazar como vector el centro de evaluación funcional.  Util para acumular varios grupos de nubes adyacentes.
NuevoThreshold :
Modifica el valor threshold de la isosurface {}.  El efecto de cambiar el valor será diferente según el tipo de nube.  Recomendamos un valor de 0.99 para la NVFA_Nube8(), y de 1.2 para NVFA_Nube10().


Características del objeto

No se supone que las nubes tengan un tamaño "verdadero".  Fueron creadas con un diámetro planeado de 2.0 unidades POVRay, con amplia tolerancia.  Aplique scale a gusto.

En el siguiente ejemplo ilustramos la formación de un grupo rectangular de nubes pequeñas.  Note el uso del parámetro Movimiento.

    #include "stdinc.inc"
    #include "stdcam.inc"
    #include "NVFA.inc"
    global_settings	{
      max_trace_level	10
    }
    union               {  
      #local C          = 0;
      #while ( C < 10 )                  
        object      {
          NVFA_Nube8(off,0.8,120*C*x)
	  // El parametro 120 es arbitrario
          scale             0.1    
          translate      < -1.75,  1.30, -4.00 >+0.1*(C-4)*x   
          no_shadow
        }                
        #local C                = C+1;
      #end    
    }

Se define la siguiente textura base que no debería modificarse.

#declare NVFA_DefaultTexturaNubeGeneral
Define la textura principal de este archivo.

Modificadores

Este archivo posee los siguientes modificadorse de textura.  Todos tienen el mismo valor default.

    #declare NVFA_TexturaNube1			= texture { NVFA_DefaultTexturaNubeGeneral }
    #declare NVFA_TexturaNube2			= texture { NVFA_DefaultTexturaNubeGeneral }
    #declare NVFA_TexturaNube3			= texture { NVFA_DefaultTexturaNubeGeneral }
    #declare NVFA_TexturaNube4			= texture { NVFA_DefaultTexturaNubeGeneral }
    #declare NVFA_TexturaNube5			= texture { NVFA_DefaultTexturaNubeGeneral }
    #declare NVFA_TexturaNube6			= texture { NVFA_DefaultTexturaNubeGeneral }
    #declare NVFA_TexturaNube7			= texture { NVFA_DefaultTexturaNubeGeneral }
    #declare NVFA_TexturaNube8			= texture { NVFA_DefaultTexturaNubeGeneral }
    #declare NVFA_TexturaNube9			= texture { NVFA_DefaultTexturaNubeGeneral }
    #declare NVFA_TexturaNube10			= texture { NVFA_DefaultTexturaNubeGeneral }
Aplican al mismo número de macro, como indica su nombre.  Al definir la textura considere que probablemente convenga utilizar un valor elevado de la variable ambient

El siguiente ejemplo ilustra el uso de los modificadores.

    #include "stdinc.inc"
    #include "stdcam.inc"
    #include "NVFA.inc"
    global_settings	{
      max_trace_level	10
    }     
                         
    #declare Textura1           = 
      texture { pigment { Yellow transmit 0.5 } finish { ambient 0.8 diffuse 0.2 } }
                         
    #declare NVFA_TexturaNube1  = 
    // #declare NVFA_TexturaNube2  = 
    // #declare NVFA_TexturaNube3  = 
    // #declare NVFA_TexturaNube4  = 
    // #declare NVFA_TexturaNube5  = 
    // #declare NVFA_TexturaNube6  = 
    // #declare NVFA_TexturaNube7  = 
    // #declare NVFA_TexturaNube8  = 
    // #declare NVFA_TexturaNube9  = 
    // #declare NVFA_TexturaNube10 = 
      texture                   {  
        average
        texture_map             { 
          [ 0.8 NVFA_DefaultTexturaNubeGeneral ]
          [ 0.2 Textura1 ]
        }
      }
                          
    object      {
      NVFA_Nube1(off) 
      // NVFA_Nube2(off)       
      // NVFA_Nube3(off)       
      // NVFA_Nube4(off)       
      // NVFA_Nube5(off,0)       
      // NVFA_Nube6(off)       
      // NVFA_Nube7(off)
      // NVFA_Nube8(off,0.99,0)       
      // NVFA_Nube9(off)       
      // NVFA_Nube10(off,1.2)       
      translate      < -1.75,  1.30, -4.00 >   
      no_shadow
    }


Notas y Advertencias

No olvide elevar el valor de max_trace_level, de lo contrario podrían aparecer puntitos negros antiestéticos.

La textura default utiliza un valor elevado de ambient, debido a ello no funcionarán bien en escenas oscuras.

No debe confiar en que las nubes funcionarán bien con un elevado acercamiento.  Utiliza otro objeto, o intente prueba y error, hasta conseguir el efecto deseado.


Sugerencias de modificación


Sobre LibreN3D

Algo hace falta En la actualidad dedico casi unas dos horas todos los días, para desarrollar el programa de animación LibreN3D con el compilador FreePascal para FreeDOS.  El objetivo era en un origen, realizar animaciones de "baja" calidad, con progreso lento y paulatino. Desconocía en ese entonces del programa POV-Ray.  Creo que con ayuda de dicho proyecto, podría lograr mucho mejores resultados desde un principio.  Confío que para el 2020 pueda lograr animaciones completas de aceptable calidad.   En la actualidad, intento agregarle características elásticas a los objetos.  He tenido numerosos retrasos, así que todavía no funciona.  Lo siento...(12/marzo/2014), pero me siento muy seguro de que pronto lo lograré.  De momento, no tiene interface con el usuario, pero se encuentra en desarrollo como intérprete de renglón al estilo DOS.

Me sería de muchísima ayuda, que el grupo POV-Ray siguiera desarrollando la versión para DOS.   Los siguientes son enlaces que podrían ser de utilidad para el interesado en los proyectos FreePascal y FreeDOS.   Lamentablemente en la actualidad son altamente inestables, debido probablemente a dificultades con la adaptación al modo de 64 bits.
Logo FreeDOS...
Descarga sistema operativo FreeDOS
Logo FreePascal...
Descarga compilador FreePascal