• Nenhum resultado encontrado

Utilização Eficiente de Múltiplos Componentes de Hardware para a Síntese de Imagem e Animações

N/A
N/A
Protected

Academic year: 2021

Share "Utilização Eficiente de Múltiplos Componentes de Hardware para a Síntese de Imagem e Animações"

Copied!
199
0
0

Texto

(1)

Francisco de Sousa Pereira

U

U

T

T

I

I

L

L

I

I

Z

Z

A

A

Ç

Ç

Ã

Ã

O

O

E

E

F

F

I

I

C

C

I

I

E

E

N

N

T

T

E

E

D

D

E

E

M

M

Ú

Ú

L

L

T

T

I

I

P

P

L

L

O

O

S

S

C

C

O

O

M

M

P

P

O

O

N

N

E

E

N

N

T

T

E

E

S

S

D

D

E

E

H

H

A

A

R

R

D

D

W

W

A

A

R

R

E

E

P

P

A

A

R

R

A

A

A

A

S

S

Í

Í

N

N

T

T

E

E

S

S

E

E

D

D

E

E

I

I

M

M

A

A

G

G

E

E

M

M

E

E

A

A

N

N

I

I

M

M

A

A

Ç

Ç

Õ

Õ

E

E

S

S

UNIVERSIDADE DE TRÁS-OS-MONTES E ALTO DOURO

V

ILA

R

EAL

,

2008

(2)
(3)

U

U

T

T

I

I

L

L

I

I

Z

Z

A

A

Ç

Ç

Ã

Ã

O

O

E

E

F

F

I

I

C

C

I

I

E

E

N

N

T

T

E

E

D

D

E

E

M

M

Ú

Ú

L

L

T

T

I

I

P

P

L

L

O

O

S

S

C

C

O

O

M

M

P

P

O

O

N

N

E

E

N

N

T

T

E

E

S

S

D

D

E

E

H

H

A

A

R

R

D

D

W

W

A

A

R

R

E

E

P

P

A

A

R

R

A

A

A

A

S

S

Í

Í

N

N

T

T

E

E

S

S

E

E

D

D

E

E

I

I

M

M

A

A

G

G

E

E

M

M

E

E

A

A

N

N

I

I

M

M

A

A

Ç

Ç

Õ

Õ

E

E

S

S

Tese apresentada à Universidade de Trás-os-Montes e Alto Douro para cumprimento dos requisitos necessários à obtenção do grau de Doutor em Informática, realizada sob a orientação do Professor Doutor Luís Gonzaga Mendes Magalhães, Professor Auxiliar, e do Professor Doutor João Paulo Fonseca da Costa Moura, Professor Auxiliar, ambos do Departamento de Engenharias da Universidade de Trás-os-Montes e Alto Douro, de acordo com o dispostos no Decreto-Lei 216/92.

(4)
(5)

Aos meus pais,

(6)
(7)

R

R

EESSUUMMOO

Palavras chaves: Processamento paralelo, computação gráfica; abstracção;

múltiplos recursos.

Com o advento de sistemas computacionais a um preço acessível e cada vez mais poderosos em termos de cálculo, incluindo computadores pessoais (PC) de “

desktop

”, a geração de imagens sintéticas de cenários complexos, utilizando iluminação global, é uma meta alcançável. No entanto, devem ser tidos em conta alguns pormenores no que respeita à simulação correcta dos mecanismos de transporte da luz baseados em modelos físicos, para atingir interacção em tempo real.

O poder computacional oferecido pelos actuais sistemas computacionais não é só derivado do aumento das capacidades dos CPU que os constituem, mas também da utilização de outros componentes dos sistemas, como as placas gráficas e outros componentes adicionais de processamento. A implementação de algoritmos de “

ray tracing

” nos referidos sistemas computacionais focam tipicamente a utilização exclusiva de um único componente, ou realizam tarefas muito específicas em determinados componentes. Este tipo de abordagem leva a uma falta de balanceamento ou a um mau balanceamento na distribuição de tarefas, conduzindo em casos mais extremos à marginalização de determinados componentes.

Neste trabalho apresenta-se um modelo para a gestão dos componentes num PC standard de uma forma eficiente e balanceada. No centro desta abordagem está a separação do ciclo principal da síntese da imagem e dos componentes de processamento especifico, através de um modelo por camadas com uma interface abstracta e independente dos recursos físicos. Assim isolando-se a camada lógica da implementação das primitivas que compõem o processo de síntese. Espera-se

(8)

portabilidade, facilidade de expansão a novos componentes com maior capacidade de processamento, optimizações ao nível dos recursos/componentes, balanceamento de tarefas e modularidade.

(9)

A

A

BBSSTTRRAACCTT

Keywords: Parallel computing; computer graphics; abstraction; multiples

resources.

With the advent of affordable high computational power systems, including standard PC desktop configurations, computer graphics image production of complex models, using global illumination, is in our grasp. Nevertheless, some details must be taken into account when physically correct simulation of light transport, in real-time interaction, is to be achieved.

The computational power provided by current computer systems is not only supported by fast improvement in CPU capabilities, but also by the inclusion in such systems of additional hardware such as GPUs and add-on boards, sometimes even more powerful than the CPU itself. Implementations of ray tracing algorithms in such systems usually targets one of the available devices, or allocates specific tasks to each type of resources. This approach tends to drive the system to unbalanced work distribution and leads, in extreme cases, to marginalization of some hardware components.

The work proposed in this thesis presents a model for efficient PC multiple devices management. This approach focuses in separating the main rendering algorithm from the low level computer graphics routines and device particular specifications, through an abstract layer model, independent of the hardware physical characteristics. In this way it is possible to isolate the specification of a rendering API from the rendering process. This type of organization will provide advantages at several levels, namely portability, smooth integration of new and more powerful hardware, code optimizations at resources level, load balancing and modularity.

(10)
(11)

A

A

GGRRAADDEECCIIMMEENNTTOOSS

Na elaboração deste trabalho várias foram as pessoas que me apoiaram e ajudaram, sobre as mais diversas formas. Por este motivo gostaria de agradecer às seguintes pessoas pelo seu empenho, sabendo de antemão que é impossível citar todos aqueles que contribuíram. Para estes desde já as minhas sinceras desculpas pelo facto.

Aos meus orientadores Professor Doutor Luís Gonzaga Mendes Magalhães e Professor Doutor João Paulo Fonseca da Costa Moura, ambos do Departamento de Engenharias da Universidade de Trás-os-Montes e Alto Douro, pelo encorajamento e apoio que dispensaram na realização deste trabalho, muito para além do que era esperado.

Aos colegas do Departamento de Engenharias da Universidade de Trás-os-Montes e Alto Douro, pelos comentários, sugestões e apoio prestado.

À Universidade de Trás-os-Montes e Alto Douro, nas pessoas do seu Magnífico Reitor, Professor Doutor Armando Mascarenhas Ferreira e do Coordenador Científico do Departamento de Engenharias, Professor José Afonso Moreno Bulas Cruz, colega e amigo nesta caminhada.

Um agradecimento ainda a todos aqueles que criam e disponibilizam software de livre acesso e utilização. Saliento aqueles que vêm produzindo as mais variadas ferramentas para Linux, incluindo o próprio sistema, e ainda os que promovem a sua distribuição.

Finalmente, gostaria de agradecer aos meus pais, Maria de Sousa Freitas e João Pereira, pelo seu apoio, sem o qual este trabalho não seria possível.

(12)
(13)

Í

Í

NNDDIICCEE 1 Introdução ...1 2 Revisão bibliográfica...5 2.1 Rendering...6 2.1.1 Ray tracing...9 2.1.2 Back traycing... 11

