• Nenhum resultado encontrado

2.4 Abordagens específicas

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

Ao nível do CPU foram obtidos resultados que demonstram um significativo aumento da eficiência, menores tempos de

rendening

, mantendo os pipelines do CPU e unidades funcionais na máxima das capacidades. Esta “quase sempre máxima capacidade” é conseguida através da alteração da ordem sequêncial do algoritmo de

rendering

e adaptação das estruturas de dados utilizadas. Exemplos deste tipo de optimizações são o cuidado de alinhar a estrutura de dados à dimensão das linhas de

cache

do CPU e à utilização de paralelismo ao nível das instruções (Wald 2001; Wald 2003). Os mais recentes processadores incluem no seu

instruction set

instruções do tipo SIMD, como seja o caso das instruções SEE presentes nos processadores Pentium™ da Intel© e 3Dnow™ da AMD©.

Wald et al. (Wald 2003) implementou um

ray tracer

optimizado para arquitectura Pentium™, essencialmente ao nível da representação dos dados em estruturas mais simples e a utilização de instruções do tipo SIMD. A coerência de raios foi utilizada para compactar quatro intersecções com um triângulo, num mapeamento directo da pipeline do processador, tirando partido das instruções SEE (SIMD) presentes na arquitectura. Num nível hierárquico mais alto as estruturas de aceleração utilizadas foram adaptadas à configuração do 1º e 2º nível de

cache

do processador no que respeita ao alinhamento das linhas de

cache

e aos dados dos nós das estruturas de aceleração. O tempo de acesso de um nível de

cache

é sensivelmente na ordem de uma magnitude inferior para o próximo nível de memória (Wald 2003). Na componente de iluminação dos pontos da

imagem foi utilizada uma abordagem semelhante no que respeita ao teste de intersecção, no entanto devido à reorganização dos dados o ganho de eficiência não foi significativo na mesma ordem de grandeza.

O ganho de eficiência combinado do

ray tracer

implementado, comparando-o com os pacotes de software Rayshade (Rayshade 2008) and POV-ray (Pov-ray 2008), foi na ordem de uma ordem de magnitude. Comparando os resultados de uma rasterização com o

ray tracer

implementado, verificou-se que o

ray tracer

é mais eficiente em cenários com um número elevado de polígonos de representação, nomeadamente acima de um milhão de polígonos. Esta situação deve-se principalmente à natureza de crescimento logarítmico e linear na quantidade de cálculos relativamente ao número de polígonos de uma cena, no

ray tracing

e na rasterização respectivamente (Wald 2003).

Ainda segundo Wald (Wald 2004), um dos objectivos mais ambicionados na comunidade da computação gráfica é a geração de realismo em tempo real, isto é, sintetizar imagens com um aspecto realista com ferramentas dentro da definição de tempo real. Actualmente, virtualmente todas as abordagens no sentido do tempo real utilizam hardware específico, essencialmente baseado na abordagem da rasterização de triângulos. Infelizmente, embora esta tenha apresentado uma tremenda evolução nos últimos anos, para muitas aplicações. Esta tecnologia já chegou aos limites em termos de complexidade do cenário, efeitos suportados e realismo atingível.

Uma alternativa a rasterização de triângulos é o algoritmo de

ray tracing

, que é bem conhecido pela sua melhor escalabilidade, quer em termos da dimensão do modelo do cenário, quer no poder de cálculo requerido. No entanto, o

ray tracing

também é exigente em termos de cálculo computacional e por esse motivo é utilizado principalmente no

rendering

de elevada fidelidade em sistemas

off-line

. A tese de Wald (Wald 2004) foca a sua atenção na questão sobre se o

raytracing

terá brevemente um maior papel em aplicações interactivas e como este objecto é atingido. Para esse fim, é discutido o sistema em tempo real de

ray tracing

RTRT/OpenRT (Dietrich 2003; Wald 2003; Pomi and Slusallek 2004; Wald 2004; Wald 2005; Wald 2005), um software baseado num

ray tracer

em tempo real que permite obter

framerates

a taxas interactivas, em sistemas baseados nos CPU actuais. Em particular, é discutido o desenho global do sistema, a eficiência da implementação dos algoritmos fundamentais de

ray tracing

, técnicas para manusear de forma eficiente os modelos de cenários dinâmicos, uma eficiente paralelização da plataforma, e uma API de baixo nível semelhante ao OpenGL.

No seu conjunto, todas estas técnicas produzem um mecanismo completo de

rendering

em tempo real que suporta cenários bastante complexos, de elevada fiabilidade e de iluminação correcta, para além da simulação correcta do comportamento da luz, com taxas interactivas. Na parte final da sua tese são discutidas as implicações e o potencial de um sistema de

ray tracing

em tempo real com iluminação global e como a disponibilização desta tecnologia pode proporcionar o objecto enunciado: obter iluminação global de uma forma interactiva – a simulação correcta do comportamento da luz a taxas interactivas.

