• Nenhum resultado encontrado

3 Trabalhos Relacionados

4.4 Coletando os elementos

4.5.3 Formas Geométricas

A maioria dos modelos do mundo real é composta de complexos de triângulos com vértices compartilhados, chamada malhas triangulares. Inclusive o Revit modela a cena a partir das malhas de triângulos. No Ray Tracing implementado, existem apenas malhas de triângulos como objetos a serem renderizados, pois não há necessidade para outro tipo de forma, visto que no modelo do Revit há apenas malhas.

Quando um raio é traçado, por muitas vezes, este não intercepta nenhum dos objetos da cena, mas mesmo assim são feitos todos os cálculos de interseção do raio com as superfícies dos objetos.

Para poder acelerar a verificação de interseção dos raio para com os objetos é feito, primeiro, a interseção do raio com um sólido limitante, antes de interceptá-lo com a superfície do objeto. O sólido limitante implementado é uma caixa, mais conhecida por bounding box, Se o raio não intercepta o sólido limitante do objeto, então este raio não interceptará a malha de triângulos que o sólido contém. Desta forma, são eliminadas as interseções desnecessárias.

Outra forma de aceleração implementada, foi a estrutura de dados, K-d Tree, a qual é explicada no Capítulo 2. É nessa estrutura que são armazenadas as malhas triangulares, tendo o processo de busca com complexidade no caso médio igual O(log n).

4.5.4

Materiais

No presente trabalho, foram implementados quatro tipos de materiais que são: difuso, metal, dielétrico e o último que emite luz difusa. Os materiais implementam os método scatter e o emitted.

Scatter recebe como entrada um raio de entrada e as informações do objeto atingido, como o vetor normal e tipo de material, este método determina o comportamento de um raio espalhado e sua atenuação correspondente. O comportamento desse procedimento depende do tipo de material.

Emitted é implementado por aqueles materiais que emitem luz, recebe como entrada as coordenadas s e t da textura e o ponto que o raio da câmera o atingiu. Este método retorna a cor do objeto.

50

4.5.4.1 Difuso

Simula um material com a superfície difusa. A intensidade da luz difusamente refletida (ID) é obtida através do produto escalar do vetor normal da superfície (N) com a direção

da luz (L), multiplicado pela cor (C) da superfície e a intensidade da luz (IL) que atinge

a superfície:

ID = L · NCIL,

onde a luz que incide no objeto reflete a luz igualmente em todas as direções. A Figura 13 demostra o comportamento descrito.

Figura 13: Comportamento de um feixe de luz L sobre uma superfície difusa com a normal N

Fonte: Autor

4.5.4.2 Metal

O Ray Tracing desenvolvido implementa um material de metal com a reflexão quase perfeita. Uma superfície de metal reflete os raios de uma forma espelhada. Para simular vários graus de metal polido, é utilizado um fator difuso que significa uma pequena per- turbação em um raio refletido. Esse fator varia de 0 a 1, quanto menor o fator difuso, mais polida a superfície. O raio refletido (r) é calculado da seguinte maneira:

r = d − 2 × (d · n) × n,

onde d é a direção do raio da câmera e n é vetor normal da superfície atingida. 4.5.4.3 Dielétrico

Com esse tipo de material, é possível simular a fronteira entre dois meios com índices de refração distintos. Quando um raio de luz um objeto dielétrico, se divide em dois: um raio refletido e o outro em um raio refratado, ou, transmitido. O ângulo do raio de luz

refratado ao passar para um meio com índice de refração diferente é calculado pela lei de Snell:

n1· sin θ1 = n2· sin θ2,

onde θ1 e θ2 são os ângulos de incidência e refração, respectivamente, e n1 e n2 os índices

de refração dos meios. A lei de Snell é ilustrada na Figura 14 Figura 14: Lei de Snell

Fonte: Wikiédia, 2006

Para descrever a reflexão e a transmissão de luz, foi usada a aproximação de Schlick (SCHLICK, 1994). R(θ) = R0+ (1 − R0)(1 − cos θ)5, R0 =  n1− n2 n1 + n2 2 ,

onde n1 e n2 são os índices de refração e cos θ é igual ao produto interno do vetor normal

com o vetor de direção da câmera. 4.5.4.4 Luz Difusa