2.1.3 Operações básicas no rendering... 14

2.1.4 Intersecções... 15

2.1.5 Geometria ... 17

2.1.6 Estruturas de representação em ray tracing... 19

2.1.7 Formas de aceleração dos cálculos ... 23

2.1.8 Iluminação de um ponto ... 25

2.2 Algoritmos de iluminação global ... 28

2.2.1 Irradiância (RadianceIrradiance Cache) ... 28

2.2.2 Radiosiodade... 30

2.2.3 Photon Mapping... 32

2.3 Computação paralela... 34

2.4 Abordagens específicas ... 42

2.4.1 Placas gráficas... 43

2.4.2 Placas auxiliares de processamento ... 47

2.4.3 Implementação em CPU com optimizações ... 49

2.4.4 O projecto RoD... 54

3 Modelo Proposto ... 57

3.1 Introdução ... 57

3.2 Definição do modelo proposto... 58

3.2.1 Definição de termos e conceitos do modelo ... 60

3.2.2 Descrição global do HRA ... 62

3.2.3 Classificação das primitivas... 64

(14)

3.3 Especificação ... 68 3.3.1 Casos-de-Uso ... 70 3.3.2 Diagramas de actividades ... 74 3.3.3 Diagramas de classes... 79 3.3.4 Diagrama de estados ... 83 3.4 Interacção do modelo ... 86

3.4.1 Cálculo da intersecção de um raio primário com um objecto... 87

3.4.2 Cálculo da intersecção de um raio secundário com um objecto ... 93

3.4.3 Cálculo da iluminação especular num ponto ... 95

3.4.4 Cálculo da iluminação difusa num ponto ... 96

3.4.5 Outros exemplos para outros tipos de operações... 97

3.5 Problemas associados a ambientes heterogéneos ... 98

3.5.1 Representação dos dados ... 98

3.5.2 Modelos de comunicação heterogéneos ... 100

3.5.3 Modelos de programação heterogéneos... 100

3.6 Desenho dos elementos do HRA... 101

3.6.1 Primitivas ... 102

3.6.2 Unidades de trabalho ... 105

3.6.3 Contentores para unidades de trabalho e resultados ... 106

3.6.4 Representação dos dados ... 109

3.6.5 Gestão e prioritização de unidades de trabalho... 109

3.6.6 Comunicação entre o HRA e os recursos ... 110

3.7 Questões funcionais e tecnológicas de implementação ... 114

4 Trabalho experimental... 117

4.1 Introdução ... 117

4.2 Implementação do renderer... 118

4.2.1 Dados básicos e estruturas simples ... 119

4.2.2 Programação modular ... 121

4.3 Validação experimental... 123

4.3.1 Metodologia definida para a validação experimental... 123

4.3.2 Cenários utilizados ... 125

4.3.3 Plataformas utilizadas ... 128

(15)

4.4.1 Configuração do renderer só no CPU sem HRA (R+P) ... 129

4.4.2 Configuração CPU com HRA (R+H1+P)... 132

4.4.3 Configuração CPU e GPU com HRA (R+H*+P)... 136

4.4.4 Configuração GPU com HRA (R+H.GPU+P) ... 138

4.5 Análise aos resultados das experiências realizadas... 139

4.5.1 Comparação entre CPU com e sem HRA ... 140

4.5.2 Comparação HRA com um ou dois recursos ... 141

4.6 Conclusões... 142

5 Conclusões e trabalho futuro... 143

5.1 Trabalho futuro ... 146

Referências... 147

Apêndice A – Recursos utilizados... 157

Apêndice B – Exemplo de primitiva ... 159

(16)
(17)

L

L

IISSTTAADDEETTAABBEELLAASS

Tabela 1 – Configuração das plataformas (hardware) utilizadas...128

Tabela 2 – Configurações gerais para as experiências com os cenários A e B...129

Tabela 3 – Quadro resumo dos resultados “CPU sem HRA”...131

Tabela 4 – Quadro de resultados “CPU sem HRA” (plataforma 1)...131

Tabela 5 – Quadro de resultados “CPU sem HRA” (plataforma 2)...132

Tabela 6 – Quadro resumo dos resultados “CPU com HRA”...134

Tabela 7 – Quadro de resultados “CPU com HRA” (plataforma 1)...135

Tabela 8 – Quadro de resultados “CPU com HRA” (plataforma 2)...135

Tabela 9 – Quadro resumo dos resultados “CPU + GPU com HRA” ...137

Tabela 10 – Quadro de resultados “CPU com HRA incluindo GPU” (plataforma 1)...137

Tabela 11 – Quadro de resultados “CPU com HRA incluindo GPU” (plataforma 2)...138

Tabela 12 – Comparação das diferentes configurações para o cenário A e B (plataforma 1)...139

Tabela 13 – Comparação das diferentes configurações para o cenário A e B (plataforma 2)...140

Tabela 14 – Características do computador 1...157

Tabela 15 – Características do computador 2...158

Tabela 16 – Características da placa gráfica designada de GPU 1...158

(18)
(19)

L

L

IISSTTAADDEEFFIIGGUURRAASS

Figura 1 – Equação de rendering (Kajiya 1986)...10

Figura 2 – Raios primários e secundários no back tracing...12

Figura 3 – Uma aproximação geométrica de uma esfera através de polígonos...17

Figura 4 – Geometria de um golfinho representada por um conjunto de polígonos [Img01]...21

Figura 5 – Raio oposto à normal num ponto ...26

Figura 6 – BSDF [Img02]...26

Figura 7 – Irradicância e zona de influência das amostras (Ward 1988)...30

Figura 8 – Múltiplas interacções utilizado o método da radiosidade [Img03]...31

Figura 9 – Iluminação directa apenas vs. inclusão da radiosidade [Img03] ...31

Figura 10 – Casuísticos utilizando photon mapping [Img04] ...33

Figura 11 – Visão geral da interacção no projecto RoD...55

Figura 12 – HRA dataflow...62

Figura 13 – Trabalho realizado em função do tipo de unidades e sua frequência...65

Figura 14 – Sistema em função do tipo recursos e sua multiplicidade ...66

Figura 15 – Correlação de eficiência entre um tipo de unidade de trabalho e um tipo de recurso...67

Figura 16 – Caso-de-uso “Processar UT” pelo renderer...71

Figura 17 – Caso-de-uso “Obter resultados” pelo renderer...73

Figura 18 – Caso-de-uso “Iniciar sistema” realizado pelo HRA...74

Figura 19 – Diagrama de actividades para o processamento de uma UT ...76

Figura 20 – Diagrama de actividades para inicialização do sistema...78

Figura 21 – Diagrama de classes do modelo proposto...81

Figura 22 – Diagrama de estados de uma unidade de trabalho ...84

Figura 23 – Diagrama de estados de um Contentor...85

Figura 24 – Diagrama de estados do HRA...85

Figura 25 – Diagrama de estados de um Recurso ...86

Figura 26 – Divisão do plano imagem. ...88

Figura 27 – Distribuição de raios que passam por um pixel...89

(20)

Figura 30 – Divisão e dependências entre tipos de primitivas definidas ...104

Figura 31 – Composição geral de uma unidade de trabalho...106

Figura 32 – Modelo de comunicação sliding window [Img05]...112

Figura 33 – Código ilustrativo da definição de tipo de dados de base...120

Figura 34 – Código ilustrativo da definição das estruturas complexas...120

Figura 35 – Código (declaração) ilustrativo da relativa independência dos dados ao alto nível ...121

Figura 36 – Código (função) ilustrativo da relativa independência dos dados a alto nível...122

Figura 37 – Cenário A com esferas e pirâmides e inter reflexões (CPU)...126