No que respeita às plataformas específicas Benthin et al. (Benthin 2006) refere que nas últimas três décadas o aumento performance no CPU foi obtida essencialmente através do aumento da frequência de relógio. Este aumento na frequência de relógio veio aumentar o consumo de energia e respectiva dissipação de calor, que de certa forma limita a continução deste tipo de abordagem, fazendo como que os responsáveis pelo design dos de CPU enveredar por outros caminhos alternativos para providenciar mais poder de cálculo. Em particular abordam três vias: o modelo computacional de

streaming

, unidades com instruções do tipo SIMD aplicadas a elementos semelhantes a vectores, e arquitecturas

multicore

.

Um exemplo particular deste tipo de arquitectura multicore é o

Cell

Broadband Engine Architecture

(CBEA), que oferece um poder de cálculo na ordem dos 200 GFlops num circuito integrado a funcionar a velocidade de relógio de 3,2 GHz. O Cell Processor oferece um elevado potencial para aplicações de cálculo intensivo como seja o caso do

ray tracing

, mas também apresenta novos desafios

devido a sua arquitectura não convencional. Benthin et al. descreve a implementação de

ray tracer

em tempo real (Benthin 2006) no Cell Processor (Hofstee 2005; Williams 2006), utilizando uma combinação de rotinas nucleares optimizadas de baixo nível, um modelo de

streaming

,

cache

explicito e uma abordagem em software em para emular virtualmente o Hyper-Threading™ (IntelCorporation 2003), minimizando os efeitos de latência do acesso via DMA, foi possível atingir uma performance superior de uma ordem de magnitude em relação a uma implementação num CPU standard.

Schmittler et al. (Schmittler 2002) refer que o algoritmo de

ray tracing

é bem conhecido pela sua habilidade de gerar imagens de alta qualidade e a sua flexibilidade para incorporar efeitos de iluminação avançados. O

ray tracing

interactivo foi amplamente demonstrado em

clusters

de computadores e super computadores, mas em hardware que suporta directamente o

ray tracing

é difícil de implementar.

Os autores apresentam uma nova arquitectura para o

ray tracing

em tempo real, escalável, modular e bastante eficiente. Esta arquitectura atinge uma elevada eficiência com baixos requisitos de largura de banda em termos de memória, juntando os raios de uma forma eficiente.

A arquitectura é facilmente configurável para suportar uma variedade de cargas. Para modelos de cenários do género OpenGL ela oferece uma performance semelhante às soluções mais avançadas no domínio da rasterização. A arquitectura também suporta todas as características do

ray tracing

, incluído sombras exactas, reflexões e refracções, bem como é capaz de processar modelos como milhões de triângulos. A arquitectura e a sua eficiência foi analisada em diferentes configurações, baseado em simulações precisas e cíclicas.

Outra arquitectura para o

ray tracing

de plataforma é apresentada por Dietrich et al. (Dietrich 2003), o OpenRT. Segundo os autores há mais de uma década, grafismos interactivos foram modelados através de triângulos e sua respectiva rasterização, correspondente à API do OpenGL (SGI 2008). Segundo

Dietrich et al., o

ray tracing

interactivo tem vindo a apresentar-se como uma realidade disponível em diferentes tipos de plataformas, devido a sua superior escalabilidade, usabilidade e eficiência, é francamente provável que o

ray tracing

se apresente como uma alternativa viável no mundo das aplicações de gráficos por computador. Sendo desejável que este tipo de tecnologia suporte num padrão com a sua bem conhecida API, como a quase standard interface OpenGL, será difícil e complicado implementar uma interface semelhante, pois o standard OpenGL está fortemente associado como o processo de rasterização, tornando-o pouco adequado para o

ray tracing

.

É proposto uma nova API, designada de OpenRT. Esta nova API foi desenhada para ser similar ao OpenGL quanto possível, enfatizando no entanto nas características do

ray tracing

interactivo.

Sendo do mesmo nível de simplicidade de utilização e aprendizagem do OpenGL, o OpenRT oferece todas as vantagens do

ray tracing

, como a visibilidade implícita, instanciação, a liberdade de lançar raios arbitrários e programar o modelo de iluminação.

Numa versão mais prática Wald et al. (Wald 2003) propõe uma implementação de um

ray tracer

numa rede de computadores homogéneos. Devido ao seu significativo e elevado nível de paralelismo, o

ray tracing

sempre foi uma plataforma atractiva para investigadores na área do processamento paralelo. Com os recentes avanços no domínio do software e do hardware, é agora possível criar imagens sintetizadas de elevada qualidade a taxas interactivas em

clusters

de PCs. Wald et al. apresenta o estado da arte do

ray tracing

distribuído e interactivo baseado na descrição de aspectos distribuídos do OpenRT (Dietrich 2003), um modelo para um motor de

rendering

interactivo. É demonstrado a sua escalabilidade, e são apresentados vários exemplos de aplicação.

Informações sobre os aspectos anteriormente referidos e outros podem ser encontrados no STAR – State of The Art Report de Wald et al. (Wald 2003) na conferência da

Euruographics 2003

.