3.9.2  Normales

Los objetos en POV-Ray tienen superficies muy lisas. Como esto no es muy realista, hay varias formas de alterar la lisura de un objeto perturbando la normal de la superficie. La normal de la superficie es el vector que es perpendicular al ángulo de la superficie. Cambiando esta normal se puede hacer que la superficie tenga una apariencia desigual, arrugada o cualquiera de los muchos patrones disponibles. Probemos algunos de ellos.

3.9.2.1  Usando modificadores de normal básicos

Nos deshacemos de la esfera planetoide por el momento marcándola como un comentario y, al final del archivo, creamos una nueva esfera con una textura simple de un solo color.

  sphere {
    <0,0,0>, 1
    pigment { Gray75 }
    normal { bumps 1 scale .2 }
  }

Aquí hemos agregado un bloque de normal además del bloque de pigment (note que no necesitan estar incluidas dentro de un bloque de texture a menos que deban ser transformadas conjuntamente o vayan a formar parte de una textura superpuesta). Generamos la imagen para ver qué se obtiene. Ahora, una por vez colocamos en lugar del identificador bumps (bultos) los siguientes identificadores: dents (dentelladas), wrinkles (arrugas), ripples (olas) y waves (ondas) (podemos usar cualquiera de los patrones listados en "Patrones"). Generamos cada uno para ver los resultados. Juguemos con el valor del número de coma flotante que sigue al identificador. También experimentemos con el valor de la escala.

Para agregar interés, cambiamos la textura del plano a un solo color con una normal como sigue.

  plane {
    y, -1.5
    pigment { color rgb <.65, .45, .35> }
    normal { dents .75 scale .25 }
  }

3.9.2.2  Combinando normales

Las normales pueden ser superpuestas de manera similar a los pigmentos, pero los resultados pueden ser inesperados. Comprobemos esto editando la esfera de la siguiente manera.

  sphere {
    <0,0,0>, 1
    pigment { Gray75 }
      normal { radial frequency 10 }
      normal { gradient y scale .2 }
  }

Como vemos, el patrón resultante no es ni un radial ni un gradiente. En cambio, es el resultado de calcular primero el patrón radial y luego calcular el patrón gradiente. Los resultados son simplemente aditivos. Esto puede ser difícil de controlar, por lo tanto POV-Ray le da al usuario otros métodos para combinar normales.

Una forma es usar mapas de normales. Un mapa de normal trabaja de la misma manera que el mapa de pigmentos que utilizamos anteriormente. Cambiemos la textura de nuestra esfera de la siguiente manera.

  sphere {
    <0,0,0>, 1
    pigment { Gray75 }
    normal {
      gradient y
      frequency 3
      turbulence .5
      normal_map {
        [0.00 granite]
        [0.25 spotted turbulence .35]
        [0.50 marble turbulence .5]
        [0.75 bozo turbulence .25]
        [1.00 granite]
      }
    }
  }

Generando esto vemos que ahora la esfera tiene una superficie muy irregular. El patrón gradiente separa las normales en bandas, pero al tener turbulencia le da a la superficie una apariencia caótica. Pero esto nos da una idea.

Supongamos que usamos el mismo patrón que utilizamos para crear los océanos en nuestro planetoide, en un mapa de normal aplicado al área de la tierra. ¿Qué pasa si utilizamos el mismo patrón y modificadores en una esfera del mismo tamaño que la forma del patrón? ¿No haría eso que el área de la tierra sea irregular dejando los océanos lisos? Probémoslo. Primero, coloquemos las dos esferas una al lado de la otra, para ver si el patrón es de hecho el mismo. Habilitamos la esfera planetoide quitándole los comentarios y realizamos los siguientes cambios.

  sphere {
    <0,0,0>, 1
    texture { AreaTierra }
    texture { AreaOceanos }
    //texture { AreaNubes }  // <-quite esto con comentarios
    translate -x             // <-agregue esta transformación
  }

Ahora cambiamos la esfera gris, así:

  sphere {
    <0,0,0>, 1
    pigment { Gray75 }
    normal {
      bozo
      turbulence .5
      lambda 2
      normal_map {
        [0.4 dents .15 scale .01]
        [0.6 agate turbulence 1]
        [1.0 dents .15 scale .01]
      }
    }
    translate x // <-agregue esta transformación
  }

Generamos esto para ver si el patrón es el mismo. Vemos que sí lo es. Entonces, quitemos la esfera gris poniéndola como comentario y agreguemos el bloque de normal que contiene a la textura correspondiente a la tierra de nuestro planetoide. Quitamos las transformaciones de modo que el planetoide quede centrado nuevamente.

  #declare AreaTierra = texture {
    pigment {
      agate
      turbulence 1
      lambda 1.5
      omega .8
      octaves 8
      color_map {
        [0.00 color rgb <.5, .25, .15>]
        [0.33 color rgb <.1, .5, .4>]
        [0.86 color rgb <.6, .3, .1>]
        [1.00 color rgb <.5, .25, .15>]
      }
    }
    normal {
      bozo
      turbulence .5
      lambda 2
      normal_map {
        [0.4 dents .15 scale .01]
        [0.6 agate turbulence 1]
        [1.0 dents .15 scale .01]
      }
    }
  }

Al ver el resultado observamos que nuestra idea dio resultado! El área de la tierra es irregular mientras que los océanos siguen lisos. Agregamos la capa que contiene a las nubes y nuestro planetoide está completo.

Hay mucho más que no pudimos cubrir aquí debido a restricciones de espacio. Por nuestra cuenta, deberíamos tomarnos tiempo para explorar los mapas de pendiente, average (media) y mapas de bultos.