Você está na página 1de 9

Departamento de Engenharia Informática

Faculdade de Ciências e Tecnologia


Universidade de Coimbra
2006/07

Computação Gráfica
Projecto Final

Ray Tracing

Hugo Emanuel Figueiredo da Costa (hecosta@student.dei.uc.pt) Nº 501063027

Pedro Carvalho de Oliveira (pcoliv@student.dei.uc.pt) Nº 501062444


Computação Gráfica | Projecto Final

Índice

1. Introdução...........................................................................3
2. Ray Tracing..........................................................................4
2.1. Esfera ............................................................................4
2.2. Plano .............................................................................4
2.3. Quadrilátero...................................................................5
2.4. Iluminação.....................................................................5
2.5. Sombras.........................................................................5
2.6. Reflexão.........................................................................6
2.7. Refracção.......................................................................7
2.8. Materiais ........................................................................7
3. Conclusão ............................................................................8
4. Bibliografia ..........................................................................9

Anexo I – Imagens Finais

2
Computação Gráfica | Projecto Final

1. Introdução
Neste projecto era pretendido desenvolvermos os nossos
conhecimentos de Computação Gráfica, através da realização de um
projecto de tema livre. Depois de muita pesquisa, decidimos
implementar um pequeno Ray Tracer [1], pois a sua criação iria
implicar o estudo e aplicação de muitos conceitos adquiridos ao longo
do semestre.
Foi escolhida a linguagem C++ para a realização deste
projecto, pois a mesma alia a potência e versatilidade necessárias a
este projecto, essencialmente no que diz respeito ao paradigma OOP
e estruturas de dados auxiliares.
A bibliografia base ao longo deste projecto foi,
respectivamente, [2], [3], [4] e [5].

3
Computação Gráfica | Projecto Final

2. Ray Tracing
Segundo [2], “Raytracing is a technique for image synthesys:
creating 2-D picture of a 3-D world”. Na busca de criar imagens cada
vez mais realísticas, foi criado o algoritmo de Ray Tracing. Apesar de
simplista na sua forma mais básica, consegue resultados
impressionantes nesse objectivo, sendo na actualidade um dos
métodos mais perfeccionistas existentes.
Neste projecto implementámos uma versão que se pode
considerar “primária” na generalidade, mas que para os nossos
conhecimentos e objectivos académicos da cadeira, pensamos ser
suficiente.
De seguida serão resumidamente apresentadas algumas das
características mais relevantes implementadas.

2.1. Esfera

Com o auxilio de [3], definimos a


intersecção do raio com uma esfera. Sendo
a esfera um dos sólidos mais fáceis de
implementar, decidimos ser o primeiro
passo no nosso projecto.

2.2. Plano

De seguida introduzimos o objecto plano,


que terá um papel fulcral para os testes a
efectuar nas fases mais complexas do
raytracer. O método de intersecção foi
baseado em [3].

4
Computação Gráfica | Projecto Final

2.3. Quadrilátero

O Quadrilátero foi o próximo objecto a


implementar. Muito semelhante à
intersecção com o plano, o método foi
baseado e adaptado a partir da intersecção
de triângulos encontrada em [8].

2.4. Iluminação
Após várias pesquisas e vários testes,
encontrámos finalmente um modelo de
iluminação que se adapta às nossas
expectativas. O nosso modelo segue o
apresentado pelo [6] em que a cor num
dado ponto resulta da soma da sua
componente local, calculada através do
modelo de Phong, uma componente
reflectiva, caso o objecto tenha esse
atributo e uma componente refractiva,
também tendo em conta se esta existe ou
não.

2.5. Sombras
Na implementação do efeito de sombras,
para cada ponto do objecto onde se calcula
a cor, são lançados raios para todas as
fontes de luz existentes no cenário. Caso
haja obstáculos entre o ponto do objecto
de luz, vai sendo guardado o produto dos

5
Computação Gráfica | Projecto Final

índices de refracção (nível de opacidade)


desses mesmos objectos. Caso o resultado
final seja o valor 1, significa que não existe
nenhum obstáculo e consequentemente
toda a luz daquela fonte chega àquele
ponto. Se por sua vez o resultado for 0,
então nenhuma luz chega ao ponto e este
encontra-se à sombra (pelo menos para
aquele ponto de luz). Caso o resultado
varie entre 0 e 1 exclusive, significa que
apenas parte da luz chegará ao ponto que
pretendemos calcular a cor. Esse resultado
servirá para ser multiplicado pelas
componentes difusas e especulares
associadas a cada fonte de iluminação.

