ine
5341
Programa
OpenGL
Trabalhos
2001
Trabalhos
2002
Links
Bibliografia
Plano
de Ensino
|
Parte
II - Computação Gráfica Avançada
Visualização
Realística em 3D, zbuffering e Raytracing
Principais
Raytracers
Neste capítulo vamos
analisar três raytracers dentre os mais conhecidos. Escolhemos dois
por serem típicos, de domínio público ou gratuitos
e muito utilizados e um terceiro por ser um exemplo de desenvolvimento
de raytracer com características especiais para um domínio
de aplicação específico que ilustra bastante bem como
podemos usar a filosofia geral de raytracing para o desenvolvimento de
aplicativos específicos para um conjunto de necessidades específicas.
Os raytracers são:
Heidelberg
Raytracer
POV-Ray
O Persistence
of Vision Raytracer (POV-Ray) é uma ferramenta de software livre
para a criação de gráficos
tridimensionais impressionantes (opinião
dos autores). Envontra-se
à disposição em versões
oficiais para Windows,
Mac
OS/Mac OS X e Linux i86.
Todo o código fonte está disponível para aqueles desejosos
de realizar suas próprias implementações de variações
ou portarem para outras plataformas. POV-Ray é talvez o mais popular
e mais largamente utilizado raytracer, razão pela qual o utilizaremos
para muitos exemplos no correr deste texto. Na figura abaixo vemos uma
cena urbana em um dia de nevoeiro renderizada com POV-Ray.
![](70002668.jpg)
O
que é POV-Ray?
O Persistence of Vision Ray-Tracer(tm)
foi desenvolvido a partir da ferramenta DKBTrace 2.12, originalmente escrita
por David K. Buck e Aaron A. Collins, por um grupo de pessoas autodenominado
the
POV-Team em seu tempo livre. O site do POV-Team é
www.povray.org
.
O pacote POV-Ray inclui instruções
detalhadas na utilização do raytracer e na criação
de cenas com a linguagem de definição de cenas definida para
POV-Ray. Muitas cenas prontas foram incluídas no pacote, de forma
que o aprendiz pode iniciar tomando o código pronto de uma cena
e modificando-o.
Além disso, uma biblioteca
bastante extensa de formas e materiais também é provida com
o pacote. Estas formas e materiais podem ser utilizados em uma cena que
você está construindo simplesmente através da inclusão
da biblioteca no topo do arquivo de definição de cena e da
subseqüente utilização do nome do objeto no corpo do
arquivo de cena.
Como
Funciona POV-Ray ?
Cenas em POV-Ray são
descritas em uma linguagem de definição de dados denominada
scene
description language. Você simplesmente vai digitando comandos
de definição de objetos e POV-Ray os interpreta e constrói
a cena. O processo de instalação e execução
de POV-Ray, por sua vez, é diferente para cada plataforma em que
foi implementado. Os autores sufgerem que o interessado inicie tomando
alguns dos arquivos fornecidos junto com a instalação de
POV-Ray e os renderize,m tentando entendê-los e modificando-os aos
poucos, antes de tentar criar suas próprias cenas a partir do zero.
A sintaxe da linguagem de definição de cena é bastante
simples, mas há muitos objetos e muitas possibilidades. Alguns exemplos
da sintaxe são dados abaixo.
Descrevendo
um Objeto
Tomando-se um arquivo de descrição
de cena básico, contendo as definições padrão
de iluminação, cores e posicionamento de câmera, como
o abaixo:
#include "colors.inc"
camera {
location <0.0, 0.0, -10.0>
direction <0.0, 0.0, 1.0>
up <0.0, 1.0, 0.0>
right <4/3, 0.0, 0.0>
}
light_source { <10.0, 40.0, -30.0> colour White }
podemos então fazer aparecer
uma bola amarela incluindo as seguintes linhas de código:
sphere {
<0, 1, 2>, 3
texture {
pigment { color Yellow }
}
}
O primeiro vetor descreve a
posição do centro da esfera, sendo que neste exemplo a coordenada
x é zero, significando que a imagem estará centrada na imagem,
y é 1, significando que estará levemente acima do centro
e z é 2, significando que estará a duas unidades a frente
de câmera, que está na posição z=-10. Após
as coordenadas do centro se encontra uma vírgula e um valor escalar
que indica o raio da esfera, que neste caso é 3. A figura
abaixo mostra a interface interativa do POV-Ray na versão Windows:
![](povray3.jpg)
E, por fim, este código
gera a imagem abaixo:
![](povray1.jpg)
Uma cena bastante mais complexa,
com um grande conjunto de texturas projetadas sobre esferas, pode ser vista
no exemplo abaixo, também gerado com o POV-Ray. Observe a qualidade
especular de algumas superfícies:
![](povray2.jpg)
Mais exemplos de renderização
de cenas realmente complexas com POV-Ray podem ser vistos na página
de exemplos
de renderização.
RADIANCE
RADIANCE é um sistema
de software de raytracing altamente preciso para computadores UNIX. RADIANCE
não é software livre, mas é licenciado gratuitamente
para uso de pesquisa e não comerial. Para uso comercial é
necessária a aquisição de uma licença. RADIANCE
foi desenvolvido com suporte financeirto do Departamento de Energia dos
Estados Unidos e do Governo Federal da Suíça. A propriedade
intelectual do software encontra-se em mãos do Conselho Curador
da Universidade da Califórnia.
1. Descrição
RADIANCE objetiva suportar
iluminadores e arquitetos na predição dos níveis de
iluminação e aparência de um espaço anteriormente
à construção. O pacote inclui programas para a modelagem
e compilação da geometria de uma cena, dados de luminárias
e propriedades de materiais, todos entradas necessárias à
simulação do ambiente. A simulção de iluminação
em si utiliza técnicas de raytracing para o cálculo de valores
de radiância, ou seja, da quantidade de luz passando por um determinado
ponto em uma determinada direção, que são tipicamente
arranjados para formar uma imagem de qualidade fotográfica. A imagem
resultante pode ser analisada, visualizada, manipulada e exportada em vários
formatos.
A figura abaixo mostra a
mesma simulação da sala de aula mostrada anteriormente mostrando
as curvas de isoluminância, que indicam que áreas do ambiente
possuem os mesmos níveis de iluminação.
![](radiance3.jpg)
2. Metodologia
A parte mais importante do pacote
é o engine de simulação de iluminação,
que calcula os níveis de luminosidade e renderiza as imagens. A
entrada para esta simulação é uma descrição
da geometria tridimensional das superfícies do ambiente, seus materiais
e das fontes de luz da cena. A renderização de uma
cena adicionalmente exige que se informe o ponto de visada e a direção
de projeção.
Uma vez que uma geometria
de uma cena foi definida, ela é compilada em uma Octree, a qual
atua como uma estrutura de dados eficiente para o processo de traçado
de raios, permitindo que se determine quais superfícies um raio
intercepta.
A simulação
de ilumiação utiliza uma combinação de de métodos
de Monte Carlo e raytracing determinístico para adquirir um resultado
razoável em um tempo razoável. O método parte de um
ponto de medição, usualmente o ponto de visada ou centro
de projeção e traça os raios de volta às fontes
de luz. O cálculo é dividido em três componentes: a
componente direta, a componente especular indireta e a componente difusa
indireta.
A componente direta consiste
da luz incidente sobre uma superfície diretamente da fonte de luz
ou através da tranferência de uma ou mais superfícies
perfeitamente especulares. Uma lista de emissores de luz é utilizada
e ordenada com base na sua contribuição potencial para
minimizar o número de raios gerados para teste de visibilidade.
Amostragem de Monte Carlo é combinada com a subdivisão de
fontes de luz extensas para um cálculo apurado de áreas de
penumbra. Transferências de luz especulares são manipuladas
de forma eficiente transfomrando-se estas áreas refletoras em fontes
de luz virtuais.
A componente especular
indireta consiste de luz incidindo sobre uma superfície a partir
de outras superfícies sendo refletida de forma direcional. Transferências
perfeitamente especulares são manipuladas através da redireção
simples do raio refletido na direção adequada. Transferências
especulares grosseiras são modeladas através da amostragem
de Monte Carlo da direção transmitida ou refletida.
A componente difusa indireta
consiste
de luz incidindo em uma superfície e sendo refletida ou retransmitida
sem nenhuma preferência direcional. A natureza desta componente exige
que centenas de direções sejam examinadas para que se possa
realizar uma estimativa de Monte Carlo razoável. Por sorte, a componente
difusa sofre muito poucas alterações ao longo de uma superfície,
permitindo que se faça algumas amostragens a intervalos relativamente
grandes e se interpole o restante. Esta é a premissa básica
do método de "radiosidade". O método utilizado em RADIANCE
utiliza restrições adicionais de gradiente para melhorar
esta interpolação, exigindo porém que se utilize geometrias
simples.
Além deste método
de simulação básico descrito acima, fontes de luz
secundárias como janelas, claraboias e outros podem ser levadas
também em consideração. A distribuição
da influência destas fontes é calculada em uma etapa de preprocessamento,
o que grandemente incrementa a eficiência do processo como um todo.
I
Nas figuras abaixo vemos
mais duas cenas, a primeiar do cálculo de ilumiação
para um ambiente provido de janela e outra mostrando a foto deste ambiente:
![](radiance5.jpg)
Heidelberg
Raytracer
German Cancer Research Center
Heidelberg
Department of Medical and Biological
Informatics
H.P. Meinzer, A. Mayer,
K. Meetz, U.Engelmann, M. Schäfer
Visualização de
Volumes utilizando o Heidelberg Raytracing Model
O Modelo de Raytracing de
Heidelberg (HRM) é um método de visualização
3D que modela a interação da luz com objetos em conjuntos
de dados médicos. É especialmente estruturado para as necessidades
de visualização médica e é o único método
de sua categoria que incorpora sombras, o que é crucial para a percepção
de profundidade adequada das reconstruções resultantes. O
HRM foi desenvolvido em meados da década de 1990 no Centro Alemão
de Pesquisas do Câncer - DKFZ em conjunto com o Departamento de Informática
Médica da Universidade de Heidelberg.
O volume de imagem considerado
é um volume de cortes tomográficos ou de ressonância
magnética, onde cada pixel de um corte é tratado como um
voxel deste volume, e pode ser observado por um observador a partir de
diferentes ângulos. Os raios de luz são traçados através
do volume e o resultado é projetado. Para tanto considera-se os
voxels como possuindo diferentes graus de transparência, sendo a
transparência daad pela densidade radiológica de um
determinado voxel. A densidade radiológica, medida em unidades de
Hounsfield (HU), é expressa na imagem por um tom de cinza, que quanto
mais claro, maior é seu valor e portanto menor a sua transparência.
Para realizar o efeito tridimensional, utiliza-se duas fontes de luz diferentes,
as quais geram sombras e a impressão tridimensional.
![](HD1.jpg)
A Figura 2 ilustra o princípio
do HRM. Com base em uma imagem de gradientes são detereminadas as
bordas aproximadas dos objetos e um mapa de transparências é
construído. Luz de duas fontes diferentes, a 0 e a 45 graus
do observador é traçada sobre o plano de projeção
levando em consideração tanto absorção como
reflexão.
![](HD2.jpg)
Imagens codificadas a cores
como a seqüência de teste da figura 3 podem ser geradas através
da atribuição de valores de pseudocores a mapeamentos de
densidade radiológica em imagens segmentadas. Isto pode ser relevante
para ressaltar determinadas estruturas em medicina.
![](HD3.jpg)
O HRM e uma gama variada
de algoritmos de segmentação foram paralelizados utilizando-se
pacotes de paralelização padrão como PVM, MPI e Posix
1003.c pthreads. Isto garante a portabilidade do pacote para várias
arquiteturas paralelas, sejam de memória compartilhada ou de memória
distribuída.
Alguns Exemplos do HRM
![](chapter1.figure.id.76.gif) ![](chapter1.figure.id.10.gif)
|
|