| Posicionamiento Básico da Câmara![[Ilustration]](../../common/images/illustration39.gif)  
Resumo: 
[Aqui vai uma descrição sobre o artigo...]
 
 
 
 Introdução
Nesta segunda parte, veremos com detalhes o modelo de câmara de RenderMan. A câmara é
um dos elementos mais importantes de um renderizador e com ela podemos criar efeitos
mais interessantes como o Motion Blur (Que é o o que se vê quando fotografamos algo
que está em movimento muito rápido?) e o Depth of Field (com foco e sem foco). Ainda
poderemos fazer modelagens com muito mais efeitos como por exemplo o Lens Flare (o
brilho das luzes quando as fotografamos), muitos deles conseguem, não modificando o
modelo da câmara (fazendo mais complexos), sem que se modelem como propriedades dos
objetos graças ao avançado sistema de shaders (shaders é o mesmo que texturas dos objetos)
que possui, com o qual podemos criar nossos próprios "sombreadores" e criar efeitos
bastante impressionantes. O modo como programamos e compilamos estes sombreadores,
veremos em outro artigo, ainda que este tema é bastante amplo (muito, muito amplo
aliás ainda não tenho nem ideia, terei que olhar bem). Como
explicávamos no artigo anterior, para renderizar as imagens devemos por:
rendrib arquivo.rib (saída para o arquivo) ou rendrib -d arquivo.rib (saída para a tela). 
 
  Posicionamento básico da câmara
O sistema de coordenadas da câmara é "left-handed" e conincide com a superfície do monitor.
A origem se situa no centro da tela com o eixo x até a direita, e o eixo y acima 
e o z "dentro".
Por default, o "sistema de coordenadas atual" conincide com o  sistema de coordenadas da
câmara" tal como vemos na primeira figura ( o eixo x é vermelho, o y é verde e o z azul).
A primeira imagem é uma vista aérea de como vai ficar a cena e a segunda é a cena
propriamente dita (as luzes não estão no mesmo lugar das imagens para que se vejam bem).
ainda que a cena não seja especialmente complexa (a verdade é bastante horrível) nos
servirá para compreender os arquivos RIB do exemplo sem que dificultem os complicados
modelos geométricos.
 
     
Continuando, provaremos a posição da câmara. O mais lógico, sobretudo se usamos Pov-Ray,
é mover a câmara. Para ver a cena um pouco mais distante, mudaríamos a câmara para a
posição <0,0,-20>, com este movimento moveríamos a câmara para trás, vamos fazer
isso com RenderMan, para isto, poremos um Translate 0 0 -20 antes do WorldBegin:
 
     
A câmara se moveu para frente!. Na realidade o que movemos não foi a câmara, movemos
o sistema de coordenadas atual para trás, o que faz com que a câmara "avance" .
Por tanto, para por a câmara onde queríamos, temos que fazer o contrário, mover o
sistema de coordenadas atual para frente com Translate 0 0 20):
 
     
Agora sim, a câmara está onde queríamos. A partir de agora, toda a geometria que
incluirmos na cena, será referida a esta nova posição do sistema de coordenadas
atual.
No exemplo seguinte, deixaremos o leigo na origem das coordenadas e moveremos a
câmara ao seu redor:
 
     
Podemos ver no arquivo RIB as transformações que aplicamos na câmara para posicioná-la:
 
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
	Sphere 10000 -10000 10000 360 # Background branco
	# Objeto da cena
	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 uma translação (Translate 0 0 20) e duas rotações, uma ao redor
do eixo y (Rotate 135 0 1 0). Isto pode desconcertar aos usuários do Pov-Ray
já que nele as transformações são aplicadas por ordem de aparição, com certeza
RenderMan junta as transformações até que encontre um token significativo ( no nosso
caso o WorldBegin) e então as aplica. De tudo isto, deduzimos que as 
transformações seriam a primeira a serem aplicadas. por tanto nosso exemplo deve 
ser lido como:
 
0- Estado inicial (figura de cima a esquerda).
 
1- Girar o sistema de coordenadas atual 135 graus e o eixo y (figura de cima a direita).
 
2- Girar o sistema de coordenadas atual 45 graus no eixo x (figura de baixo a esquerda).
 
3- Deslocar o sistema de coordenadas atual 20 unidades no eixo z (figura de baixo a direita).
 
         
Temos que levar em conta que todas as transformações do sistema de coordenadas atual
(rotações e translações) são relativas ao sistema de coordenadas da câmara, portanto,
uma rotação no eixo x se refere que a rotação diz respeito ao eixo x da câmara, não 
do sistema de coordenadas atual.
 
