6.4.1  Situando la Cámara

Hay diez modelos diferentes de cámara en POV-Ray, cada uno de los cuales usa un método de proyección diferente para proyectar la escena en pantalla. Independientemente del tipo de proyección elegido, todas las cámaras permiten elegir localización (location), derecha (right), arriba (up), dirección (direction), y otras palabras clave para determinar la situación y orientación de la cámara. El tipo de cámara y estos cuatro vectores definen completamente la cámara. Los demás modificantes sirven para ajustar el modo de trabajo de la cámara. El modo de empleo de estos vectores y de otros modificantes, difieren según el tipo de proyección utilizada. Más adelante hay una explicación detallada de los distintos tipos de cámara. En las subsecciones siguientes veremos cómo situar y orientar la cámara mediante el uso de estos cuatro vectores y los modificantes sky (cielo) y look_at (enfocando a). Puede que desee consultar la siguiente ilustración de la cámara perspectiva a medida que lee sobre estos vectores.

The perspective camera
La Cámara Perspectiva

6.4.1.1 Situación y punto de enfoque (Location y Look_At)

En la mayoría de los casos, sólo se necesitan dos vectores en la declaración de la cámara para situar la misma: location (situación) y look_at (enfocando_a). Por ejemplo:

 camera {
  location <3,5,-10>
  look_at <0,2,1>
 }

El vector location sencillamente nos indica dónde está situada la cámara. Ésta puede estar situada en cualquier punto del universo POV-Ray. La situación por defecto es <0,0,0>. El vector look_at le dice a POV-Ray hacia dónde inclinar y girar la cámara hasta que esté mirando a las coordenadas dadas. Por defecto la cámara enfoca hacia <0,0,1>, una unidad en el eje Z por delante de la situación por defecto.

El modificador look_at debería ser el último elemento en la declaración de la cámara. Si colocamos otro, u otros elementos tras el vector look_at, puede que la cámara no se dirija hacia el punto especificado.

6.4.1.2  El vector Cielo (Sky Vector)

Normalmente POV-Ray gira la cámara hacia derecha o izquierda rotando sobre el eje Y hasta alinearse con el punto look_at, y luego inclina la cámara, arriba o abajo, hasta coincidir con el punto exacto. Sin embargo, puede que en ocasiones queramos manejar de un modo distinto la cámara, como un avión mientras vira. Podemos cambiar la inclinación de la cámara usando el vector sky (cielo). Ejemplo:

 camera {
  location <3,5,-10>
  sky   <1,1,0>
  look_at <0,2,1>
 }

Esto le dice a POV-Ray que incline la cámara hasta que la parte superior se alinee con el vector sky. Imaginemos que el vector sky es una antena sobresaliendo de la parte de arriba de nuestra cámara. Cuando la cámara y el vector sky se encuentre alineados, usaremos el vector para girar la cámara hacia izquierda o derecha, y luego inclinaremos hasta apuntar hacia el punto look_at. Es como si le indicáramos a POV-Ray que el cielo (de la cámara) no está arriba.

El vector sky no hace nada por sí solo. Sólo modifica el modo en que el vector look_at gira la cámara. El valor por defecto es sky <0,1,0>.

6.4.1.3  El Ángulo (Angle)

La palabra clave angle seguida de un número decimal, especifica el ángulo (horizontal) de visión en grados de la cámara utilizada. Aunque es posible utilizar el vector direction para determinar el ángulo de visión para la cámara perspectiva, es más sencillo utilizar angle.

Cuando se especifican los ángulos, POV-Ray ajusta de forma acorde la longitud del vector direction. La fórmula utilizada es longitud_dirección = 0.5 * longitud_derecha / tan ( ángulo / 2 ), donde longitud_derecha es la longitud del vector right (derecha). Los vectores direction y right deberían ser determinados antes de fijar los ángulos. El vector right se explica en la siguiente sección.

No hay limitación para el ángulo de visión, excepto para la proyección con perspectiva. Si elegimos ángulos de visión mayores de 360 grados, veremos imágenes repetidas de la escena (el modo en que la repetición se produce depende de la cámara). Puede ser útil para crear efectos especiales.

La cámara spherical (esférica) tiene además la opción de especificar un ángulo vertical. De no hacerlo, toma el valor por defecto de ángulo_horizontal/2.

Por ejemplo, si generamos una imagen con una proporción de 2:1, y la utilizamos como mapa de imagen en una esfera usando el mapeado esférico, recrearemos la escena tal y como fue captada. Otro uso es mapear un objeto y, si especificamos transformaciones antes de la textura, digamos en una animación, semejará los reflejos del entorno (algunas veces llamado mapeado de entorno).