Figura 38 – Cenário B com esferas e inter reflexões (CPU+GPU)...127

Figura 39 – Interacção entre níveis na configuração CPU sem HRA ...130

Figura 40 – Interacção entre níveis na configuração CPU com HRA ...133

(21)
(22)
(23)

1

1

I

I

N

N

T

T

R

R

O

O

D

D

U

U

Ç

Ç

Ã

Ã

O

O

Desde o seu aparecimento, a computação gráfica esteve sempre ligada a desenvolvimentos tecnológicos ao nível do hardware, essencialmente pela sua natureza de apresentação visual e necessidade de poder de cálculo intensivo. Quando Kajiya apresentou da equação de

rendering

, envolvendo as contribuições de todas as fontes de luz para cada ponto de cada superfície (luz reflectida e luz auto-transmitida), tornou-se claro que o esforço de cálculo necessário para gerar a síntese de uma imagem seria elevado, mesmo utilizando resoluções reduzidas na imagem produzida.

A equação apresentada também sugere a existência de uma grande quantidade de cálculos independentes entre si. Esta característica é um aspecto importante, que determinou desde cedo o recurso a soluções de implementação de síntese de imagem (

rendering

) em arquitecturas inspiradas no paradigma de computação paralela. Esta independência de dados não só se manifesta num plano mais geral, na soma das várias componentes de luz num determinado ponto (luz reflectida e luz auto-transmitida), como também na contribuição de cada fonte de

(24)

luz para a iluminação de cada ponto. Existe ainda um terceiro plano de independência, pois a síntese de cada ponto da imagem não é directamente dependente dos valores dos pontos vizinhos.

O advento de sistemas computacionais com custos relativamente reduzidos, o que os torna acessíveis a novos públicos, permitiu um conjunto de desenvolvimentos tecnológicos que colocam hoje ao alcance de uma maior faixa de utilizadores equipamentos com desempenho da ordem de vários Gigaflops (

floating point opertations per second

).

Esta situação poderá levar a uma mudança de paradigma, com os algoritmos de rasterização adoptados nos equipamentos actuais ceder lugar aos algoritmos de

rendering

rápido de cenários complexos, utilizando iluminação global.

Com efeito, o desempenho oferecido por um computador actual não se deve apenas ao contínuo aumento da frequência de relógio do CPU, mas também ao rápido desenvolvimento das capacidades de outros componentes fundamentais do sistema computacional, incluindo as placas gráficas (GPU) e outras placas adicionais de processamento, bem como também aos sistemas de comunicação entre componentes.

A nível da computação gráfica, a abordagem tradicional de implementação de um algoritmo de

ray tracing

centrava esforços na exploração das potencialidades de um único recurso (ou tipo de recurso), ou procurava atribuir um conjunto de tarefas diferenciadas a tipos específicos de hardware. Esta abordagem conduz normalmente a situações de insuficiente aproveitamento dos recursos disponíveis, nomeadamente pela falta de balanceamento do trabalho de cálculo atribuído aos vários recursos. Tipicamente, cada tipo de recurso desempenha um conjunto específico de tarefas (e.g. a placa gráfica calcula intersecções, o CPU assegura a gestão de processo).

Assim, cada vez mais, os projectistas colocam esforços no desenvolvimento de sistemas mais completos, explorando a cooperação entre unidades funcionais, em detrimento de uma visão somente focada no aumento de velocidade do CPU.

(25)

Surgem sistemas computacionais com uma maior complexidade, agregando unidades funcionais diversas, cuja programação exige novas abordagens.

É importante definir estratégias e organizações capazes de utilizar e gerir os recursos disponíveis em computadores mais recentes, de uma forma eficiente e balanceada. Neste sentido, nesta tese é proposta a criação de uma interface abstracta entre o ciclo principal de interacção de

rendering

de alto nível e o hardware disponível, capaz de assegurar uma maior independência entre estes dois níveis. É definido um modelo de reserva e gestão de recursos, designado abreviadamente por HRA, acrónimo da designação “

Hardware Resource Allocation

model

”, que permite uma distribuição adequada do esforço computacional pelos recursos disponíveis.

O modelo proposto apresenta um conjunto de características, com reflexos a vários níveis:

• Portabilidade ao nível de vários aspectos, como a utilização de novos e mais poderosos recursos à medida que este forem disponibilizados;

• Optimização do código ao nível dos recursos físicos; • Modularidade e balanceamento de trabalho;

• Aspectos mais práticos relativos à estratégia de gestão e implementação em ambientes heterogéneos abaixo do nível de abstracção, onde a performance é um aspecto chave.

O presente documento encontra-se organizado em cinco capítulos, para além da bibliografia, um conjunto de apêndices e um glossário.

No capítulo seguinte, capítulo 2, é apresentada uma revisão bibliográfica, onde são abordados alguns conceitos gerais de computação gráfica, com ênfase na síntese de imagem, recorrendo a modelos físicos da simulação do comportamento da luz. São abordados aspectos relevantes para a síntese de imagem recorrendo ao paradigma de processamento paralelo. São também

(26)

referidas abordagens adoptadas para a aceleração do processo de

rendering

em equipamentos específicos e soluções mistas.

No capítulo 3 é proposto e especificado um modelo de reserva e gestão de recursos, o HRA “

Hardware Resource Allocation model

”, expondo este conceito e abordando problemas relacionados com a utilização de ambientes compostos por um conjunto de recursos de hardware heterogéneos, como seja o caso da representação de dados, os paradigmas de programação, a comunicação entre os vários recursos. São ainda propostas soluções e analisadas questões de engenharia emergentes.

O capítulo 4 é referente ao trabalho experimental realizado no sentido de corroborar o modelo proposto no capítulo anterior. É descrita a metodologia adoptada, apresentadas as experiências e configurações realizadas, bem como a análise dos resultados obtidos.

Finalmente, no capítulo 5, são apresentadas as conclusões sobre o trabalho desenvolvido e modelo proposto, para além de propostas de trabalho futuro relacionadas com melhoramentos e adaptações de algumas das características do modelo.

(27)

2

2

R

R

E

E

V

V

I

I

S

S

Ã

Ã

O

O

B

B

I

I

B

B

L

L

I

I

O

O

G

G

R

R

Á

Á

F

F

I

I

C

C

A

A

O presente capítulo tem como objectivo apresentar ao leitor uma breve descrição do estado da arte no campo da computação gráfica, mais especificamente na utilização de múltiplos recursos para a aceleração do processo de

rendering

em ambientes potencialmente paralelos. O capítulo encontra-se estruturado da seguinte forma: No sentido de enquadrar o leitor com o tema abordado é feita uma abordagem de uma visão mais genérica da computação gráfica, que inclui alguns factos históricos relevantes no ponto 2.1. Ainda dentro deste ponto é apresentada alguma teoria e técnicas de base utilizadas na área, para um melhor enquadramento de opções ou abordagens utilizas, referidas quer neste capítulo quer no capítulo 3, referente ao modelo proposto.

No ponto 2.2, é apresentada um breve descrição das características principais dos algoritmos de

rendering

com inclusão da componente de iluminação global, para além das componentes directa e indirecta, no sentido de expor especificidades destes tipos algoritmos e soluções desenvolvidas com o objectivo de acelerar o processo de obtenção do resultado final em tempo real. Ainda dentro

(28)

desta perspectiva, no sentido de complementar a informação fornecida, o ponto 2.3 abordada a temática da computação paralela aplicada à computação gráfica. Neste ponto são referidos aspectos ligados à evolução tecnológica dos sistemas e modelos utilizados, familiarizando o leitor mais distante desta área com alguma terminologia e conceitos adoptados na área da computação paralela.

