| Posicionamiento Básico de la Cámara![[Ilustration]](../../common/images/illustration39.gif)  
Resumen: 
En  este segundo artículo sobre  RenderMan  nos meteremos en la
configuración y posicionamiento  de la  cámara y veremos
los   efectos  que es  capaz   de   crear.   Veremos  que, aunque   el
posicionamiento no es tan intuitivo como  en Pov-Ray, tiene la ventaja
de que es muy fácil  programar trayectorias. Esto lo veremos en
el siguiente artículo.
 
 Introducción
En esta segunda entrega veremos con detalle el modelo de cámara
de RenderMan.    La cámara es  uno  de los elementos más
importantes de un renderizador y con  ella se pueden crear los efectos
más interesantes como  el Motion Blur (¿qué es lo
que   se ve cuando  fotografiamos  algo  que  va  muy  deprisa?)  y el
Depth of Field (enfoque y desenfoque). Aunque se podrían
haber  modelado muchos más efectos como  por ejemplo el Lens
Flare (el brillo de las luces cuando las fotografiamos), muchos de
ellos  se consiguen, no modificando    el modelo de la   cámara
(haciéndolo  más complejo), sino   que se   modelan como
propiedades de  los  objetos    gracias   al avanzado    sistema    de
shaders (shaders entendido como   texturas de los  objetos) que
posee,  con el cual  podemos  crear nuestros propios  "sombreadores" y
crear efectos bastante impresionantes.  El modo  en que se programan y
compilan estos sombreadores lo veremos en otro artículo, aunque
este tema es bastante amplio (muy, muy amplio y además no tengo
ni idea y lo  tendré que mirar bien).  Como explicábamos
en  el artículo  anterior,  para renderizar las imágenes
debemos poner: 
rendrib fichero.rib
salida a  fichero 
rendrib -d fichero.rib
salida por pantalla. 
 Posicionamiento básico de la cámara
El  sistema de   coordenadas  de la cámara   es "left-handed" y
coincide con la superficie del monitor.  El  origen se sitúa en
el centro de  la pantalla con el  eje x hacia la  derecha, el
y hacia arriba y el  z hacia "dentro".  Por defecto,
el "sistema  de  coordenadas actual"  coincide   con  el  "sistema  de
coordenadas de la cámara" tal y como se ve en la primera figura
(el   eje x es  rojo,  el  y verde  y  el z
azul).  La primera imagen  es  una vista  "aérea"  de como va a
quedar  la escena  y la  segunda es la   escena propiamente dicha (las
luces no  están en  el mismo sitio  en  las dos imágenes
para   que se vean  bien).    Aunque la  escena  no  sea especialmente
compleja (la verdad es que  es  bastante horrible) nos  servirá
para  comprender los  ficheros  RIB de ejemplo   sin que nos  estorben
complicados modelos geométricos.    A continuación   probaremos a  posicionar la cámara.  Lo
más lógico, sobre todo si  se ha usado Pov-Ray, es mover
la cámara.   Para ver la escena  desde un poco más lejos
trasladaríamos  la   cámara  a la        posición
<0,0,-20>,   con  este  movimiento   moveríamos     la
cámara  hacia atrás,  vamos a hacer  esto con RenderMan,
para  ello pondremos  un   Translate   0 0   -20   antes  del
WorldBegin: 
     
¡La cámara se  ha  movido hacia  delante!  En  realidad  lo que
hemos movido  no es   la cámara,  hemos  movido el  sistema  de
coordenadas actual     hacia   detrás, lo  que    hace   que la
cámara  "avance". Por tanto, para  poner la cámara donde
queríamos  hemos  de hacer  lo contrario, mover   el sistema de
coordenadas actual hacia delante (con Translate 0 0 20):     
Ahora si que   está la cámara  donde queríamos. A
partir de ahora, toda la geometría que  incluyamos en la escena
estará referida a esta   nueva posición del  sistema  de
coordenadas actual.  En el siguiente ejemplo  dejaremos el monigote en
el   origen de   coordenadas  y   moveremos  la   cámara a   su
alrededor: 
     
Podemos ver en el fichero RIB las  transformaciones que hemos aplicado
a la cámara para posicionarla: 
Display "camara_default2.tif" "file" "rgb"
Projection "perspective" "fov" 45
Format 320 240 1
LightSource "ambientlight" 1 "intensity" 
            0.3 "lightcolor" [1 1 1]
LightSource "distantlight" 2 "intensity" 
            1.0 "from" [10 10 -10] "to" [0 0 0]
Translate 0 0 20
Rotate 45 1 0 0
Rotate 135 0 1 0
WorldBegin
	Color 1 1 1
        # Background blanco
	Sphere 10000 -10000 10000 360 
	# Objeto de la escena
	TransformBegin
		Color 1 0 0
		Sphere 3 -3 3 360
	TransformEnd
	TransformBegin
		Rotate -90 1 0 0
		Translate 0 0 2
		Cone 3 3 360
		Disk 0 3 360
	TransformEnd
	TransformBegin
		Rotate -90 0 1 0
		Cylinder 1 -4 4 360
		Disk 4 1 360
		Disk -4 1 360
	TransformEnd
WorldEnd
 
