• Nenhum resultado encontrado

6.3 Segundo Estágio da Renderização dos pelos

6.3.1 Mapeamento de Ambiente

Os pelos que serão aplicados sobre as camadas da malha, os quais foram gerados proce- duralmente na Seção 5, assim como o mapa de coloração dos pelos, estão armazenados

Figura 6.2. Segundo estágio da renderização dos pelos. Mapeamento dos mapas de pelos e coloração de pelos sobre a malha e iluminação para cada ponto da malha.

na forma de mapas de ambiente. Os mapas de ambiente podem estar no formato de cubo, ou no formato de esfera, sendo que em ambos os casos o mapa de ambiente é acessado através de um vetor tridimensional. Como o propósito do mapa de ambiente é armazenar contribuições do ambiente ao redor de um objeto, o vetor tridimensional utilizado para acessar o mapa de ambiente representa a direção na cena tridimensio- nal em que o mapa deve ser amostrado. Note que em algumas bibiotecas gráficas os mapas de ambiente são acessados diretamente através das coordenadas de um vetor tridimensional, enquanto em outras bibliotecas gráficas pode ser necessário converter as coordenadas do vetor tridimensional para coordenadas reais de acesso ao mapa (as quais variam de acordo com a forma de armazenamento do mapa). A Seção 6.3.1.1 mostra como o vetor tridimensional de acesso ao mapa de ambiente é transformado para coordenadas reais de acesso aos mapas no formato de cubo e esfera, e a Seção 6.3.1.2 mostra como o vetor tridimensional de acesso (ou endereçamento) dos mapas de ambiente é calculado.

6.3.1.1 Amostragem dos Mapas de Cubo e Esfera

A partir do vetor tridimensional utilizado para amostrar o mapa de ambiente pode ser necessário gerar a coordenada real de acesso aos dados dos mapas de cubo e esfera, a qual é dependente da forma como os mapas são armazenados. O mapa de ambiente no formato de cubo é armazenado como seis imagens bidimensionais (uma para cada face do cubo), como citado na Seção 5.1.2. Desta maneira, é necessário definir qual face do cubo deve ser amostrada, e em seguida, gerar um vetor bidimensional para amostrar a imagem mapeada na face selecionada do cubo. O mapa de ambiente no formato de esfera é armazenado como uma imagem bidimensional, como citado na Seção 5.1.1. Desta maneira, o vetor tridimensional usado na amostragem do mapa de esfera deve ser transformado em um vetor bidimensional utilizado para amostrar uma imagem.

O Algoritmo 5 apresenta a transformação do vetor tridimensional de acesso ao mapa no formato de cubo em coordenadas reais de acesso ao mapa. Neste algoritmo, vec representa o vetor tridimensional de entrada utilizado para amostrar o mapa de cubo, cubeF ace representa a face que será amostrada do cubo, e mapU e mapV as coordenadas de amostragem da imagem armazenada na face selecionada do cubo. A linguagem de shaders HLSL, utilizada neste trabalho, provê métodos para amostragem direta do mapa de cubo a partir de um vetor tridimensional, não sendo necessária a aplicação do Algoritmo 5. Além disso, espera-se que o acesso ao mapa de cubos seja o mais otimizado possível, devido ao mesmo ser implementado diretamente na linguagem de shader.

O Algoritmo 6 apresenta a transformação do vetor tridimensional de acesso ao mapa no formato de esfera em coordenadas reais de acesso ao mapa. Neste algoritmo, vec representa o vetor tridimensional de entrada utilizado para amostrar o mapa de esfera, e mapU e mapV as coordenadas de amostragem da imagem armazenada no mapa de esfera. Note que esse algoritmo considera um único mapa de esfera, o qual está com sua orientação alinhada com ao vetor (0, 0, 1). A linguagem de shaders HLSL não provê métodos para amostragem direta do mapa de esfera, sendo necessário a implementação do Algoritmo 6 no shader criado.

6.3.1.2 Vetor Tridimensional de Amostragem do Mapa de Ambiente O vetor tridimensional utilizado para acessar o mapa de ambiente geralmente é calcu- lado como sendo a reflexão do vetor de visão sobre cada ponto da superfície da malha renderizada. Isto faz com que a malha funcione como um espelho, refletindo espe- cularmente as contribuições do mapa de ambiente [Akenine-Möller et al., 2008]. Esta abordagem, apesar de produzir bons resultados visuais, faz com que o acesso ao mapa de ambiente seja dependente de fatores externos, como o vetor de visão. Desta ma-

