Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom Bar]
[Foto do Autor]
Carlos Calzada
Sobre o Autor: [escreva um ou dois parágrafos sobre a biografia do Autor aqui]

Indice:
Introdução
Posicionamiento básico da câmara
Motion blur
Depth of field

Posicionamiento Básico da Câmara

[Ilustration]

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.


Este WebSite é mantido por Miguel Angel Sepulveda
© Carlos Calzada 1998
LinuxFocus 1998