Finalmente no ponto 2.4 e respectivos sub pontos, são abordados trabalhos desenvolvidos em aspectos específicos e em elementos distintos do processo de

rendering

, tendo em conta recursos e tecnologias disponíveis no mercado, no sentido de aumentar a eficiência dos sistemas e minorar os tempos de cálculo. Estas abordagens versam a optimização da implementação do algoritmo de

rendering

no CPU, com a utilização de recursos massivamente paralelos ou adaptação da configuração do hardware em relação à tarefa a realizar. No fim deste ponto são referidas algumas soluções híbridas que utilizam mais do que uma das abordagens referidas.

Ainda dentro deste ponto e na perspectiva do

rendering

e dos projectos descritos, é apresentado o projecto onde foi desenvolvido algum do trabalho nesta tese, composto pelas várias facetas e vertentes: O projecto foi desenvolvido, incluindo aspectos desde do sistema de visão humano até ao paralelismo dos recursos utilizados no processo de

rendering

.

2.1 Rendering

Noção no sentido mais lato do termo,

rendering

é o processo de geração de uma imagem bidimensional, representativa da observação de um cenário do ponto de vista do olho humano ou de uma câmara, baseado na descrição contextual da informação sobre geometria, texturas, luzes e comportamento óptico dos elementos presentes no referido cenário (Kajiya 1986; Wald 2004; Benthin 2006). Alguns autores aplicam o termo de uma forma mais restritiva (Wald 2004), associando o

rendering

ao conjunto de algoritmos de

ray tracing

existentes. Neste sentido restrito, o

rendering

é equivalente ao termo

ray tracing

, deixando de fora

(29)

os processos de rasterização, os quais, por vezes, são considerados por estes autores como uma aproximação do que se pode obter com um algoritmo de

ray tracing

. Na presente tese o termo

rendering

é aplicado no sentido do domínio

ray tracing

, salvo indicação em contrário.

A evolução tecnológica dos sistemas informáticos em diversas vertentes providenciou às áreas científicas afins, isto é, as que utilizam sistemas computacionais, uma alargada capacidade de desenvolvimento, quer em termos de capacidade de cálculo (Wald 2004; Benthin 2006), quer em termos de dispositivos de aquisição de dados e apresentação ou representação de resultados. Esta evolução fez com que a qualidade apresentada, grandemente influenciada pela quantidade de cálculos efectuados e iterações pretendidas, se estendam para novos limites. Mesmo assim, em algumas soluções existentes, as suas respostas não se coadunam com as exigências actuais de qualidade, em termos de tempo ou de cálculos necessários para composição final da imagem ou as animações.

É cada vez maior a utilização da computação gráfica, nomeadamente dos algoritmos de

rendering

, em vários aspectos da vida social (CGSociety 2005; CGSociety 2008) como sejam a simulação (Plachetka 2001; ArchitectureWeek 2002; Kurenov 2006), cinema (Gutierrez 2004; Christensen 2006; Pixar 2008; Pixar 2008), jogos (Sung 2007; EA 2008) entre outros. A interacção requerida neste tipo aplicações veio colocar uma forte exigência na diminuição do tempo de cálculo, mais especificamente nos algoritmos baseados em modelos físicos do transporte da luz (Ward 1999). A inclusão de mais componentes ou refinamentos dos cálculos (Ward 1988; Ward 1992) na síntese de imagens e animações implica a utilização de recursos cada vez mais eficientes e poderosos em termos de poder de cálculo, mas também recorrendo à integração e utilização de múltiplos componentes e características dos modelos de iluminação em simultâneo.

É possível afirmar que duas abordagens foram seguidas no que respeita à geração da imagem a partir de algoritmos de

rendering

:

(30)

• A criação de ferramentas

off-line

para a síntese de imagens e animações de elevada qualidade, considerando que a qualidade deriva do número de aproximações e componentes utilizadas (Ward 1998);

• Aplicações interactivas que minimizam determinados aspectos ou reduzem a qualidade final, permitindo a interactividade pretendida (Parker 1999; Luebke 2001; Wald 2003; Günther 2004; Pomi and Slusallek 2004; Schmittler 2004).

O fosso que separa estas duas abordagens tem vindo a ser reduzido (Wald), sendo possível, hoje em dia, dotar as aplicações interactivas de um grau elevado de realismo (Wald 2004), recorrendo a componentes de hardware standard ou específico (Purcell; Wald 2005), à adaptação dos algoritmos de

rendering

a paradigmas específicos (Purcell 2004), ou através da optimização dos fluxos de dados e instruções no hardware subjacente (Wald).

Tradicionalmente, em aplicações interactivas, os algoritmos de rasterização para a produção de imagens e animações têm predominado sempre que a componente interactiva é importante, como seja o caso das plataformas para jogos. Esta situação é explicada pelo facto de os algoritmos de rasterização produzirem resultados num tempo adequado e com qualidade bastante aceitável para os fins pretendidos.

A evolução tecnológica permite hoje a utilização de algoritmos baseados na simulação do comportamento físico da luz, nomeadamente de algoritmos de

ray tracing

em alternativa aos tradicionais algoritmos de rasterização. Duas razões importantes explicam esta tendência:

• Nos algoritmos de rasterização é necessário recorrer a artifícios para contemplar aspectos tais como sombras, transições suaves entre sombras e objectos, ou inclusão da componente de iluminação global, enquanto nos algoritmos de

ray tracing

estas componentes são parte integrante na própria definição do algoritmo genérico;

(31)

• As dimensões das imagens produzidas têm vindo a aumentar, como resposta ao aumento das dimensões dos dispositivos de apresentação (

displays

) (Chen 2001) e à crescente procura de maior detalhe nos cenários reproduzidos. Acontece que os algoritmos de rasterização são caracterizados por uma progressão linear do tempo de síntese da imagem em relação às dimensões e ao detalhe das imagens, enquanto que os algoritmos de

ray tracing

se caracterizam por uma progressão logarítmica do tempo de síntese da imagem, em relação a complexidade geométrica e ao número de fontes de luz do modelo (Wald). Para além deste aspecto, é possível, no

ray tracing

, reutilizar diversos cálculos anteriormente efectuados quer nas componentes de iluminação directa e indirecta, quer na componente de iluminação global (Ward 1998), reduzindo ainda mais o tempo de síntese global.

2.1.1 Ray tracing

O processo de

ray tracing

(Kuchkuda 1988) para a produção de imagens sintetizadas em computador designa um conjunto de métodos (Wald). Estes métodos baseiam-se na projecção ou “lançamento” de vários raios com origem num ponto do espaço tridimensional. O objectivo é determinar as contribuições directas das fontes de luz para a iluminação no plano imagem do ponto de vista escolhido (raios primários), as contribuições indirectas provenientes de outros objectos através do processo de retransmissão da luz recebida (raios secundários) e da contribuição da iluminação global. A componente de iluminação global pode ser determinada através de algoritmos de amostragem do cenário e interpolação de valores intermédios em falta (Ward 1988), ou pela inclusão de fontes de luz virtuais que simulam esta contribuição (Cohen 1993).

O processo de cálculo das contribuições de cada fonte de luz para a iluminação de cada ponto do plano da imagem é realizado de uma forma mais eficiente pelo método denominado de

back tracing

. Os cálculos das contribuições

(32)

são efectuados começando no destino, o ponto de vista do observador ou do equipamento de visão, para as fontes de luz. Outras contribuições, indirectas, são calculadas de modo idêntico de uma forma recursiva, isto é, tomando como ponto de partida o ponto de intersecção do raio inicial com a superfície intersectada. Este processo é mais expedito do que o método de

forward tracing