Simula o material que emite a luz difusa. Ao invés de gerar raios dispersos, este material gera raios que iluminam os outros objetos da cena. A luz difusa se espalha de forma proporcional no ambiente. O esquema se encontra na Figura 15

52

Figura 15: Esquema da luz difusa

Fonte: Wikipedia 2014

4.5.5

Texturas

Em computação gráfica, uma textura significa, de forma simplificada, um procedi- mento que devolve as cores da superfície de um objeto. Neste trabalho, foram desenvolvi- dos três tipos de texturas: textura constante, textura de imagem e textura desenvolvida por Ken Perlin, a Perlin noise (PERLIN, 1985).

4.5.5.1 Constante

A textura constante foi implementado de forma trivial, onde apenas retorna a cor do objeto atingido.

4.5.5.2 Imagem

O mapeamento de textura mapeia uma posição em uma imagem 2D para uma posição em um objeto 3D. Para executar esse mapeamento, usa-se de coordenas de texturas (s e t). s é uma porcentagem da largura de uma imagem, enquanto o t é uma porcentagem da altura de uma imagem. Para cada vértice é atribuída uma coordenada de textura e essas coordenadas são interpoladas na superfície do triângulo para especificar a posição específica na imagem para cada fragmento de triângulo.

Figura 16: Demostração de objetos com imagens de texturas

Fonte: Wikipedia 2014

Foi utilizado a biblioteca de domínio público stb_image, a qual converte a imagem m uma lista de char são RGBs compactados, com um intervalo de 0 a 255. O Revit fornece o banco de imagens das texturas no diretório “C:/Program Files (x86)/Common Files/Autodesk Shared/Materials/Textures/1/Mats”.

4.5.5.3 Perlin noise

A textura de Perlin noise é uma textura processual primitiva. Essa textura pode ser definida para qualquer número de dimensões. O algoritmo define grade com vetores gradientes aleatórios, após calcular o produto escalar entre o vetor de gradiente e o vetor de distância e por fim, realiza a interpolação entre esses valores. A Figura 17 mostra exemplos de várias imagens com a textura de Perlin Noise.

Figura 17: Exemplos de Perlin Noise

54

Neste trabalho, o Perlin noise foi usado para gerar a textura de mármore.

4.5.6

Ray Tracing

O algoritmo do motor do Ray Tracing é mostrado no pseudocódigo abaixo. Este código foi paralelizado em 4 linhas de execução, do inglês Threads, com a finalidade de aumentar o desempenho do renderizador, e como cada pixel é computado de forma independente não há recursos a serem compartilhados.

Algoritmo 7 Ray Tracing

1: para linha ← linhas-1 até 0 faça

2: para coluna ← 0 até colunas-1 faça

3: c ← 0

4: para s ← 0 até amostragem faça 5: u ← coluna + ξ1 6: v ← linha + ξ2 7: raio ← RaioCamera(u, v) 8: c ← c + cor(raio) 9: fim para 10: c ← c amostragem 11: img[linha][coluna] ← c 12: fim para 13: fim para 14: retorna img

Uma maneira simples de obter uma imagem suavizada é com a técnica de Antialiasing, é o processo de reduzir as distorções irregulares nas bordas, de modo que as linhas pareçam mais suaves.

O Ray Tracing proposto implementa o Antialiasing lançando diversos raios recolhendo amostras em um padrão aleatório dentro de cada pixel. No código, o padrão aleatório uniforme é definido no intervalo [0, 1) e chamado de ξ1 e ξ2. Ao final do lançamento dos

raios para cada pixel, é calculada a média das intensidades e então é colorido o pixel de acordo com o resultado obtido.

Os cálculos para a obtenção de cor são baseados na fórmula de (WHITTED, 1980). Onde a intensidade da luz (I) é passada para o observador a partir de um ponto na

superfície consiste principalmente dos componentes reflexão especular (S) e transmissão (T). O modelo de (WHITTED, 1980) definido como:

I = Ia+ Kd j=ls

X

j=1

(N · Lj) + ksS + KtT

onde I é a intensidade refletida, Ia é reflexão devido à luz ambiente, kd constante de

reflexão difusa, ls número de amostragem, N é vetor unitário da normal da superfície,

Lj é o vetor na direção da fonte de luz j, ks é o coeficiente de reflexão especular, S