6.4.1.4  El vector de Dirección (Direction)

Probablemente nunca necesitemos especificar o cambiar el vector direction de la cámara, pero lo explicaremos por si algún día le hiciera falta. Sirve para orientar la cámara antes de empezar a moverla con los vectores look_at o rotate (el valor por defecto es direction <0,0,1>). También puede ser usado para controlar el campo de visión horizontal de algunos tipos de proyección. La longitud del vector determina la distancia desde el campo de visión hasta la localización de la cámara. Un vector direction corto proporciona mayor campo de visión, mientras que un vector direction más largo funcionará como un zoom para primeros planos. En las primeras versiones de POV-Ray, éste era el único modo de ajustar el campo de visión, pero actualmente, resulta más fácil utilizar la palabra clave angle.

Si estamos usando la proyección ultra_wide_angle, panoramic, o cilindrical, debemos usar un vector unitario de dirección para prevenir resultados extraños. Por otro lado, la longitud de este vector no importa (de hecho, no afecta a la imagen final) cuando se usan las proyecciones de tipo orthographic, fisheye u omnimax.

6.4.1.5  Los Vectores Arriba (Up) y Derecha (Right)

El propósito principal de los vectores up y right es decirle a POV-Ray cuáles son la altura y anchura relativas de la pantalla. Los valores por defecto son:

 right 4/3*x
 up y

En la cámara perspectiva, estos dos vectores definen también el marco inicial de la pantalla antes de moverla con los vectores rotate o look_at. La longitud del vector right (junto con el vector direction) también puede ser utilizada para controlar el campo de visión horizontal con algunos tipos de proyección. El modificador look_at afecta a la vez a los vectores up y right. El cálculo de angle depende del vector right.

La mayor parte de los distintos tipos de cámara tratan los vectores up y right de igual modo que la cámara perspectiva. Sin embargo, algunas hacen un uso especial de ellos.

En la proyeccion orthographic, las longitudes de los vectores up y right ajustan el tamaño del marco de la cámara ignorando por completo la longitud del vector direction, que no se usa en este tipo de cámara.

En la proyección cylindrical, tipos 1 y 3, el eje del cilindro reposa sobre el vector up, y el ancho está determinado por la longitud del vector right o puede ser reajustado con el vector angle. En el tipo 3, el vector up determina cuántas unidades de alto mide la imagen. Por ejemplo, si tenemos up 4*y en una cámara que está en el origen, sólo los puntos desde y=2 a y=-2 serán visibles. Todos los rayos de visión son perpendiculares al eje Y. Para los tipos 2 y 4, el cilindro reposa a lo largo del vector right. Los rayos de visión para el tipo 4 son perpendiculares al vector right.

Observe que los vectores up, right, y direction deberían permanecer perpendiculares entre sí o la imagen se generará distorsionada. Si no es así, se generará un mensaje de advertencia. El buffer de vistas no funciona con vectores de cámara no perpendiculares.

 

6.4.1.5.1  Proporciones

Los vectores up y right definen juntos la proporción entre la altura y anchura de la imagen resultante. Los valores por defecto up<0,1,0> y right<1.33,0,0> tienen una proporcion de 4 a 3. Ésta es la proporción típica de un monitor de computadora. Si se quiere una imagen alargada, o una imagen panorámica, o un cuadrado perfecto, debemos ajustar los vectores up y right.

La mayoría de las resoluciones de video en ordenadores e impresoras gráficas utilizan píxeles perfectamente cuadrados. Por ejemplo, los monitores Macintosh y las resoluciones SVGA de IBM, en los modos 640x480, 800x600 y 1024x768 utilizan píxeles cuadrados. Si su modo de vídeo utiliza píxeles cuadrados, entonces la anchura y altura a determinar con las opciones Width (Anchura) y Height (Altura) o con los modos +W o +H deberían respetar la misma proporción que los vectores up y right.

Observación: 640/480 = 4/3 la proporción adecuada para este modo de píxeles cuadrados.

Sin embargo, no todos los modos de vídeo de computadoras usan píxeles cuadrados perfectos. Por ejemplo el modo IBM VGA 320x200 y el Amiga 320x400 no usan píxeles cuadrados aunque produzcan imágenes con proporción 4/3. Por lo tanto, aquellas imágenes preparadas para ser visualizadas en tal hardware deberían seguir con la proporción 4/3 en sus vectores up y right aunque los ajustes de píxeles no sean 4/3. Por ejemplo:

 camera {
  location <3,5,-10>
  up    <0,1,0>
  right  <1,0,0>
  look_at <0,2,1>
 }