em que é realizada a análise dos efeitos da emissão de todas as fontes de luz para todo o espaço 3D, incluindo os efeitos de retransmissão da luz nos objectos presentes no cenário. Neste caso são calculadas “todas” as imagens e não só a imagem visível do ponto de vista do observador. Este método é irrealizável no

ray tracing

, excepto no caso de se optar por muitas limitações, o que torna a imagem produzida de qualidade duvidosa 1.

Figura 1 – Equação de rendering (Kajiya 1986)

Todas as contribuições para a iluminação de um ponto anteriormente referidas são sumariadas na equação da Figura 1, apresentada por Kajiva (Kajiya 1986). A energia luminosa total que sai do ponto

x

na direcção

w

é igual a soma da energia emitida com o somatório das contribuições da energia recebida segundo o ângulo

w’

dentro do domínio de integração

. A energia retransmitida é uma parte da energia recebida, modelado pelo índice de reactância,

f

r, que por sua

vez é dependente do ângulo incidente, ângulo de saída e posição considerada. Esta componente é ainda influenciada pelo produto interno do vector incidente com normal à superfície

n

, no ponto

x

.

Como se pode depreender do processo exposto anteriormente, uma das operações básicas do método de

ray tracing

prende-se com a determinação da intersecção dos raios primários de luz com as superfícies dos objectos. Uma outra

1 Alguns algoritmos poderão utilizar parcialmente, para determinadas situações, o método forward

tracing, como seja o caso da técnica de mapeamento de fotões (photon mapping) Jensen, H. W. (2001). Realistic Image Synthesis Using Photon Mapping, AK Peters, Ltd..

(33)

operação semelhante consiste na determinação da intersecção dos

shadow rays

(Reinhard 1999) ou raios secundários com as superfícies dos objectos. Designam-se por

shadow rays

os raios “lançados” a partir dos pontos de intersecção dos raios iniciais com as superfícies do espaço 3D, no processo de

back traycing

. Estes raios só são efectivamente úteis se intersectarem um objecto ou um ponto de luz, situação na qual serão efectuados os respectivos cálculos.

2.1.2 Back traycing

O método de

back tracing

é utilizado nos algoritmos

ray tracing

, tendo o nome sido atribuído devido ao facto de funcionar no sentido inverso ao trajecto dos raios em relação ao fenómeno físico. Os cálculos de iluminação são efectuados partindo do ponto de vista de onde se pretende visualizar o cenário, até chegar às fontes de luz, passando pelos objectos iluminados directamente e indirectamente, bem como os raios provenientes directamente das fontes de luz ou alterados por outros objectos. Este método implica um menor número de cálculos relativamente a outras abordagens, pois uma grande parte dos raios “lançados” contribuem para a síntese da imagem pretendida (Ward 1998; Shirley 2003; Pharr 2004), do ponto de vista definido, nomeadamente os raios que intersectam os objectos ou pontos de luz.

Como se pode observar na Figura 2, são gerados raios com origem no ponto de vista que passam pelo plano da imagem a sintetizar. Por sua vez, a partir destes raios gera-se um conjunto de raios denominados de

shadow rays

. Sempre que seja encontrado (intersectado) um objecto do modelo, no ponto de intersecção mais próximo do ponto de vista do raio com o objecto, são “lançados” novos raios com origem no referido ponto de intersecção, de uma forma semelhante aos raios primários gerados a partir do ponto de vista. No caso de ser encontrada uma fonte de luz é então calculada a respectiva contribuição da componente de iluminação directa.

(34)

Se o raio projectado tem um ângulo oposto ao raio incidente em relação à normal da superfície no ponto de intersecção, essa componente é definida como componente especular, caso seja um raio com um ângulo diferente e intersecte uma fonte de luz, o valor calculado é definido como componente difusa.

Analisando a Figura 2 poder-se-á observar que o raio

r2

é um raio de componente especular, supondo que o seu ângulo é o oposto ao ângulo do raio incidente

r1

, em relação à normal no ponto de intersecção de

r1

com o objecto (fonte de luz) em forma de esfera

F1

. O raio

r6

, não oposto ao raio

r1

no ponto de intersecção, é uma contribuição de luz difusa de uma segunda fonte de luz

F2

.

F1 r3 r2 r1 r4 F2 r6

Figura 2 – Raios primários e secundários no back tracing

Os

shadow rays

são gerados de uma forma aleatória mas seguindo uma função de distribuição predefinida (Ward 1988; Shirley 2003; Pharr 2004). O objecto deve ser amostrado de uma forma correcta e expressiva para que as contribuições da iluminação no ponto de intersecção do raio resultem numa aproximação com o menor erro possível em relação ao valor real. Existem diversas abordagens e metodologias no que se refere à distribuição das direcções dos raios gerados (Shirley 2003), apresentando cada uma delas vantagens e desvantagens em aspectos como tempo do processo de

rendering

ou “qualidade” obtida nas diferentes componentes de iluminação, nomeadamente nas componentes de iluminação directa e indirecta (Shirley 2003).

(35)

O processo de

back tracing

é repetido de uma forma recursiva, com os

shadow rays

tomando o lugar dos raios primários e produzindo mais

shadow rays

, caso seja encontrado um objecto. Cada vez que este processo é repetido é incrementado o valor do “

bounce

” do raio. Este valor de “

bounce

”, na realidade um valor máximo predefinido para este, é utilizado como parâmetro para quebrar o algoritmo recursivo.

Um valor mais elevado para o número máximo de

bounces

, implica uma maior aproximação dos valores calculados em relação aos valores expectáveis para a representação da síntese de imagem obtida. No entanto, o poder de cálculo necessário aumenta de uma forma exponencial em relação ao valor máximo de

bounces

predefinido, no caso de não se utilizar optimizações ao nível algorítmico (Ward 1999).

Após ser atingido o número máximo de

bounces

ou se encontrar uma fonte de luz o processo recursivo é finalizado, devolvendo ao nível de interacção anterior o cálculo da iluminação directa, no caso de ser uma fonte de luz, ou iluminação indirecta já calculada no caso de um objecto que retransmite luz recebida. No final vão ser consideradas todas as contribuições de todas as componentes da iluminação para cada

pixel

do plano imagem definido.

É de salientar que na realidade não é projectado apenas um raio por

pixel

do plano imagem definido para um ponto de vista, mas sim vários e com distribuições distintas no plano constituído pela área do

pixel

em questão, de forma a evitar efeitos de

aliasing

(Ward 1998; Shirley 2003; Pharr 2004). Dentro deste aspecto, número de raios por

pixel

, são ainda englobados os tópicos de sob-amostragem e sub-amostragem, como forma de melhorar a qualidade visual de um determinado pormenor ou evitar demasiados cálculos num local de pouca importância em relação à tarefa para a qual a imagem é produzida (Cater 2003).

O número de raios utilizados por

pixel

pode variar dinamicamente, no sentido em que este valor pode depender dos dados independentes descritivos do cenário ou da progressão dos valores calculados no decorrer da execução do processo de

(36)

rendering

. Esta abordagem poderá ser intitulada de amostragem variável ou

dynamic sampling

2.

2.1.3 Operações básicas no rendering

No essencial o processo de

rendering

de um modelo é composto por duas operações elementares:

• Cálculo dos pontos de intersecção de cada raio, raio de luz ou outro raio, por exemplo um

shadow ray

, com os objectos;

• Cálculo da iluminação para cada um dos referidos pontos, devida a luz directa ou indirecta das fontes de luz, e iluminação global caso seja considerada, tendo em conta o tipo de material e o seu comportamento fotométrico.