A partir de agora, entramos na parte mais interessante, já que entramos de cheio com os
efeitos que podemos fazer com a câmara de RenderMan.
 
  Motion blur (simulação de objetos móveis)
O que primeiro veremos é o Motion Blur, é algo assim como "movimento apagado" e é o
efeito produzido quando produzido quando fotografamos alguma coisa em movimentos
rápidos.
 
Para que a câmara seja capaz de simular este efeito devemos incluir no arquivo o token
Shutter 0 1 (com certeza na parte do arquivo dedicado a câmara), com isto 
definimos o tempo de exposição de nossa câmara, no nosso caso uma unidade de tempo para
que o objetivo se "abra" no instante 0 e se feche no instante 1. Este tempo de exposição
deixaremos quase sempre com 0 1 já que, como veremos, só indica a forma de 
atuação do RenderMan.
 
Deste ponto em diante, temos que dizer ao renderMan que é o que se move, e é feito com o
par MotionBegin MotionEnd. Como podemos ver na próxima figura (e no seu arquivo
RIB), temos uma bola que se move a partir da posição 0 10 5 no instante 0 a
posição 5 10 0 no instante 1. MotionBegin [0 1] indica ao RenderMan que tempos correspondem com as transformações (instante 0 para primera e instante 1 para segunda) 
e os valores devem coincidir com os indicados na seção Shutter. Como 
podemos comprovar no exemplo, o efeito é bastante real e em uma animação o efeito causa
muito mais impacto.
 
   
Por conseguinte, as transformaçoes que podemos incluir dentro de MotionBegin MotionEnd não se limitam às translações, RenderMan é capaz de renderizar trajetórias não lineares
com Motion Blur. No exemplo que se segue, o que temos é uma rotação dos eixos 25 graus
ao redor de seu eixo y.
 
   
Ainda que normalmente o que se movimenta são os objetos da cena, RenderMan nos brinda com a
possibilidade de que seje a câmara que se mova, portanto também o efeito de Motion Blur
pode ser aplicado ao movimento da câmara. Neste exemplo movemos a câmara 5 unidades a
esquerda (movemos o sistema de coordenadas atual 5 unidades a direita), e todos os 
objetos da cena estão borrados. Por conseguinte o par MotionBegin MotionEnd se encontram na parte da câmara no arquivo RIB:
 
   
  Depth of field (com foco e desfocada) 
Outro dos aspectos oferecidos por RenderMan é a possibilidade do Dept of Field,
o que é o mesmo, a capacidade de focar e desfocar objetos na cena. A forma de 
indicar estas operações é com DepthOfField. Este token necessita de tres
parâmetros: o primeiro é f-stop, o segundo fov (field of view ou ângulo
de visão) e focus-lenght (longitude do foco ou a distancia a qual um objeto
aparecerá enfocado). f-stop nos indica a distancia à qual tiramos o foco, no nosso
caso, um objeto que está a 2 unidades ou menos de distancia da câmara, aparecerá
igualmente sem foco (ou com foco). O parâmetro fov convém deixar com o valor
1.0 já que convém definir antes (com Projection "perspective" "fov" 45 em nosso
exemplo) o que conseguiríamos seria multiplicar o valor anterior pelo novo. focus-lenght é o parâmetro que nos interessa e define a distância que devem estar
os objetos com foco. No próximo exemplo, temos a câmara na origem e tres bolas (uma afastada 
10 unidades, outra 20 e a última 30), veremos como variando focus-lenght 
enfocamos as diferentes esferas.
 
No primeiro exemplo temos DepthOfField 2.0 1.0 10, o que quer dizer que os
objetos deslocados em dez unidades da câmara, estariam com foco (a esfera vermelha):
 
   
Continuando temos DepthOfField 2.0 1.0 20. Agora o que está com foco é a esfera
verde (já que está 20 unidades da câmara):
 
   
Para enfocar a última esfera (a azul que está deslocada 30 unidades) devemos
por DepthOfField 2.0 1.0 30:
 
   
O efeito que se consegue ao aplicar o depth of field é dar maior realidade as imagens que geramos. Por suposto, a velocidade da renderização (rendering) aumenta ao introduzir estes
efeitos (tanto o Motion Blur como o Depth of Fields) já que são realizados varios passos de
renderização.
 |