Posicionamiento Básico da Câmara
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.
|