Todos os outros tipos de operação existem para coadjuvar estas duas primitivas essenciais, como o seja o atravessamento da estrutura de dados representativa da geometria do modelo do cenário ou pré-processamento para agilizar e minimizar os cálculos efectuados no processo de

rendering

ou o cálculo da normal num ponto de uma superfície.

O algoritmo de

ray tracing

, no seu essencial, procura saber quais os raios relevantes que passam pelo plano imagem, e seus derivados, que intersectam objectos do modelo, calculando de seguida as contribuições dos outros objectos e de fontes de luz para o valor da iluminação do ponto na superfície do objecto tento em conta o ponto de vista e características do material.

A partir do processo global anteriormente descrito é possível aduzir algumas características do referido algoritmo que podem e foram aproveitadas para melhorar a sua eficácia:

2 Este conceito é distinto da sob-amostragem variável e a sub-amostragem variável de forma

(37)

• O cálculo da intersecção de um raio é independente de outro qualquer raio, o que torna o algoritmo facilmente paralelizável (Chalmers 2002);

• O cálculo da contribuição de uma fonte de luz num ponto de uma superfície é independente das outras fontes de luz, dado que o valor final é igual à soma algébrica de todas as contribuições (sistema linear). Novamente será possível paralelizar o cálculo das componentes. Ainda dentro deste aspecto, como o sistema é linear, a ordem de cálculo das componentes é irrelevante (comutatividade da soma), o que facilita a distribuição de carga computacional por diversos elementos;

• Como um raio pode gerar um novo conjunto de raios para refinamento do valor calculado, o algoritmo é recursivo. Por este motivo, para além da simplicidade das operações básicas, é fácil de implementar o algoritmo de base numa grande variedade de equipamentos computacionais;

Uma abordagem mais profunda destes temas e uma indicação da terminologia sobre computação paralela, mais especificamente aplicada à computação gráfica, é referida no ponto 2.3.

2.1.4 Intersecções

O cálculo das intersecções no processo de

ray tracing

é baseado na fórmula

R(t) = O + tD

(Shirley 2003), em que

R(t)

denomina o trajecto do raio no espaço tridimensional,

O

o ponto de origem do raio, quando

t

toma o valor zero e

D

o vector da direcção do raio. O valor escalar das componentes do vector

D

não são fundamentais, pois apenas são utilizados para determinar o valor de

t

, tal que

R(t)

seja um ponto de intersecção do raio numa superfície de um objecto do espaço 3D. O intervalo de valores da variável

t

situa-se entre 0, origem, e um valor

t

max. O

valor

t

max é definido como um valor para o qual o raio está fora da zona definida

no modelo do cenário. Na realidade não são testados todos os valores de

t

no intervalo definido, o que é impossível pois

t

, segundo a definição, é um valor contínuo. Na realidade são calculados os valores de

t

que são solução do sistema

(38)

de equações composto pela descrição geométrica da superfície ou superfícies de um objecto e a equação da recta que representa o raio que se pretende testar na direcção e sentido definidos.

Duas observações devem ser consideradas em relação ao método descrito. No algoritmo de

ray tracing

os raios podem ter a sua origem na superfície de um objecto, como seja o caso dos raios denominados de secundários, já referidos anteriormente. Para evitar o fenómeno de auto oclusão (Shirley 2003; Wald 2004), e dado que numa implementação prática os valores numéricos são discretos, o intervalo para

t

é definido como sendo um valor entre um mínimo definido no sistema, denominado de

ε

, e

t

max. A segunda observação prende-se com os valores

negativos de

t

. Neste caso, o raio representado é o mesmo, apenas no sentido oposto àquele que pretendemos testar. Desta forma, apenas os valores de

t

dentro do intervalo [

ε

,

t

max] são considerados válidos na solução do sistema de equações

descrito anteriormente, e caso existam isso significa que existe intersecção do raio pretendido com a superfície do objecto testado. No caso de se obter múltiplas soluções de

t

dentro do intervalo definido, é considerada como solução correcta aquela que apresenta o valor mas baixo de

t

, pois esse valor representa a primeira intersecção do raio com o objecto, mais propriamente com a superfície do objecto.

Em implementações práticas deste tipo de algoritmo o conjunto de superfícies utilizado, relativamente às equações representativas das referidas superfícies, é limitado. É utilizada uma aproximação de todos os objectos através de um conjunto de um só tipo de superfície, como seja os casos de Wald et al. (Wald) e das placas gráficas (polígonos) (Buck 2004; Wald 2005), até a um leque mais diversificado de superfícies como seja o caso do software Radiance (Ward 1998). Sendo os objectos representados pela junção de uma ou mais formas 3D ou limitados por superfícies 2D no espaço 3D, o teste de intersecção de um raio com um objecto é efectuado nas formas ou superfícies que representam o objecto.

(39)

2.1.5 Geometria

A geometria, descrição da forma física dos objectos, e a sua representação ao nível computacional tem uma grande influência na qualidade da síntese de imagem obtida e na quantidade de cálculos necessária para se obter a referida imagem.

A geometria definida para um objecto é uma aproximação da representação física, exemplo na Figura 3, excepto no caso de objectos com representação perfeita na geometria do sistema utilizado, como é por exemplo uma esfera perfeita que é representada correctamente em plataformas ou sistemas de

rendering

que suportam a representação matemática de uma esfera, como seja o caso do pacote de software Radiance (Ward 1998). Não são considerados como erros de representação as aproximações e limitações no cálculo devidos à representação discreta e à quantificação de números reais em sistema computacionais.

Figura 3 – Uma aproximação geométrica de uma esfera através de polígonos

Algumas plataformas utilizam formas básicas limitadas a apenas um só elemento de representação de base, ver Figura 3, como seja o caso do subsistema gráfico utilizado na plataforma PC, nomeadamente nas placas gráficas. Nesta plataforma são utilizados polígonos bidimensionais, quase sempre triângulos por questões de optimização e aceleração do cálculo, para representar a geometria dos objectos presentes num cenário. Este tipo de abordagem deve-se essencialmente

(40)

da baixa programabilidade do hardware subjacente ao nível das estruturas mais complexas e na redução substancial da implementação dos algoritmos, código, equações para múltiplas formas de base. Este tipo de abordagem usa essencialmente dados simples, pontos representados por matrizes de valores reais e apresenta um pequeno

footprint

(quantidade de instruções) na implementação dos algoritmos definidos. Isso não significa que o hardware actual não seja capaz de contornar estas limitações (Buck 2004). No entanto, o desenvolvimento e evolução do referido hardware tem em conta a compatibilidade com os sistemas/versões anteriores.

Outro aspecto importante na descrição da geometria está relacionado com a representação do modelo e organização das formas de base dos objectos no espaço tridimensional. É possível utilizar representações auxiliares para acelerar, no sentido de minimizar, o tempo total de cálculo das intersecções dos raios com as superfícies dos objectos. Talvez a melhor abordagem para elucidar a utilização de formas auxiliares será a utilização de um exemplo. Consideremos um objecto com múltiplas formas de base, como seja o caso de uma árvore. Em vez de testar se um raio intersecta cada uma das superfícies que compõem o objecto, é possível envolver, limitar, o espaço 3D do objecto por uma única forma básica, uma primeira aproximação mais rude da geometria. Essa forma pode ser um paralelepípedo (6 rectângulos 2D) que envolve todas as superfícies da árvore. No caso de um raio não intersectar o paralelepípedo envolvente, é garantido que não intersecta qualquer um dos polígonos que representam a geometria da árvore, reduzindo significativamente o número de cálculos necessários (Shirley 2003).