Algorithm 5 Algoritmo de transformação do vetor tridimensional de acesso ao mapa no formato de cubo em coordenadas reais de acesso a uma das faces do cubo.

~

vec← Vetor tridimensional de amostragem do mapa de ambiente cubeF ace← 0

mapU ← 0 mapV ← 0

if | ~vecx| ≥ | ~vecy| and | ~vecx| ≥ | ~vecz| then

if vec~ x > 0 then

cubeF ace← CUBEMAP_POSITIVE_X_FACE mapU ← − ~vecz/| ~vecx|

mapV ← − ~vecy/| ~vecx|

else

cubeF ace← CUBEMAP_NEGATIVE_X_FACE mapU ← ~vecz/| ~vecx|

mapV ← − ~vecy/| ~vecx|

end if

else if | ~vecy| ≥ | ~vecx| and | ~vecy| ≥ | ~vecz| then

if vec~ y > 0 then

cubeF ace← CUBEMAP_POSITIVE_Y_FACE mapU ← ~vecx/| ~vecy|

mapV ← ~vecz/| ~vecy|

else

cubeF ace← CUBEMAP_NEGATIVE_Y_FACE mapU ← ~vecx/| ~vecy|

mapV ← − ~vecz/| ~vecy|

end if

else if | ~vecz| ≥ | ~vecx| and | ~vecz| ≥ | ~vecy| then

if vec~ z > 0 then

cubeF ace← CUBEMAP_POSITIVE_Z_FACE mapU ← ~vecx/| ~vecz|

mapV ← − ~vecy/| ~vecz|

else

cubeF ace← CUBEMAP_NEGATIVE_Z_FACE mapU ← − ~vecx/| ~vecz|

mapV ← − ~vecy/| ~vecz|

end if end if

mapU ← (mapU + 1)/2 mapV ← (mapV + 1)/2

neira, uma posição na superfície da malha pode amostrar diferentes posições no mapa de ambiente, de acordo com o vetor de visão, e da posição e orientação da malha no espaço. No mapeamento dos pelos sobre a malha é desejado que:

Algorithm 6 Algoritmo de transformação do vetor tridimensional de acesso ao mapa no formato de esfera em coordenadas reais de acesso ao mapa.

~

vec← Vetor tridimensional de amostragem do mapa de ambiente mapU ← 0

mapV ← 0

length←qvec~ 2x+ ~vec 2

y+ ( ~vecz+ 1) 2

mapU ← ~vecx/(2∗ length) + 0.5

mapV ← ~vecy/(2∗ length) + 0.5

1. O acesso ao mapa de ambiente seja independente de fatores externos, fazendo com que uma posição sobre a malha sempre amostre uma mesma posição do mapa de ambiente.

2. Dois vértices pertencentes a uma mesma face da malha não amostrem a mesma posição do mapa de ambiente, evitando assim a criação de aliasings.

3. O número de diferentes amostragens realizadas sobre o mapa de ambiente por cada face da malha seja idealmente proporcional ao tamanho da face, fazendo com que cada ponto da malha amostre um diferente valor do mapa de ambiente. Para atender aos requisitos desejados na amostragem do mapa de ambiente, foram estudadas três abordagens diferentes. Na primeira abordagem, o mapa de ambiente foi endereçado utilizando o vetor normal de entrada dos vértices (sem a aplicação de transformações, como as de mundo e visão). Esta abordagem atende ao primeiro requisito do mapeamento, e também tende a atender o segundo requisito em malhas que apresentam grande variação de curvatura. Na segunda abordagem, o mapa de ambiente foi endereçado utilizando um vetor unitário representando a direção de cada ponto sobre a malha (sem a aplicação de transformações). Esta abordagem atende ao primeiro requisito do mapeamento, e também tende a atender ao terceiro requisito, pois quanto maior a distância entre vértices de uma face maior é a variação em suas posições. Por último, na terceira abordagem o mapa de ambiente foi endereçado utilizando a combinação dos endereços gerados na primeira e segunda abordagem. O resultado da aplicação dessas três diferentes abordagens para a amostragem do mapa de ambiente é apresentado na Seção 7.2.1.

Documentos relacionados