éa intensidade da luz incidente da direção R, Kt é o coeficiente de transmissão, T é a

intensidade da luz da direção P.

No Algoritmo 8, é possível visualizar o pseudocódigo com os cálculos para determinar a cor de um pixel.

Algoritmo 8 Cor

1: se AtingeAlguem(raio) então 2: ip ← 0

3: sombra ← 1

4: para cada luz ∈ cena faça

5: se AtingeAlguem(raioLuz) então

6: se M ateiral(rayLuz) 6= V idro então

7: sombra ← luzAmbiente

8: fim se

9: fim se

10: emiteLuz ← EmiteLuz(M ateiral(ray)) 11: se prof undiadeRaio > 0 então

12: ip ← ip + albedo + sombra + luz + emiteLuz 13: ip ← ip + Cor(RaioDisperso(M aterial)) 14: retorna emiteLuz 15: fim se 16: retorna ip 17: fim para 18: fim se 19: retorna Background(ray)

56

raio que sai da câmera e passa por esse pixel na cena. São traçados novos raios que são refletidos de acordo com as configurações do objeto instanciado até o número máximo de chamadas recursivas ou até atingirem o background.

Por fim, a imagem gerada a partir desses cálulos retorna para o usuário. Os resultados obtidos pelo renderizador, especificado neste capítulo, são demonstrados no Capítulo 6.

5

Resultados

Neste capítulo, se encontram os resultados alcançados pelo PixeR e o detalhamento de quais foram as condições para obter as mesmas. Todas as imagens que serão mostradas a seguir foram geradas usando o Plugin PixeR dentro do Revit em um computador Windows 10, com processador Intel Core I5 1.80GHz e 8 GB de memória RAM. O produto des- sas implementações encontra-se em <https://github.com/emillicosta/RevitPixeR> e pode ser baixado e instalado seguindo os passos do Apêndice A.

Após a instalação, o PixeR se encontra no painel “Renderizador” na aba chamada “Suplementos” do Revit. Ao clicar no ícone da chaleira, uma caixa de diálogo é exibida, apenas se a visualização ativa for do tipo 3D. O formulário é dividido em três partes: Detalhes da Imagem, câmera e iluminação.

Figura 18: Tutorial das telas do PixeR

58

Na primeira parte é possível escolher o tamanho e a qualidade da imagem a ser ren- derizada, na segunda, as informações de configuração da câmera. E na terceira, é possível definir a iluminação tanto artificial quanto natural. Esses passos podem ser visualizados na Figura 18. Após preenchimento dos campos, a imagem será calculada e mostrada em outra caixa de diálogo.

5.1

Materiais

A Figura 19 ilustra todos os materiais que podem ser gerados pelo plugin. Na Figura 19a é o material difuso, na 19b o material dielétrico, simulando vidro. Nas Figuras 19c e 19d é exibido os materiais que emite a luz difusa, sendo a 19c emitindo a luz branca, e a 19d a luz azul.

Figura 19: Representação dos materiais implementados

Fonte: Autor

As figuras 19e, 19f, 19g e 19h são do tipo metal, mudando apenas o fato de difuso, onde na primeira imagem o fator é igual a 0, simulando um espelho e na última imagem o fator é igual a 1.

5.2

Texturas

Podem ser observados, na Figura 20, as texturas que foram implementadas no presente trabalho. Onde na 20a tem-se a textura constante, na 20b a textura de Perlin Noise, simulando mármore e na 20c, a textura de imagem, sendo o piso de madeira, as paredes azulejos e a parte superior um tecido.

Figura 20: Representação das texturas implementadas

Fonte: Autor

5.3

Iluminação

O renderizador é capaz de reproduzir as luzes artificiais difusas e a luz natural do sol. As subseções seguintes detalhada quais são os resultados obtidos.

5.3.1

Artificial

Por não ter conseguido acessar as informações das posições das fontes de luzes artifici- ais, foi realizado uma heurística, transformando os materiais das luminárias que possuem a categoria vidro, em material que emite luz.

O que pode ser visualizado pela Figura 21, onde a Figura 21a dispõe de todas as luzes acessas e a 21b apenas com aquelas que foram previamente selecionadas no formulário. Para produzir essas imagens foram selecionadas apenas as luzes artificiais, sendo assim, renderizadas à noite.