Estas estruturas auxiliares podem ser aplicadas à divisão do espaço 3D, em vez de envolver objectos individuais (Shirley 2003; Pharr 2004). Neste caso, as estruturas auxiliares limitam diversos objectos, ou partes de objectos se todo o modelo for transformado nas suas formas básicas, como seja o caso de polígonos. Neste tipo de abordagem, divisão do espaço 3D, temos como exemplos a utilização de

octrees

(Ward 1998) e

btrees

(Pharr 2004), que são descritas mais detalhadamente no ponto 2.1.7.

(41)

2.1.6 Estruturas de representação em ray tracing

Existe um conjunto de representações elementares que devem ser consideradas no desenvolvimento de um

ray tracer

. De seguida são indicadas quais e em que situações estas representações são utilizadas:

• Escalar – Valor elementar a partir do qual são definidos todos ou quase todos os outros elementos ou estruturas de representação dentro do sistema desenvolvido. É possível optar por um valor do tipo inteiro de forma a maximizar a rapidez de cálculo em detrimento da precisão dos cálculos e consequente aumento do erro de aproximação. Também se optar-se pela representação dos valores pela representação do tipo real em vírgula flutuante (IEEE 1985), tendo esta última representação uma maior precisão mas consequente aumento no tempo de cálculo para o mesmo conjunto de dados. Sempre que a qualidade da imagem sintetizada, entenda-se aproximação mais correcta aos valores esperados, é um factor preponderante, a utilização de representações numéricas de maior precisão é importante. No caso de se pretender minimizar o tempo de cálculo, a escolha da representação através de valores inteiros é favorecida. Devido ao desenvolvimento da micro-electrónica e processadores ou arquitecturas dedicadas ao cálculo de valores reais (

float

) e matrizes de reais (IntelCorporation 2006), o fosso diferencial em termos de tempo de cálculo entre as duas abordagens tem vindo a diminuir. Também o tipo de plataforma onde se pretende implementar o

ray tracer

e o suporte para um determinado tipo de representação pode condicionar a escolha (Tisnovsky 2002);

• Ponto – É um elemento definido por três escalares que representam as coordenadas de um ponto no espaço 3D. Em algumas implementações (Tisnovsky 2002), o tipo de representação utilizada não é a mesma para os diferentes tipo de estruturas ou cálculos, dentro do mesmo tipo de característica representada. A titulo de exemplo em determinadas

(42)

implementações os pontos são representados por valores inteiros, sendo os cálculos efectuados na representação de vírgula flutuante (Zemcik 2003), ou utilizados factores escalares do tipo real (

float

), onde é efectuada a conversão dos dados e termos para valores inteiros, efectuando-se o cálculo utilizando aritmética inteira (Zemcik 2003);

• Vector – É definido por um coeficiente escalar para cada dimensão em coordenadas cartesianas ou dois ângulos e a norma do vector em coordenadas esféricas, no caso 3D (Pharr 2004). Na representação em coordenadas esféricas os ângulos são definidos em relação a dois dos três planos

XY

,

YZ

e

XZ

. São considerados vectores sem ponto de aplicação. Os vectores são utilizados na maioria dos casos para indicar a direcção e sentido de um raio, sendo a norma relevante quando se pretende calcular em que local um raio intersecta uma superfície (Shirley 2003);

• Raio – Essencialmente composto por um ponto de origem, um valor escalar que representa a progressão temporal e um vector que indica a direcção e sentido de progressão do raio, sendo a sua norma normalmente normalizada (valor unitário);

• Superfície – É representada por uma equação ou conjunto de equações representativas da superfície no espaço 3D. Estas equações matemáticas são codificadas no sistema, na linguagem de implementação do mesmo, sendo apenas necessário guardar os coeficientes representativos da equação ou equações. A titulo de exemplo, uma esfera é representada pela equação

(x − x

0

)

2

+ (y − y

0

)

2

+ (z − z

0

)

2

= r

2, em que os coeficientes

escalares representativos são

x

0,

y

0, e

z

0, o centro (ponto), e

r

0 o raio da

esfera. Desta forma, cada tipo de superfície é implementada através da codificação intrínseca das expressões de cálculo da intersecção de um raio e cálculo da normal num ponto da superfície;

• Polígono/triângulo – Este tipo de superfície, com expressão bidimensional, é das mais utilizadas no

rendering

pois em muitas ocasiões é a única

(43)

superfície com representação directa no sistema, entenda-se implementada directamente em código no sistema. Embora seja uma porção de um plano, é representada utilizando um conjunto de três ou mais pontos co-planares, denominados de vértices, em que os segmentos de recta entre os vértices definem os limites do segmento do plano pertencente ao objecto. É considerado como pertencente à superfície do objecto o segmento interior do plano definido pelos vértices e limitado pelas rectas. No caso de conter mais do que três vértices é obrigatório considerar a ordem dos vértices, de forma a claramente indicar as rectas que definem os limites da superfície a considerar. As rectas são consideradas entre dois vértices consecutivos e entre o último e o primeiro;

• Malha ou

Mesh

– É uma forma complexa composta por múltiplos polígonos adjacentes, usualmente triângulos, em que vários dos vértices são partilhados por polígonos adjacentes. Por uma questão de optimização, a malha é representada por conjunto ordenado de pontos (vértices) únicos e uma lista de sequências de índices (número inteiro) indicativos dos vértices pertencentes a cada polígono. A Figura 4 apresenta a geometria de um golfinho forma por uma

mesh

de triângulos;

Figura 4 – Geometria de um golfinho representada por um conjunto de polígonos [Img01]

• Representação da cor – A grande maioria dos sistemas de

ray tracing

, utilizam o modelo RGB (

Red, Green and Blue

) (Hauta-Kasari 1988;

(44)

EastmanKodakCompany 1999), em que é utilizado um valor escalar para a quantificação das componentes Vermelha, Verde e Azul, Os escalares pode ser representados por um valor real em formato de vírgula flutuante ou inteiro (Schwarz 1987). A cor pode ainda ser representada por uma sequência de bits, conjunção da representação da parte inteira das respectivas componentes (Gonzalez 2006);

• Propriedades dos materiais – Cada material deve especificar o seu comportamento em relação à luz para cada componente de iluminação. Se o modelo de cor utilizado é o RGB, então cada componente de iluminação tem um conjunto de factores escalares, um para cada cor primária. O ponto 2.1.8 fornece mais informação sobre as componentes de iluminação utilizadas no

ray tracing

;

Pixel

– Elemento do domínio da imagem representado por uma cor, mais propriamente pelo valor de uma cor (Gonzalez 2006);

• Plano imagem – É representado por uma matriz bidimensional de

pixeis

e utilizado para armazenar o resultado da síntese. Também deve conter informação sobre a sua localização no espaço 3D aquando da síntese da imagem;

• Ponto de vista – No essencial este elemento é composto por um ponto e uma direcção/sentido. Também pode ter associado um plano imagem perpendicular à direcção do ponto de vista e respectiva distância do plano imagem ao ponto de vista. Pode-se considerar que este é o modelo mais simples de uma câmara;

• Câmara – Este elemento pode conter um conjunto de características diversas tornando-o em algumas situações bastante complexo. Pode incluir e modelar o plano imagem, ponto de focagem, lentes, obturação. Todos os elementos de base são do tipo escalar, ou compostos por estruturas mais complexas com escalares como campos (Shirley 2003).

(45)

As representações aqui apresentadas apenas são indicativas de elementos genéricos e fundamentais na implementação de um sistema de

ray tracing

. Foram omitidas estruturas e características de sistemas ou implementações específicos, como seja o caso de sistemas que entram em consideração com o comprimento de onda da luz (luz espectral) (Peercy 1995) ou polarização da luz (Tannenbaum 1994). Normalmente são situações de refinamento do algoritmo de base ou representação distinta da luz. Também não foram referidas as estruturas não directamente relacionadas com a representação dos elementos fundamentais, como seja o caso das estruturas de aceleração referidas no ponto seguinte.