Observamos  una translación (Translate  0  0 20) y dos
rotaciones, una  alrededor   del eje x   (Rotate   45 1 0
0)  y  otra alrededor  del   eje y (Rotate  135  0 1
0).  Esto puede desconcertar a los  usuarios de Pov-Ray ya que en
éste   las     transformaciones  se  aplican    por   orden  de
aparición,  sin   embargo RenderMan apila  las transformaciones
hasta  que  encuentra  un token    significativo (en nuestro  caso  el
WorldBegin) y entonces las  aplica.   De todo esto se  deduce
que las transformaciones hemos de indicárselas al revés,
es   decir,   la última  transformación sería  la
primera en aplicarse. Por tanto nuestro ejemplo debe leerse como: 
| 1. Estado Inicial |   |  
| 2.  Rotar el sistema de coordenadas alrededor del eje 
y 135 grados |   |  
| 3. Rotar el sistema de coordenadas alrededor del eje 
x 45 grados |   |  
| 4. Desplazar el sistema de coordenadas 20 unidades a lo largo del eje
z |   |  
Hay que tener en cuenta que  todas las transformaciones del sistema de
coordenadas actual    (rotaciones y translaciones)  son   relativas al
sistema  de  coordenadas   de  la   cámara, por    tanto,   una
rotación en el     eje    x se  refiere  a     que  la
rotación es respecto del eje x de la cámara, no
del sistema de coordenadas actual. 
A partir de aquí entramos en la parte más interesante ya
que  nos metemos de  lleno con los efectos que  se pueden hacer con la
cámara de RenderMan. 
 Motion blur (simulación de objetos móviles)
El primero que   veremos es el  Motion  Blur, es algo  así como
"movimiento   borroso" y   es el     efecto que   se produce    cuando
fotografiamos algo que se mueve deprisa. 
Para que  la cámara sea   capaz de simular este  efecto debemos
incluir en el fichero el  token Shutter 0  1 (por supuesto en
la parte del fichero dedicado  a la cámara), con esto definimos
el  tiempo de exposición  de  nuestra cámara, en nuestro
caso una unidad de tiempo por lo que el objetivo se "abrirá" en
el   instante 0 y   se  cerrará  en el   1.    Este tiempo   de
exposición lo dejaremos  casi siempre con  0 1 ya que,
como veremos, solo indica la forma de actuar de RenderMan. 
A partir de aquí tenemos que decirle  a RenderMan que es lo que
se mueve, esto se hace con el par MotionBegin MotionEnd. Como
podemos ver en la siguiente figura (y  en su fichero RIB), tenemos una
pelota  que se mueve desde la   posición 0 10  5 en el
instante 0 a   la  posición 5  10   0 en  el  instante
1.  MotionBegin  [0  1]  indica a   RenderMan que  tiempos se
corresponden con    las  transformaciones (instante  0   la  primera e
instante 1 la segunda) y los valores deben coincidir con los indicados
en la sección Shutter.  Como se puede comprobar  en el
ejemplo el efecto es bastante real y en una animación el efecto
es más impactante.   
Por  supuesto, las   transformaciones  que podemos  incluir  dentro de
MotionBegin   MotionEnd  no se  limitan  a las translaciones,
RenderMan  es capaz de renderizar  trayectorias no lineales con Motion
Blur.En el siguiente ejemplo lo  que tenemos es una rotación de
los ejes 25 grados alrededor de su eje y.   
Aunque normalmente  lo que  se mueve son  los  objetos  de la  escena,
RenderMan contempla la posibilidad de que sea  la cámara la que
se mueve,  por  lo tanto también  el  efecto de  Motion Blur se
puede aplicar   al  movimiento de la  cámara.   En este ejemplo
movemos la cámara 5 unidades a la izquierda (movemos el sistema
de coordenadas actual 5 unidades a la derecha), y todos los objetos de
la escena están borrosos.   Por supuesto el par MotionBegin
MotionEnd  se encuentra  en  la parte  de  la cámara en el
fichero RIB:   
 Depth of field (enfoque y desenfoque)
Otro  de los aspectos que  nos ofrece RenderMan  es la posibilidad del
Depth of  Field, o lo  que es  lo mismo,  la   capacidad de enfocar  o
desenfocar objetos en  la  escena. La  forma  de indicar  esto es  con
DepthOfField. Este  token necesita tres parámetros: el
primero es f-stop, el  segundo fov (field of  view o
ángulo  de  visión) y  focus-lenght   (longitud
focal  o la distancia a la  cual un objeto aparecerá enfocado).
f-stop nos  indica la  distancia    a  la  cual se deja    de
desenfocar más, en nuestro caso, un objeto  que esté a 2
unidades o  menos  de distancia de  la  cámara aparecerá
igual de desenfocado (o enfocado). El parámetro fov se
suele dejar  con  el valor 1.0  ya  que se  suele  definir antes  (con
Projection  "perspective" "fov"  45 en nuestro  ejemplo) y lo
que conseguiríamos seria multiplicar el  valor anterior por  el
nuevo. focus-lenght es el parámetro que nos interesa y
define  la  distancia a la que   deben  estar los   objetos para estar
enfocados.  En el  siguiente  ejemplo tenemos la  cámara  en el
origen   y   tres bolas   (una alejada  10    unidades,  otra 20 y  la
última    30),   veremos como    variando focus-lenght
enfocamos las diferentes esferas. 
En el primer ejemplo tenemos  DepthOfField 2.0 1.0 10, lo que
quiere  decir     que  los objetos alejados     diez   unidades  de la
cámara estarán enfocados (la esfera roja): 
   
A continuación  tenemos DepthOfField 2.0 1.0 20. Ahora
lo que está  enfocado es la esfera verde  (ya que está a
20 unidades de la cámara): 
   
Para enfocar la última  esfera (la azul que está alejada
30 unidades) debemos poner DepthOfField 2.0 1.0 30:   
El efecto  que se  consigue  al aplicar  el depth   of field da  mayor
realidad a las imágenes que  generamos. Por supuesto el  tiempo
del rendering  aumenta  al introducir estos  efectos  (tanto el Motion
Blur como   el Depth of Field)  ya  que se realizan  varias pasadas de
renderizado. 
 Texto original en Castellano |