60

Figura 21: Representação das luzes difusas implementadas

Fonte: Autor

A heurística descrita no paragrafo anterior, fabrica imagens com uma certa coerência quando é apenas selecionadas as luzes de tetos, mas para abjures e luzes pontual, causa estranhamento.

Figura 22: Representação das luzes difusas em abajur

Fonte: Autor

5.3.2

Solar

Os resultados dos cálculos da posição aparente do sol por hora são mostrados na Figura 23. Sendo todas as imagens renderizadas com a câmera na mesma posição, no

dia 11/03/2019, data a qual foi escolhida aleatoriamente, no fuso horário de Brasília, nas coordenadas do Departamento de Informática e Matemática Aplicada, (DIMAp) da UFRN (-5,8415945 e -35,199143).

Figura 23: Representação do movimento aparente do sol, no dia 11/03/2019 no fuso horário de Brasília com as coordenadas latitude:-5,8415945 e longitude: -35,199143

62

A Figura 24 exibe o movimento aparente do sol durante o ano. Onde todas as imagens estão localizadas nas coordenas do DIMAp, às 12hs. As datas escolhidas foram pra mostrar o sol nos dias do equinócio e dos solstícios.

Figura 24: Representação do movimento aparente do sol, às 12hs no fuso horário de Brasília com as coordenadas latitude:-5,8415945 e longitude: -35,199143

Fonte: Autor

5.4

Câmera

É possível visualizar, na Figura 25, o que acontece com as imagens quando os parâ- metros de campo de visão, distância focal e abertura são alterados.

Figura 25: Representação da câmera implementada, mudando apenas o campo de visão, a abertura e a distância focal

Fonte: Autor

5.5

Qualidade

Com o PixeR é possível selecionar o nível de qualidade da imagem, onde esses níveis representam a quantidade de número de amostragens. A qualidade ruim possui apenas 10 amostras, a média 50 amostras e a ótima 100. Pode ser observada uma redução de ruídos

64

quanto mais alto é o nível da qualidade.

Figura 26: Representação da mesma imagem mudando apenas nível de qualidade

Fonte: Autor

5.6

Comparação

Com a finalidade de realizar uma comparação subjetiva, foi renderizada a mesma cena, com as mesmas configurações no plugin desenvolvido e no renderizador nativo do Revit. As imagens geradas podem ser observadas na Figura 27.

Figura 27: Comparação entre imagem geradas pelo PixeR com o nível de qualidade ótima e pelo Revit com o nível de qualidade melhor, no dia 11/03/2019 no fuso horário de Brasília com as coordenadas latitude:-5,7 e longitude: -35,2

Fonte: Autor

É possível identificar que a imagem gerada pelo Revit possui menos ruído que a do PixeR, o que pode ser configurado em questão de número de amostras. As imagens também possuem diferença em relação ao contraste, onde a Figura 27b apresenta uma imagem com mais contraste e enquanto 27a menos. A parede perpendicular a janela possui o material como metal, o que não aparenta na figura b.

Outro ponto a ser comparado é a posição do sol. As duas imagens, embora tenham sido renderizadas no mesmo dia, no mesmo horário e na mesma localização, formam sombras distintas no chão. Com isso foi realizado mais comparações, o que pode ser visto na Figura 28.

As imagens da Figura 28 foram renderizadas usando a localização do DIMAP, no dia 14/06/2019, no fuso horário de Brasília. As Figuras 28a e 28b foram geradas às 06hs da manhã. Já as Figuras 28c e 28d às 9hs.

66

Figura 28: Comparação entre imagens geradas pelo PixeR e pelo Revit, no dia 14/06/2019 no fuzo horário de Brasília com as coordenadas latitude:-5,8415945 e longitude: -35,199143

Fonte: Autor

É possível observar uma discrepância entre as imagens reproduzidas no renderizador desenvolvido, ao nativo da plataforma. Pode-se concluir que o Revit calcula a posição aparente do sol de forma errônea, pois no dia 14/06 na cidade de Natal, onde se localizam as coordenadas fornecidas aos renderizadores, amanhece por volta das 5hs.

Estes foram os resultados que o PixeR conseguiu obter até o presente momento. O próximo e último capítulo concluirá este trabalho a partir dos dados alcançados nesta seção.

Documentos relacionados