2.1.7 Formas de aceleração dos cálculos

Como foi referido no ponto 2.1.5, é possível reduzir o número de cálculos totais recorrendo a estruturas auxiliares que subdividem o espaço 3D ou utilizando formas mais simples, uma primeira aproximação, que envolvem os objectos. Quer na subdivisão do espaço, quer na utilização de formas que envolvem todo o objecto, se a estrutura ou forma envolvente não é atravessada por um raio, então nenhum dos objectos interiores é atravessado pelo referido raio. Este processo evita que sejam efectuados cálculos de intersecção desnecessários, reduzindo de uma forma considerável os cálculos (Ward 1998; Shirley 2003; Pharr 2004).

A razão entre o número de objectos ou superfícies contidas num elemento da estrutura auxiliar e o número de operações de atravessamento/teste de intersecção da estrutura auxiliar deve ser elevada, mas também limitada, por forma a utilizar esta técnica de uma forma recursiva e reduzir o número de testes de intersecção efectuados. Uma razão baixa entre os elementos envolvidos e a representação do espaço envolvente, não é benéfico.

A título de exemplo, se a forma envolvente contém apenas duas formas básicas, será efectuado sempre o cálculo da intersecção com a forma envolvente e, caso o teste seja positivo, serão efectuados os testes com cada uma das duas formas envolvidas, num total de três cálculos. No caso do teste ser negativo

(46)

apenas será efectuado um cálculo. Fazendo uma análise estatística grosseira, atribuindo 50% de probabilidade a cada caso, o teste de intersecção positivo terá que efectuar um cálculo suplementar, dois para formas envolvidas e um para forma envolvente, no caso negativo reduz-se a um cálculo, um para a forma envolvente. O ganho de menos um cálculo obtido em 50% dos casos é anulado pelo cálculo supérfluo dos outros 50% dos casos.

O raciocínio anterior pode ser aplicado à subdivisão do espaço 3D. Em determinados pacotes de software, como seja o caso do Radiance (Ward 1998), é possível predefinir, como parâmetro, o número máximo de formas primitivas contidas em cada subdivisão. Caso a subdivisão contenha mais objectos que o número máximo definido, são criados novos sub espaços conforme o algoritmo definido. Este tipo de abordagem produz uma estrutura de dados em árvore (Pharr 2004), em que o número de ramos por nó depende do algoritmo escolhido para a subdivisão. Por exemplo, a subdivisão do espaço em

octree

(Ward 1998) divide o paralelepípedo do espaço 3D do modelo definido segundo as três dimensões/eixos, criando 8 sub espaços por cada espaço considerado. A decisão sobre o local onde deve ser efectuada a divisão do espaço e em que eixos deve ser o espaço dividido pode ser realizada de uma forma estática, por exemplo dividindo em dois sub espaços iguais segundo todos eixos. Numa abordagem dinâmica, a divisão depende do número de objectos e das posições que estes ocupam no sub espaço (Chalmers 2002; Shirley 2003). Também é possível que um objecto pertença a mais do que um sub espaço ou existir uma sobreposição entre os sub espaços, tudo depende o algoritmo de subdivisão utilizado (Shirley 2003).

Deve-se ter em atenção que todo este processo requer um pré-processamento que implica um atraso temporal em relação ao início propriamente dito do processo de

ray tracing

que produz os resultados pretendidos. Se a opção de dividir o espaço 3D for definida através de um algoritmo de divisão dinâmico, com maior complexidade, em vez de valores ou regras fixas, esta pode acarretar a necessidade de um maior poder de cálculo e consequente maior atraso, mais tempo, na fase de pré-processamento. A

(47)

quantificação da razão entre o ganho obtido na fase de

ray tracing

em contraste com o

overhead

devido ao pré-processamento não tem uma fórmula matemática simples para ser estimada dada a quantidade de parâmetros e algoritmos possíveis, mas também é muito dependente do modelo geométrico de cada cenário que se pretende sintetizar 3.

2.1.8 Iluminação de um ponto

A outra operação elementar do

ray tracing

é o calculo da iluminação. A iluminação de um ponto é composta pelo cálculo e soma de todas as contribuições da luz directa, indirecta e, caso seja considerada, da componente de iluminação global. O cálculo de cada uma das componentes é realizado do seguinte modo:

• Iluminação directa especular – Partindo do raio incidente, na perspectiva do

back tracing

, e do ponto da superfície onde esta foi intersectada pelo raio, é calculada a normal à superfície no referido ponto. Caso exista uma fonte de luz na direcção do ângulo oposto ao do raio incidente segundo a normal, consultar Figura 5, é determinada a quantidade de luz que essa fonte de luz envia na direcção definida e com base nas propriedades reflectoras e de retransmissão do material da superfície, é calculado o valor da componente especular de iluminação. Caso a superfície contenha uma componente de difracção é necessário calcular onde o raio difractado sai da superfície para calcular se existe uma fonte de luz nessa direcção, e se existe então é calculada a sua contribuição com base nas propriedades refractárias do material. Por vezes, como forma de simplificar o processo, a propriedade de transparência de um material não tem em conta o efeito da diminuição ou aumento da velocidade da luz e respectivo desvio do raio em relação à direcção da normal, no caso da passagem entre materiais com diferentes

3 As formas geométricas aqui indicadas são na verdade estruturas computacionais. Não foram

referidas no ponto 2.1.6, pois são considerados artifícios computacionais para melhorar a eficiência, redução de tempo, dos algoritmos de ray tracing e não estruturas que representam qualquer tipo

(48)

densidades. Nesta simplificação o raio incidente e o raio refractado pertencem à mesma recta;

r2

n

r1

Figura 5 – Raio oposto à normal num ponto

Figura 6 – BSDF [Img02]

• Iluminação directa difusa – utilizando o mesmo processo da componente especular, são calculadas as contribuições das fontes de luz agora não no ângulo oposto ao raio incidente em relação à normal, mas sim do ângulo entre a normal e o raio que intersecta uma fonte de luz. Para saber qual o efeito dessa fonte de luz no ponto pode ser utilizada uma função de distribuição de reflectância bidireccional (BRDF -

Bidirectional Reflectance

Distribution Function

) (Kajiya 1986; Shirley 2003; Pharr 2004), uma das

Referências

Documentos relacionados

Instituto de Ensino Superior e Pesquisa Campus da UEMG – Universidade do Estado de Minas Gerais , no município de Divinópolis; objetivando identificar o perfil

2 - OBJETIVOS O objetivo geral deste trabalho é avaliar o tratamento biológico anaeróbio de substrato sintético contendo feno!, sob condições mesofilicas, em um Reator

CARACTERÍSTICAS DE SEGURANÇA - Cinto de segurança para recém nascido, alarme de alta temperatura limitado em 40ºC, Alarme de tensão de baterias, Temperatura da superfície

nesta nossa modesta obra O sonho e os sonhos analisa- mos o sono e sua importância para o corpo e sobretudo para a alma que, nas horas de repouso da matéria, liberta-se parcialmente

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

No entanto, maiores lucros com publicidade e um crescimento no uso da plataforma em smartphones e tablets não serão suficientes para o mercado se a maior rede social do mundo

17 CORTE IDH. Caso Castañeda Gutman vs.. restrição ao lançamento de uma candidatura a cargo político pode demandar o enfrentamento de temas de ordem histórica, social e política

Finalizando, destaca-se que a relação entre a busca por poder e prestígio e o comportamento de compra compulsiva não foi validada estatisticamente neste estudo, não sendo