2.6. Reflexão
Cada objecto tem um índice de reflexão
que varia entre 0 e 1. Caso este valor seja
superior a 0, é lançado um novo raio
reflectido (sendo a sua direcção calculada
tendo em conta [7]) que, recursivamente,
vai percorrer o cenário até um
predeterminado nível. O resultado desta
componente será, como referenciado no
modelo de iluminação, tido em conta para
o cálculo da cor num dado ponto.

6
Computação Gráfica | Projecto Final

2.7. Refracção
O objecto esfera tem também um índice
de refracção, é um valor que varia entre 0
e 1 inclusive. O valor 0 significa que o
objecto é totalmente opaco. Cada objecto
tem ainda um coeficiente de refracção, um
valor que tem a ver com as propriedades
físicas do material. Tendo em conta esse
coeficiente, e caso o objecto em causa não
seja totalmente opaco, é lançado um novo
raio cuja direcção é calculada tendo em
conta [7]. Tal como na reflexão, este
processo é recursivo e também terá o seu
peso no cálculo da cor em cada ponto.

2.8. Materiais
Outra funcionalidade implementada foi a
forma como são definidas as cores dos
objectos. Deixámos de introduzir
directamente a cor de um dado objecto e
passámos a especificar as propriedades
dos materiais inerentes a este.
Nomeadamente no que diz respeito aos
coeficientes ambiente, difuso, especular e
índice de especularidade do material em
questão. Como referência de valores para
teste utilizámos a tabela providenciada em
[9].

7
Computação Gráfica | Projecto Final

3. Conclusão
Uma das principais dificuldades neste projecto foi as
divergências em termos de bibliografia existentes. Muitos dos
conceitos implementados sofrem de falta de definição prática, sendo
que encontrámos múltiplas definições, por vezes totalmente
diferentes, de muitos conceitos, ficando difícil para nós escolher quais
implementar.
Outra dificuldade existente foi o cálculo da complexidade da
nossa aplicação em termos de esforço. Cada vez que é implementada
uma nova funcionalidade, surgem novas oportunidades e situações de
implementação de novas funções ou melhoramento das existentes. É
muito difícil considerar que uma funcionalidade está totalmente
implementada, sendo também muito difícil ter a certeza que a
mesma está correctamente implementada, devido ao elevado número
de situações que podem acontecer em todo o tipo de cenários. Torna-
se difícil para nós decidir quando parar, ficando sempre a sensação
que podíamos ter feito ainda mais e/ou melhor.
Neste projecto o maior esforço foi dispendido na pesquisa e
investigação de uma área totalmente desconhecida para nós. Muitos
dos conceitos envolvidos são de fácil implementação em termos de
programação, mas o trabalho de compreensão e teste dos mesmos
fez com que a maior parte do tempo fosse passada a estudar
conceitos teóricos, ou a testar a nossa aplicação.
Na generalidade achamos que cumprimos os nossos objectivos
iniciais, estando ao mesmo tempo orgulhosos no nosso trabalho. É
verdade que excedemos o número de horas pretendidas para este
projecto, mas mesmo assim ficaram algumas coisas que poderiam
ser melhoradas. Talvez o futuro da nossa carreira académica nos
proporcione a oportunidade de continuar o trabalho efectuado.

8
Computação Gráfica | Projecto Final

4. Bibliografia
[1] Wikipedia,”Ray Tracing”, http://en.wikipedia.org/wiki/Ray_tracing
[2] An Introduction to Ray Tracing, Andrew S. Glassner, Academic
Press, 1989
[3] HyperGraph, “Ray Tracing”,
http://www.siggraph.org/education/materials/HyperGraph/raytrace/rt
race0.htm
[4] Ray Tracing: Graphics for the Masses, Paul Rademacher,
http://www.cs.unc.edu/~rademach/xroads-RT/RTarticle.html
[5] Computação Gráfica, “Capitulo 5: Cor e Iluminação”, Jorge
Henriques & Paulo de Carvalho
[6] Imperial College London, “Interactive Computer Graphics: Lecture
10 – Ray tracing Part II”,
http://www.doc.ic.ac.uk/~dfg/graphics/GraphicsSlides10.pdf
[7] Reflections and Refractions in Ray Tracing, Bram de Greve, 2004,
http://www.flipcode.com/articles/reflection_transmission.pdf
[8] Imperial College London, “Interactive Computer Graphics: Lecture
9 – Ray tracing Part I”,
http://www.doc.ic.ac.uk/~dfg/graphics/GraphicsSlides09.pdf
[9] OpenGL/VRML Materials,
http://devernay.free.fr/cours/opengl/materials.html

Você também pode gostar