Esto determina una imagen perfectamente cuadrada. En un modo de video, como SVGA, que usa píxeles cuadrados, los ajustes que podríamos usar serían +W480 +H480 ó +W600 +H600. Sin embargo, en un modo de vídeo, como el Amiga 320x400, con píxeles no-cuadrados, para generar una imagen cuadrada usaremos unos valores de +W240 +H400.

Lo más importante a recordar es esto: los vectores up y right, deben especificar la proporción de aspecto pretendida por el artista, los ajustes de píxeles deben usarse en la misma proporción en modos de vídeo con píxeles cuadrados y deben retocarse para resoluciones de video con píxeles no-cuadrados. Los vectores up y right no deben ajustarse en en modos basados en píxeles no-cuadrados.

 

6.4.1.5.2  Orientación

El vector right describe, además, la dirección de la derecha de la cámara. Le dice al programa dónde está el lado derecho de nuestra pantalla. El valor del vector right puede ser utilizado para determinar la orientación del sistema de coordenadas en uso. El valor por defecto es: right <1.33,0,0>. Esto significa que la dirección +x es hacia la derecha. Se la llama sistema de la mano izquierda debido a que podemos usar la mano izquierda para manejar los ejes de coordenadas. Sostenga la mano izquierda con su palma hacia la derecha y el pulgar hacia arriba. Extienda el pulgar. Y el dedo índice hacia delante (eh! no señale hacia la pantalla, es de mala educación!). Los demás dedos señalando hacia la derecha. Los dedos doblados están ahora señalando hacia la dirección +x. El pulgar apunta hacia +y, y el índice señala en la dirección +z.

Para usar un sistema de coordenadas de mano derecha, como es usual en algunos programas de CAD y otros trazadores de rayos, haga el mismo ejercicio usando la mano derecha. El pulgar sigue apuntando hacia +y y el dedo índice sigue señalando hacia +z, pero ahora los dedos doblados nos dicen que +x es hacia la izquierda. Eso significa que el lado derecho de nuestra pantalla está ahora en la dirección -x. Para decirle a POV-Ray que invierta los ejes del mismo modo que nosotros cambiamos de mano podemos usar un valor negativo de x en el vector right, ejemplo: right<-1.33,0,0>.

Ahora tenemos un eje de coordenadas cuyo eje x aumenta hacia la izquierda, lo cual no tiene mucho sentido en una pantalla en dos dimensiones, para arreglar esto, giramos la cámara entera 180 grados usando un valor positivo z en la situación (location) de la cámara. Acabaríamos teniendo algo como esto:

 camera {
  location <0,0,10>
  up    <0,1,0>
  right  <-1.33,0,0>
  look_at <0,0,0>
 }

Ahora, cuando hagamos nuestros ejercicios de aerobic para trazadores de rayos, como se explicó en la sección "Entendiendo el sistema de coordenadas de POV-Ray", usaremos la mano izquierda para determinar la dirección de las rotaciones.

En una gráfica bidimensional, X siempre indica el eje de coordenadas horizontales, e Y el eje vertical. Las dos versiones del sistema de coordenadas que hemos visto coinciden en: a) hacia dónde señala z; y b) qué eje se corresponde con el "arriba" del mundo real.

Los sistemas CAD arquitectónicos, como AutoCAD, tienden a usar la orientación Ojo de Dios, en la que el eje Z se eleva sobre el plano y es tomado por el modelo como "arriba". Esto tiene sentido si eres un arquitecto mirando los planos de un edificio en un monitor. Z significa "arriba", y se incrementa hacia el espectador, mientras que X e Y cruzan la pantalla. Así es como funciona el sistema de coordenadas de mano derecha.

Por otro lado, los programas infográficos como POV-Ray, tienen a considerar al espectador como un participante en la escena. "Arriba" en el modelo significa Y, lo mismo que en el mundo real, y X sigue siendo hacia la "Derecha", luego Z debe significar "Profundidad", que se incrementará conforme se aleje "dentro" de la pantalla. Éste es el principio del sistema de coordenadas de la mano izquierda.

6.4.1.6  Transformando la Cámara

Los modificadores translate y rotate pueden reposicionar la cámara una vez que la hayamos definido. Por ejemplo:

 camera {
  location < 0, 0, 0>
  direction < 0, 0, 1>
  up    < 0, 1, 0>
  right   < 1, 0, 0>
  rotate  <30, 60, 30>
  translate < 5, 3, 4>
 }

En este ejemplo, la cámara se crea en el punto <0,0,0>, después se rota 30 grados en el eje X, 60 grados en el eje Y y 30 grados en el ele Z, y luego se traslada a otro punto en el espacio.