• Nenhum resultado encontrado

PixeR: um renderizador de cenas 3D utilizando projetosarquitetônicos criados a partir do Revit

N/A
N/A
Protected

Academic year: 2021

Share "PixeR: um renderizador de cenas 3D utilizando projetosarquitetônicos criados a partir do Revit"

Copied!
72
0
0

Texto

(1)

Departamento de Informática e Matemática Aplicada Bacharelado em Ciência da Computação

PixeR - Um Renderizador de Cenas 3D

Utilizando Projetos Arquitetônicos Criados a

Partir do Revit

Débora Emili Costa Oliveira

Natal-RN Junho de 2019

(2)

Débora Emili Costa Oliveira

PixeR - Um Renderizador de Cenas 3D Utilizando

Projetos Arquitetônicos Criados a Partir do Revit

Monografia de Graduação apresentada ao Departamento de Informática e Matemática Aplicada do Centro de Ciências Exatas e da Terra da Universidade Federal do Rio Grande do Norte como requisito parcial para a ob-tenção do grau de bacharel em Ciência da Computação.

Orientador(a)

Prof. Dr. Selan Rodrigues dos Santos

Universidade Federal do Rio Grande do Norte – UFRN Departamento de Informática e Matemática Aplicada – DIMAp

Natal-RN Junho de 2019

(3)

Oliveira, Débora Emili Costa.

PixeR - um renderizador de cenas 3D utilizando projetos arquitetônicos criados a partir do Revit / Débora Emili Costa Oliveira. - 2019.

71f.: il.

Monografia (Bacharelado em Ciência da Computação)

-Universidade Federal do Rio Grande do Norte, Centro de Ciências Exatas e da Terra, Departamento de Informática e Matemática Aplicada. Natal, 2019.

Orientador: Selan Rodrigues dos Santos.

1. Computação gráfica - Monografia. 2. Revit - Monografia. 3. Renderizador - Monografia. 4. Ray Tracing - Monografia. I. Santos, Selan Rodrigues dos. II. Título.

RN/UF/CCET CDU 004.92

Catalogação de Publicação na Fonte. UFRN - Biblioteca Setorial Prof. Ronaldo Xavier de Arruda - CCET

(4)

Monografia de Graduação sob o título Renderização de cenas 3D utilizando projetos ar-quitetônicos criados do Revit apresentada por Débora Emili Costa Oliveira e aceita pelo Departamento de Informática e Matemática Aplicada do Centro de Ciências Exatas e da Terra da Universidade Federal do Rio Grande do Norte, sendo aprovada por todos os membros da banca examinadora abaixo especificada:

Prof. Dr. Selan Rodriguess dos Santos

Orientador

Departamento de Informática e Matemática Aplicada - DIMAp Universidade Federal do Rio Grande do Norte - UFRN

Prof. Dr. Bruno Motta de Carvalho

Departamento de Informática e Matemática Aplicada - DIMAp Universidade Federal do Rio Grande do Norte - UFRN

Prof. Dr. Rafael Beserra Gomes

Departamento de Informática e Matemática Aplicada - DIMAp Universidade Federal do Rio Grande do Norte - UFRN

(5)
(6)

Agradecimentos

Primeiramente, agradeço à Deus e a minha família e principalmente a minha mãe por seus esforços, por ser capaz de me permitir frequentar a universidade sem se preocupar excessivamente com questões financeiras. Agradeço também a todos aqueles que conheci durante a graduação e que me ajudaram de alguma forma a continuar e aqueles também que eu ajudei. Em particular a Fagner Dias, o que me ajudou de forma pertinente para realização deste trabalho.

Especialmente, agradeço a Vinícius Duarte, que me apoiou bastante, e me ajudou com todas as crises de ansiedades e ataques de pânico. Agradeço também ao Programa de Educação e Tutorial (PET) o qual eu faço parte e ao meu tutor Umberto Costa, pelas palavras e apoio.

Por fim, agradeço a Selan Rodrigues dos Santos, por ter criado em mim o interesse pela área de computação gráfica e por ter aceito me orientar durante este trabalho final de graduação.

(7)
(8)

PixeR - Um Renderizador de Cenas 3D Utilizando

Projetos Arquitetônicos Criados a Partir do Revit

Autor: Débora Emili Costa Oliveira Orientador(a): Prof. Dr. Selan Rodrigues dos Santos

Resumo

A renderização tridimensional (3D) é uma ferramenta de design necessária para a comuni-cação entre arquitetos e clientes, capaz de oferecer uma interpretação visual compreensível a partir de desenhos arquitetônicos complexos. Atualmente, há muitos renderizadores no mercado, e pelas pesquisas realizadas neste trabalho foi verificado que a maioria é paga e de código fechado, o que acaba encarecendo o processo de criação do projeto arquitetô-nico. O presente trabalho tem por objetivo apresentar o PixeR, uma opção de renderização via Ray Tracing de código aberto como plugin para o Revit, o qual é um software para arquitetura, urbanismo, engenharia e design. O Ray Tracing implementado é baseado no clássico algoritmo de Whitted, sendo capaz de simular os efeitos óticos de reflexão e refra-ção e dispersão da luz. Como resultado, o renderizador simula texturas, a posirefra-ção solar, luzes difusas, etc. Este trabalho colabora com a comunidade de software livre, a qual pode adicionar melhorias ao PixeR, tais como, adicionar novas texturas e materiais, otimizar o código para que execute mais rápido, dentre outros.

(9)

Projects Created From The Revit

Author: Débora Emili Costa Oliveira Advisor: Prof. Dr. Selan Rodrigues dos Santos

Abstract

Three-dimensional (3D) rendering is a necessary design tool for communication between architects and clients, capable of providing an understandable visual interpretation from complex architectural designs. Currently, there are numerous renderers in the market, and from the research done in this work, it was verified that most are paid and closed source, which ends up making the process of creating the architectural project more expensive. The objective of this work is to present PixeR, an open source Ray Tracing rendering option as a plugin for Revit, which is software for architecture, urban planning, engine-ering and design. The Ray Tracing implemented is based on the classical algorithm of (WHITTED, 1980), being able to simulate the optical effects of reflection and refraction and light scattering. As a result, the renderer simulates textures, the solar position, dif-fuse lights, etc. This work collaborates with the free software community, which can add improvements to PixeR, such as adding new textures and materials, to optimize the code to run faster, among others.

(10)

Lista de figuras

1 A figura abaixo ilustra o processo de geração de imagem com Ray Tracing. Na figura estão presente alguns dos elementos necessários para gerar uma imagem: (1) a câmera, que funciona como os olhos do observador, (2) o plano de imagem, que tanto é o produto final como pode funcionar também como ponto de partida dos raios de luz; (3) raio de luz que partem da câmera/imagem para a cena; (4) objetos presentes na cena, no caso uma esfera; (5) uma fonte de luz, e por fim, (6) raios secundários (shadowrays), utilizados para determinar a sombra dos objetos na cena

(projeção em cinza abaixo da esfera). . . p. 23 2 Exemplo de imagem gerada com Ray Tracing, na qual predominam

su-perfícies transmissivas. . . p. 24 3 Cena de caixa com iluminação global usando Path Tracing. . . p. 25 4 Um copo de conhaque sobre uma superfície fractal renderizada com

Pho-ton Mapping. . . p. 26 5 Cena de um escritório renderizada com Radiosidade. . . p. 27 6 Interface gráfica do Revit 2019 . . . p. 30 7 Imagem gerada pelo V-Ray com modelagem feita pelo Revit . . . p. 33 8 Imagem gerada pelo NVIDIA Iray com modelagem feita pelo Revit . . p. 34 9 Imagem gerada pelo Lumion com modelagem feita pelo Revit . . . p. 35 10 Imagem gerada pelo Enscape com modelagem feita pelo Revit . . . p. 36 11 Imagem gerada pelo renderizado nativo do Revit . . . p. 37 12 Diagrama de atividade do PixeR . . . p. 40 13 Comportamento de um feixe de luz L sobre uma superfície difusa com a

normal N . . . p. 50 14 Lei de Snell . . . p. 51

(11)

16 Demostração de objetos com imagens de texturas . . . p. 53 17 Exemplos de Perlin Noise . . . p. 53 18 Tutorial das telas do PixeR . . . p. 57 19 Representação dos materiais implementados . . . p. 58 20 Representação das texturas implementadas . . . p. 59 21 Representação das luzes difusas implementadas . . . p. 60 22 Representação das luzes difusas em abajur . . . p. 60 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 . . . p. 61 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 p. 62 25 Representação da câmera implementada, mudando apenas o campo de

visão, a abertura e a distância focal . . . p. 63 26 Representação da mesma imagem mudando apenas nível de qualidade . p. 64 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 . . . p. 65 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

(12)

Lista de tabelas

(13)

3D – Tridimensional

DLL – Dynamic Link Library

BIM – Building Information Modeling API – Application Programming Interface ID – identificador

(14)

Lista de símbolos

λ (comprimento de onda) x(ponto no espaço) ωo (direção da luz)

t (tempo)

ωi (direção negativa da luz)

n (Vetor normal) hl (horário local)

F H (fuso horário) Φ(latitude) Ψ(longitude)

hs (horário solar aparente)

E (equação do tempo)

N (número de dias decorridos)

∆t(Diferença temporal entre o sol e o relógio) ha (Ângulo horário)

δ (declinação solar)

θ (ângulo de elevação solar) φ (ângulo do azimute solar)

(15)

1 Recuperar Elementos . . . p. 44 2 Recuperar Malhas . . . p. 45 3 Recuperar Materiais . . . p. 46 4 Recuperar Luzes . . . p. 47 5 Raio da câmera . . . p. 48 6 interpolação do backgound pela hora do dia . . . p. 48 7 Ray Tracing . . . p. 54 8 Cor . . . p. 55

(16)

Sumário

1 Introdução p. 17 1.1 Organização do trabalho . . . p. 18 2 Embasamento Teórico p. 19 2.1 Computação . . . p. 19 2.1.1 Software Livre . . . p. 19 2.1.2 Renderização 3D . . . p. 20 2.1.3 Plugin . . . p. 20 2.1.4 DLL . . . p. 20 2.1.5 Iluminação Global . . . p. 20 2.1.6 Equação de renderização . . . p. 21 2.1.7 Ray Tracing . . . p. 22 2.1.8 Path Tracing . . . p. 24 2.1.9 Photon Mapping . . . p. 25 2.1.10 Radiosidade . . . p. 26 2.1.11 K-d Tree . . . p. 27 2.2 Arquitetura . . . p. 28 2.2.1 Projeto Arquitetônico . . . p. 28 2.2.1.1 Levantamento de dados . . . p. 28 2.2.1.2 Anteprojeto . . . p. 29 2.2.1.3 Projeto Legal . . . p. 29 2.2.1.4 Projeto Executivo . . . p. 29

(17)

2.2.2.1 API Revit . . . p. 31 3 Trabalhos Relacionados p. 33 3.1 V-ray . . . p. 33 3.2 NVIDIA Iray . . . p. 34 3.3 Lumion . . . p. 34 3.4 Enscape 3D . . . p. 35 3.5 Nativo do Revit . . . p. 36 3.6 Conclusão . . . p. 37 4 Metodologia p. 38 4.1 Proposta . . . p. 38 4.1.1 Requisitos . . . p. 39 4.2 Conexão API . . . p. 40 4.3 Posição Solar . . . p. 41 4.4 Coletando os elementos . . . p. 43 4.4.1 Coletando as Malhas . . . p. 44 4.4.2 Coletando os Materiais . . . p. 45 4.4.3 Coletando as Luzes . . . p. 46 4.5 Renderizador . . . p. 47 4.5.1 Câmera . . . p. 47 4.5.2 Background . . . p. 48 4.5.3 Formas Geométricas . . . p. 49 4.5.4 Materiais . . . p. 49 4.5.4.1 Difuso . . . p. 50 4.5.4.2 Metal . . . p. 50

(18)

4.5.4.3 Dielétrico . . . p. 50 4.5.4.4 Luz Difusa . . . p. 51 4.5.5 Texturas . . . p. 52 4.5.5.1 Constante . . . p. 52 4.5.5.2 Imagem . . . p. 52 4.5.5.3 Perlin noise . . . p. 53 4.5.6 Ray Tracing . . . p. 54 5 Resultados p. 57 5.1 Materiais . . . p. 58 5.2 Texturas . . . p. 59 5.3 Iluminação . . . p. 59 5.3.1 Artificial . . . p. 59 5.3.2 Solar . . . p. 60 5.4 Câmera . . . p. 62 5.5 Qualidade . . . p. 63 5.6 Comparação . . . p. 64 6 Considerações finais p. 67 Referências p. 68

(19)

1

Introdução

O mercado mundial de arquitetura e urbanismo vem crescendo muito nesses últimos anos. O Brasil segue a mesma tendência, pois, segundo o conselho de arquitetura e urba-nismo (CAU/BR, 2018), no primeiro semestre de 2018, o Brasil teve um aumento de 5% nos serviços em comparação ao mesmo período de 2017.

O crescimento do mercado gera uma grande demanda de projetos arquitetônicos e espera-se que sejam executados com rapidez, o que tem feito muitos escritórios de arqui-tetura buscarem capacitação para aperfeiçoarem a qualidade e agilizarem o processo. Uma forma de alcançar esses objetivos, é através da utilização de softwares especializados na área. Por meio das ferramentas desses softwares, é possível que sejam feitos modelos para planejar, projetar, construir e gerenciar edifícios e infraestruturas. Os principais softwa-res, segundo (CAUBR, 2014), são o Revit (REVIT, 2019), o AutoCad (AUTODESK, 2019), o SketchUp (SKETCHUP, 2019), entre outros.

Contudo, esses softwares são complexos e dão suporte a várias etapas do processo de trabalho de um arquiteto, que vai desde a definição da programação de necessidade do projeto até a criação do projeto executivo. Para este trabalho, estamos interessados na etapa de renderização 3D, a qual permite que um arquiteto crie animações ou ima-gens bidimensionais com objetivo principal de mostrar todos os atributos que devem ser incluídos no design final.

A renderização 3D na arquitetura desempenha um papel relevante no processo de conceito, criação e apresentação de novos designs. Com a renderização é possível perceber aspectos que as maquetes eletrônicas 3D não conseguem reproduzir por si só, como o reflexos das janelas contribuem para a construção, como são os metais que são utilizados, foscos ou brilhantes, como será a iluminação do ambiente, dentre muitos outros aspectos que contribuem para uma melhor apresentação do projeto. Além de que, as imagens foto-realísticas geradas ajudam a vender o trabalho do arquiteto.

(20)

dife-18

renças. Porém, normalmente, estes possuem preços bem elevados o que acaba encarecendo o processo de criação do projeto arquitetônico.

Portanto, este trabalho tem por objetivo apresentar uma opção de renderizador 3D de software livre como plugin para o Revit, que é um software tradicionalmente usado em Arquitetura, Urbanismo, Engenharia e Design. O Revit foi escolhido por ser uns dos principais softwares da área e por contemplar o projeto arquitetônico integralmente, além de oferecer uma boa biblioteca de materiais.

A ferramenta proposta será um renderizador via Ray Tracing baseado no algoritmo de Whitted (WHITTED, 1980), sendo capaz de simular alguns efeitos óticos, como os fenômenos de reflexão e refração, espalhamento e dispersão. A escolha pelo Ray Tracing foi feita pela possibilidade de simular a iluminação de forma realista, obter os efeitos como reflexos e sombras. Além disso, a independência computacional de cada raio possibilita a paralelização o algoritmo.

Como contribuição final, espera-se que o trabalho ora proposto possa dar mais uma escolha ao arquiteto e designer para a produção de imagens foto-realista em 3D. E por fim, por se tratar de um software livre, acreditamos ser possível reduzir um pouco os custos totais de elaboração de um projeto executivo arquitetônico ou de design.

1.1

Organização do trabalho

O Capítulo 2 descreve os aspectos teóricos que são necessários para o total enten-dimento deste trabalho, bem como termos da área de Computação, quanto da área de Arquitetura. O Capítulo 3 descreve os principais plugins que estão diretamente relacio-nados com o trabalho proposto. O Capítulo 4, apresenta de forma detalhada os requisitos para a criação do renderizador. O capítulo seguinte retrata os métodos e os materiais que foram necessários para realização deste. Os Capítulo 5 e 6 apresentam os resultados obtidos, juntamente com a discussão e algumas indicações de trabalhos futuros.

(21)

2

Embasamento Teórico

Neste capítulo, são apresentados os conceitos que são necessários para o entendimento do projeto. A primeira sessão apresenta os algoritmos e termologias da área de Computa-ção Gráfica, enquanto na sessão seguinte é introduzido os conceitos e termos da área de Arquitetura e Urbanismo.

2.1

Computação

2.1.1

Software Livre

Os usuários de software livres “possuem a liberdade de executar, copiar, distribuir, estudar, mudar e melhorar o software.”(FOUNDATION, 2019). Para um programa ser con-siderado como software livre, o usuários do mesmo devem ter as quatro liberdades essen-ciais.

Liberdade 0: Liberdade para executar o programa para qualquer finalidade.

Liberdade 1: Liberdade de aprender como o programa opera, e se for útil adaptá-lo para o que for necessário.

Liberdade 2: Liberdade de compartilhar cópias do código de modo que possa ajudar ao próximo.

Liberdade 3: Liberdade de distribuir o código com modificações feitas por outros. Desta forma, viabiliza que toda a comunidade tem chance de beneficiar das mudanças. As liberdades descritas anteriormente significam que qualquer tipo de pessoa física ou jurídica pode utilizar o software em qualquer computador, para qualquer tipo de trabalho ou atividade.

(22)

20

2.1.2

Renderização 3D

A renderização 3D se refere aos cálculos realizados por um software através de uma aproximação matemática a fim de que uma cena modelada em 3D resulte em uma imagem 2D. Durante o processo, as informações espaciais, de textura e de iluminação da cena são combinadas para determinar o valor de cor de cada pixel na imagem renderizada.

A renderização é muito usada nas áreas de arquitetura, simuladores, games, efeitos visuais de filmes e televisão, etc. A renderização 3D é a última etapa de um processo de animação, fornecendo o aspecto final dos modelos e da animação com efeitos visuais como sombreamento, mapeamento de textura, sombras, reflexos e desfoques de movimento.

2.1.3

Plugin

Um plugin ou módulo de extensão é um programa de computador com a finalidade de adicionar novas funções ou novas características para outro software, promovendo uma funcionalidade especial ou especifica. O habitual é que o plugin seja executado através do software principal, com a interação através de uma certa interface.

2.1.4

DLL

Do inglês “Dynamic Link Library”(DLL) ou “Biblioteca de Vínculo Dinâmico” é uma biblioteca que contém códigos e dados que podem ser usados por mais de um programa ao mesmo tempo. Elas são compostas por sub-rotinas armazenadas em disco, podendo ser carregadas na memória e executadas quando um aplicativo realiza o seu acesso.

2.1.5

Iluminação Global

Iluminação Global é o processo que simula como a luz é refletida de uma superfície para outras, ao invés de ser limitada apenas à luz que atinge uma superfície diretamente de uma fonte de luz. A iluminação indireta de modelagem permite efeitos que tornam o mundo virtual mais realista.

Um modelo de iluminação global calcula a cor em um ponto x em função das luzes emitidas diretamente pelas fontes e pelas luzes que atingem x depois de reflexões e trans-missão através da própria e/ou de outras superfícies. As imagens renderizadas usando algoritmos de iluminação global geralmente aparecem mais foto-realísticas em relação as

(23)

que usam apenas algoritmos de iluminação direta. No entanto, essas imagens são compu-tacionalmente mais caras.

O componente de reflexão difusa da iluminação global às vezes é aproximado pela “iluminação ambiente” na equação de iluminação. Embora este método de aproximação seja fácil de executar computacionalmente, quando usado sozinho não fornece um efeito adequadamente realista. No entanto, se usada corretamente, a iluminação ambiente pode ser uma maneira eficiente de compensar a falta do poder de processamento.

Há vários algoritmos especializados que são usados em programas 3D que podem efetivamente simular a iluminação global. Esses algoritmos são aproximações numéricas da equação de renderização.

2.1.6

Equação de renderização

A equação de renderização foi introduzida em computação gráfica por (KAJIYA, 1986). É uma equação integral que generaliza uma variedade de algoritmos de renderização co-nhecidos, descrevendo o fluxo de energia das luzes de uma cena. As várias técnicas de renderização realistas tentam resolvê-la.

Kajiya (1986) definiu como sendo esta a equação de renderização: I(x, x0) = g(x, x0) [e(x, x0) +

Z

S

ρ(x, x0, x00)I(x0, x00) d x00]

onde, I(x, x0) é relacionado com a intensidade da luz passando do ponto x0 para o ponto

x, g(x, x0) é um termo geométrico, e(x, x0) está relacionado com a intensidade da luz emitida de x0 para x. sendo e diferente de zero apenas se x0 for emissivo (uma fonte de

luz) e ρ(x, x0, x00) está relacionado com a intensidade da luz espalhada de x0 para x por

um pedaço da superfície em x0.

A equação afirma que a intensidade de transporte de luz de uma superfície apontada para outra é simplesmente a soma da luz emitida e a intensidade total da luz que é espalhada em direção a x de todos os outros pontos de superfície.

A integral é assumida S = S si, a união de todas as superfícies. Assim, os pontos

x, x0, x00 abrangem todas as superfícies de todos os objetos na cena.

Atualmente, a equação de renderização evoluiu muito e chegamos a esta a baixo: Lo(x, ωo, λ, t) = Le(x, ωo, λ, t) +

Z

(24)

22

onde, Lo(x, ωo, λ, t) é a radiância espectral total do comprimento de onda (λ) dirigido ao

longo da direção ωo no momento t, de uma posição x, x é a localização no espaço, ωo é

a direção da luz, λ é um determinado comprimento de onda, t é o tempo, Le(x, ωo, λ, t)

é emitida radiância espectral, R. . . d ωi é uma parte integrante de Ω, Ω é o hemisfério

unitário centrado em n contendo todos os valores possíveis para ωi, fr(x, ωi, ωo, λ, t) é a

função de distribuição de refletância bidirecional (BRDF), a proporção de luz refletida de ωi para ωo na posição x, tempo t, e no comprimento de onda λ, ωi é a direção negativa

da luz recebida, Li(x, ωi, λ, t) é radiância espectral de comprimento de onda λ entrando

em direção a x da direção ωi na hora t e n é o vetor de superfície normal em x.

Resolver a equação de renderização é um dos principais desafios na renderização rea-lista. Uma abordagem para resolve-lá é baseada em métodos de elementos finitos, levando ao algoritmo de radiosidade. Outra abordagem usando métodos de Monte Carlo levou a muitos algoritmos diferentes, incluindo Ray Tracing, Path Tracing, Photon Mapping, dentre outros.

2.1.7

Ray Tracing

Ray tracing é um algoritmo de computação gráfica usado para renderização de imagens tridimensionais. Baseia-se na simulação do trajeto que os raios de luz percorreriam no mundo real. Porém, como muitos dos raios que saem das luzes e/ou são refletidos pela superfícies jamais alcançaram os olhos do observador, é mais eficiente fazer o inverso: gerar raios a partir dos olhos do observador, passando pelos pixel da imagem, e verificar se esses raios atingem fontes de luzes, para então calcular sua contribuição para a imagem final.

O Ray Tracing é um algoritmo recursivo que consiste em projetar, a partir do ob-servador, um raio para cada um dos pixeis constituintes da imagem, este raio que irá intersectar os objetos que formam a cena. Isso pode ser melhor observado na Figura 1.

(25)

Figura 1: A figura abaixo ilustra o processo de geração de imagem com Ray Tracing. Na figura estão presente alguns dos elementos necessários para gerar uma imagem: (1) a câmera, que funciona como os olhos do observador, (2) o plano de imagem, que tanto é o produto final como pode funcionar também como ponto de partida dos raios de luz; (3) raio de luz que partem da câmera/imagem para a cena; (4) objetos presentes na cena, no caso uma esfera; (5) uma fonte de luz, e por fim, (6) raios secundários (shadowrays), utilizados para determinar a sombra dos objetos na cena (projeção em cinza abaixo da esfera).

Fonte: (WIKIPEDIA, 2019)

Cada raio é testado se há interseção com algum subconjunto dos objetos na cena. Depois que o objeto mais próximo for identificado, o algoritmo estimará a luz que entra no ponto de interseção, examinando as propriedades do material e combinando essas informações para calcular a iluminação no ponto da cena que o raio atinge. Iluminação esta que pode ser proveniente diretamente de fontes de luz, ou ser luz proveniente de outro objeto que por reflexão ilumina o ponto que está sendo analisado.

Depois de um número máximo de reflexões ou de um raio percorrendo uma certa distância sem interseção, o raio para de ser traçado e o valor do pixel é atualizado. Se um determinado raio não intersectar nenhum objeto em seu trajeto, é atribuído ao pixel a cor do fundo da cena.

O algoritmo de Whitted (WHITTED, 1980) determina a cor de um objeto, traçando raios a partir da câmera até atingir algo. Ao alcançar o objeto, o algoritmo lança mais raios recursivamente. Quando um raio atinge uma superfície, ele pode gerar até três novos tipos de raios: reflexão, refração e sombra.

(26)

24

raios enquanto eles cruzam superfícies reflexivas ou transparentes, e seguir o caminho desses raios para descobrir a cor do objeto que eles intersectariam. A Figura 2 mostra uma imagem que foi renderizada com o Ray Tracing.

Figura 2: Exemplo de imagem gerada com Ray Tracing, na qual predominam superfícies transmissivas.

Fonte: (WIKIPEDIA, 2019)

2.1.8

Path Tracing

O Path Tracing, introduzido por (KAJIYA, 1986), como uma solução numérica para a equação de renderização. O algoritmo integra toda a luz recebida por todo o hemisfério para calcular a luz de saída, dado o ponto e o ângulo de observação.

O Path Tracing é um algoritmo de Monte Carlo que executa caminhos aleatórios nas cenas em 3D à procura de fontes de luzes. Quando elas são encontrados, o algoritmo se integra ao longo de todo o caminho aleatório formado para calcular a luz de entrada. Para realizar o caminho aleatório, vários raios são gerados a partir dos pontos de intersecção, suas direções são escolhidas aleatoriamente com base nas propriedades de refletância do material. Na Figura 3, é possível visualizar um exemplo de imagem gerada pelo Path Tracing.

(27)

Figura 3: Cena de caixa com iluminação global usando Path Tracing.

Fonte: (KABIR, 2007)

2.1.9

Photon Mapping

Photon Mapping (JENSEN, 1996) é um método de iluminação global de duas passa-gens baseado no conceito de mapas de fótons. Este algoritmo representa uma melhoria significativa de uma abordagem descrita anteriormente, tanto em relação à velocidade, precisão e versatilidade. Na primeira passagem, dois mapas de fótons são criados emi-tindo os fótons das fontes de luz e armazenando-os quando eles atingem as superfícies. É usado um mapa de fótons cáusticos de alta resolução para renderizar cáusticas que são visualizadas diretamente e um mapa de fótons de baixa resolução que é usado durante a etapa de renderização.

As imagens geradas pelo Photon Mapping demonstram iluminação global em cenas contendo objetos procedurais e superfícies com modelos de reflexão opacas e brilhante. Um exemplos dessas imagens pode ser visualizado na Figura 4.

(28)

26

Figura 4: Um copo de conhaque sobre uma superfície fractal renderizada com Photon Mapping.

Fonte: (JENSEN, 1996)

2.1.10

Radiosidade

A radiosidade é um método de renderização baseado em uma análise detalhada de reflexos de luz em superfícies opacas. As imagens geradas são caracterizadas por sombras suaves e graduais. A técnica radiosidade é mais comumente usada para renderizar imagens do interior de edifícios e pode alcançar resultados extremamente realistas em cenas que são compostas de superfícies refletoras difusas. A Figura 5 é um exemplo de imagem gerada por essa técnica.

(29)

Figura 5: Cena de um escritório renderizada com Radiosidade.

Fonte: Wikipeia, 2007

2.1.11

K-d Tree

Definido em (BENTLEY, 1975), K-d tree, onde k é a dimensionalidade do espaço de busca, é uma árvore de busca binária multidimensional definida como uma estrutura de dados para armazenamento de informações a serem recuperadas por pesquisas associati-vas.

Cada nó não-folha pode ser considerado implicitamente como um gerador de um hiperplano que divide o espaço em duas partes, conhecido como semiespaço. Os pontos à esquerda do hiperplano são representados pela subárvore à esquerda desse nó e pontos à direita do hiperplano são representados pela subárvore à direita. A direção do hiperplano é escolhida da seguinte maneira: cada nó na árvore é associado a uma das K-dimensões, com o hiperplano perpendicular a esse eixo dimensional. A complexidade desse algoritmo no pior caso para busca, inserção e remoção é O(n). Mas já no caso médio é O(log n).

(30)

28

2.2

Arquitetura

2.2.1

Projeto Arquitetônico

O projeto arquitetônico, segundo (ODEBRECHT, 2006), é um plano organizado de uma edificação, que emite as intenções e desejos dos clientes para o arquiteto.

O projeto arquitetônico tem por objetivo, em primeiro lugar, possibili-tar ao cliente a interpretação e a avaliação de uma ideia concebida pelo arquiteto. Depois de aprovada a ideia, o projeto arquitetônico possibilita aos órgãos públicos a avaliação do mesmo para a sua aprovação legal. Em seguida, permite ao executor a perfeita compreensão e consequente concretização da obra, através da representação do projeto, pelo dese-nho técnico de um conjunto de plantas, especificações, detalhamentos e memoriais. (ODEBRECHT, 2006, p. 8).

Este tipo de projeto deve seguir passos normativos, estes que são voltados para o planejamento formal de uma edificação e regulamentado por normas técnicas e por algum código de obras. As etapas de um projeto de arquitetura são descritas a seguir.

2.2.1.1 Levantamento de dados

A fase de levantamento de dado fornece informações para a elaboração do projeto, por meio dessa etapa que será possível realizar os próximos passos e saber se o projeto pode ser realizado devido a barreiras físicas e legais. Há seis levantamentos básicos. Levantamento planialtimétrico: é um relatório que descreve o terreno com exatidão e

no documento são anotadas as dimensões, ângulos e diferenças de níveis. Essa planta contém a posição real do norte, as dimensões horizontais, perímetro e informações de nível do terreno.

Levantamento de sondagem do terreno: é um processo de exploração e reconheci-mento do subsolo. Este serviço é realizado por profissional especializado na área e não pelo arquiteto.

Dados Necessários do Cliente: são os documentos fornecidos pelo cliente ao arqui-teto. Como por exemplo, escritura do terreno, CPF, carteira de identidade e até mesmo manual do condomínio que traga as restrições e normas arquitetônicas. Dados Necessários do Empreendimento: são dados legais que devem ser

(31)

e a consulta em órgãos públicos municipais que possam impedir ou limitar a viabi-lização do empreendimento.

Programa de necessidades: são as informações de todos as necessidades, dúvidas e escolhas do cliente sobre o empreendimento.

2.2.1.2 Anteprojeto

Nesta fase do projeto, a partir dos dados levantados da etapa anterior, o arquiteto começa a desenvolver as propostas para solução dos ambientes através de um conjunto de desenhos. Anteprojeto é a etapa que consiste em uma configuração definitiva da construção proposta. As dimensões e características da obra serão definidas. Será elaborado o projeto com a criação da planta-baixa de cada pavimento, contendo informações de cada ambiente, pilares, cálculo das áreas e etc. A volumetria, estrutura, planta de cobertura e instalações gerais serão definidas.

Os documentos produzido nesta fase são croquis, plantas, cortes, elevações, estudos volumétricos e renderização 3D. É neste momentos que o PixeR será utilizado.

2.2.1.3 Projeto Legal

Nessa parte do projeto arquitetônico, o projeto legal gera documentos que permitem verificar se o mesmo está dentro dos padrões e normas estabelecidas pelo governo vigente. Após a aprovação dos fiscais, é concedido o alvará de construção, documento fundamental para que se possa executar a obra legalmente.

2.2.1.4 Projeto Executivo

O Projeto Executivo serve como guia para a construção do projeto desenvolvido e é desenvolvido após todos os demais projetos, licenças e alvarás estivem prontos e aprovados por todos os envolvidos: cliente, arquitetos, órgãos fiscalizadores, etc.

Nele consta como a obra deve ser edificada com todos os detalhes: dimensões, me-tragens, acabamentos, recuos, níveis, alturas, fechamentos, acabamentos, enfim, todas as informações necessárias para que a equipe responsável por construir o projeto consiga concluir a tarefa com precisão, seguindo o que foi projetado a risca.

(32)

30

2.2.2

Revit

Revit é um software para arquitetura, urbanismo, engenharia e design. Ele foi escolhido como software base para a criação do PixeR. Foi desenvolvido pela Charles River Software, empresa fundada em 1997. Em 2002 a Autodesk comprou a empresa e o Revit passa a fazer parte do seu catálogo, onde permanece até hoje.

Possui e tecnologia Modelagem de Informações da Construção, do inglês, Building Information Modeling (BIM). Com o BIM, é possível gerar uma base de dados que con-tém tanto informações topológicas como os subsídios necessários para orçamento, cálculo energético e previsão de insumos e ações em todas as fases da construção.

A modelagem do Revit é realizada com elementos do mundo real, como colunas, pa-redes, portas e janelas. O usuário pode criar visualizações do modelo, incluindo planos, seções e chamadas. Todas essas visualizações são geradas diretamente a partir do modelo físico 3D, de forma que as alterações feitas em uma visualização se propagam automatica-mente por todas as outras visualizações. Esse processo praticaautomatica-mente elimina a necessidade de atualizar vários desenhos e detalhes quando uma alteração é feita no modelo.

Para instalação do software é necessário ter ou o Windows ou MacOS como sistema operacional. E na Figura 6 é mostrado a interface do Revit 2019 no Windows.

Figura 6: Interface gráfica do Revit 2019

(33)

Na Figura 6, é exibida a visualização de planta baixa. As visualizações são imagens produzidas a partir de um modelo Revit. Elas podem ser do visualização gráficas, ou de texto. Cada documento do projeto tem uma ou mais visualizações diferentes. Para este trabalho, há apenas interesse nas visualizações gráfica, mais especificadamente nas visualizações 3D. No Revit há dois tipos de vistas 3D, perspectiva e ortogonal. O PixeR trabalha com a vista perspectiva.

2.2.2.1 API Revit

Para o desenvolvimento do presente trabalho é preciso realizar a conexão com a Inter-face de Programação de Aplicações (IPA), do inglês, “Application Programming InterInter-face” (API) do Revit. Ela foi projetada para refletir os mesmos paradigmas de interação do usuário que a interface gráfica do usuário do Revit.

A API do Revit é totalmente acessível por qualquer linguagem compatível com o Microsoft .NET Framework 4.7, como o Visual C#, o Visual Basic .NET (VB.NET) ou o C++/CLI. O Revit oferece uma API projetada para permitir que usuários avançados e desenvolvedores de plugins integrem seus aplicativos ao programa.

Ao instalar algum produto do Autodesk Revit a API também é instalada. Para de-senvolver um plugin é necessário referenciar as duas bibliotecas de classes que funcionam apenas quando o Revit está em execução: RevitAPI.dll e a RevitAPIUI.dll. A RevitAPI.dll contém métodos para acessar a aplicação, documentos, elementos e parâmetros do Revit do do banco de dados. Já a RevitAPIUI.dll contém as interfaces relacionadas para mani-pulação da interface de usuário.

Um plugin para Revit deve conter uma classe que implemente o método “Execute” da interface “IExternalCommand”. Este método é o ponto de entrada para qualquer módulo de extensão. Para invocar o aplicativo desenvolvido dentro do Revit, é preciso criar um arquivo de manifesto para registrá-lo. Um arquivo manifesto é um documento XML que contem metadados de um pacote de aplicativo.

As principais classes da API são Application, UIApplication, UIDocument e Document. O objeto de Application faz acesso a documentos, opções e outros dados e configurações de todo o aplicativo. A classe UIApplication fornece acesso a interface do usuário do Revit. A UIDocument oferece acesso a interfaces do documento, como por exemplo, o conteúdo da seleção de elementos. Já a classe Document viabiliza os dados do banco de dados do Revit.

(34)

32

Foram apresentados os conhecimentos básicos necessários para uma melhor compre-ensão de alguns termos gráficos importantes, que vai desde o que é renderização até as técnicas que são utilizadas. Além de conter definição do projeto arquitetônico e uma breve explicação da plataforma Revit e da sua API.

(35)

3

Trabalhos Relacionados

A fim de obter conhecimento sobre a ferramenta desenvolvida neste trabalho, é neces-sário estudar os outros produtos similares que já existam no mercado. Assim, este capítulo apresenta alguns dos produtos mais relevantes que têm uma forte relação com o proposto aqui. Tais softwares foram escolhidos por serem um dos mais utilizados por arquitetos e por darem suporte ao Revit, software no qual foi desenvolvido o PixeR.

3.1

V-ray

O V-ray (CHAOSGROUP, 2019) é o principal software de renderização 3D, desenvolvido pelo grupo búlgaro Chaos Group em 2002. O V-Ray é um plugin comercial para com-putação gráfica 3D que utiliza técnicas avançadas, como path tracing, photon mapping e iluminação global diretamente calculada. Ele é usado para visualizações e computação gráfica em setores como mídia, entretenimento, produção de filmes, videogames, design industrial, design de produto e arquitetura. Atualmente, segundo (GNU, 2019) a licença anual custa US$695,00. A Figura 7 mostrar uma imagem renderizada com o V-ray.

Figura 7: Imagem gerada pelo V-Ray com modelagem feita pelo Revit

(36)

34

3.2

NVIDIA Iray

O NVIDIA Iray (NVIDIA, 2019) é um renderizador que cria renderizações fisicamente precisas. Utiliza todas as GPUs e CPUs suportadas em operação na máquina, com controle de recursos pelo usuário.

O plugin utiliza de Path Tracing com renderização baseado em física dentro da ja-nela de visualização 3D do próprio Revit proporcionando uma visualização precisa dos resultados finais durante o ajuste das cenas. Há também profundidade de campo rápida para ajustes interativos, renderização de irradiação para mensurar a iluminação natural e artificial. E ainda possui sistema físico do céu e sol. De acordo com (ÜBEL, 2019), a licença anual custa US$ 279,00 dólares. Uma imagem gerada pelo software poder ser visualizada pela Figura 8.

Figura 8: Imagem gerada pelo NVIDIA Iray com modelagem feita pelo Revit

Fonte: (NVIDIA, 2019)

3.3

Lumion

O Lumion (LUMION, 2019) é um renderizador 3D desenvolvido pela empresa Act-3D. Tem suporte para o AutoCAD, o Sketchup, o 3DSmax, o Revit e outros. O Lumion usa a tecnologia 3D em tempo real para fornecer visualizações imediatas e criar imagens em uma fração de segundo sem as longas horas de renderização. Com uma excelente coleção de plantas, árvores, carros, prédios, pessoas e materiais de alta qualidade. O preço do Lumion da versão 9 pro, conforme (ÜBEL, 2019), é US$1,740.00.

(37)

Figura 9: Imagem gerada pelo Lumion com modelagem feita pelo Revit

Fonte: (LUMION, 2019)

3.4

Enscape 3D

O Enscape 3D (ENSCAPE, 2019) é um plugin de renderização 3D em tempo real que é voltado principalmente para a visualização arquitetônica. Todas as alterações no Revit estão imediatamente disponíveis para avaliação no Enscape. Este software permite controlar a hora do dia, fornece um material mais realista para elementos naturais, como grama, árvores e água. Renderiza o efeito óptico cáustica. Utiliza-se do Path Tracing em tempo real. O programa oferece um trial de 14 dias, uma licença educacional de 6 meses. Segundo, (ÜBEL, 2019), a licença é através de assinatura, sendo U$$ 449,00 por ano para uma máquina, U$$ 679,00 por ano permitindo instalar em várias máquinas, e também oferece a opção de assinatura mensal por U$$ 45,00 por mês. A Figura 10 foi gerada pela ferramenta.

(38)

36

Figura 10: Imagem gerada pelo Enscape com modelagem feita pelo Revit

Fonte: (ENSCAPE, 2019)

3.5

Nativo do Revit

Na própria plataforma do Revit há a possibilidade gerar imagens foto-realísticas. A caixa de diálogo de renderização possui uma interface que já vem pré-configurada, pronta para ser executada. Não obstante, a interface também há a opção de configurações mais avançadas para usuários como maior experiência. A renderização também pode ser feita na nuvem pela Autodesk A360, mas apenas para assinantes da Autodesk. Utiliza-se do algoritmo de Ray Tracing para gerar as imagens, um exemplo pode ser visto na Figura 11. Por ser integrado ao Revit, não há gastos adicionais.

(39)

Figura 11: Imagem gerada pelo renderizado nativo do Revit

Fonte: (HELP, 2018)

Tabela 1: Resumo e comparação de dos plugins apresentados.

Plugin Algoritmos Valor Software Livre

V-Ray Path Tracing e Photon Mapping US$695,00 Não NVIDIA Iray Path Tracing e Radiosidade US$279,0 Não

Lumion Não informado US$1740,00 Não

Enscape 3D Path Tracing US$679,00 Não

Nativo Ray Tracing Incluso Não

Fonte: Autor.

3.6

Conclusão

Os softwares apontados neste capítulo, com exceção do Nativo do Revit, possuem pre-ços elevados. E nenhum dos apresentados são softwares livres, portanto não há liberdade de estudar como estes programas funcionam e nem adaptá-los para as necessidades de quem usa. E com isso, para ter um renderizador melhorado, os arquitetos e designers ficam dependentes das atualizações dos softwares, que por muitas vezes são pagas.

(40)

38

4

Metodologia

Com base nas especificações e nos requisitos pesquisados, foi desenvolvido o plugin PixeR. Neste capítulo, os procedimentos metodológicos aplicados ao desenvolvimento do software serão apresentados. São descritos os materiais utilizados, o procedimento neces-sário para a conexão da API do Revit, como recuperar a cena a ser renderizada, o cálculo da posição solar e por fim o Ray Tracing implementado.

4.1

Proposta

O PixeR tem como objetivo apresentar um renderizador de cenas 3D como plugin para o Revit. Destinado a atender as principais necessidades dos arquitetos e designers. Sua finalidade é produzir imagens com um certo grau de realismo utilizando como técnica o Ray Tracing. Além disso, o PixeR produz um produto de software livre, dando mais liberdade e menos custos para geração de imagens foto-realísticas.

Para o desenvolvimento do plugin foi realizada uma entrevista com a arquiteta Rani de Morais, que é Sócia-Diretora da Quatre1. Houve também uma reunião com a Profa. Dra.

Virgínia Maria Dantas de Araújo do departamento do curso de Arquitetura e Urbanismo da UFRN.

Nessas conversas, foram levantados diversos questionamentos relacionadas aos renderi-zadores existentes, como, as principais dificuldades que se tem ao renderizar, a necessidade de realismo, qual o foco dos renderizadores existentes, entre outros.

Os principais pontos levantados nas reuniões foram: (i) Gasta-se muito tempo na configuração dos renderizadores, tendo que realizar uma pré-configuração de teste, para poder renderizar de fato; (ii) Não há a necessidade de um renderizador com o máximo grau de realismo, visto que, o papel da renderização na área de arquitetura é para comunicar ao clientes como o empreendimento ficará após o término do projeto, além de aumentar

(41)

as vendas dos projetos; (iii) O renderizadores focam mais em gerar imagens esteticamente agradáveis, o que por muitas vezes acabam frustrando os clientes, pois as imagens geradas não são compatíveis com o resultado final da obra; (iv) Deve-se encontrar um equilíbrio entre (ii) e (iii).

A partir das entrevistas, foi escolhido o Ray Tracing baseado no Whitted, pois mesmo não sendo o algoritmo mais realista da atualidade, possui um grau de realismo satisfatório para área de arquitetura. Além disso, possui menor complexidade de desenvolvimento.

4.1.1

Requisitos

Com as respostas recebidas, além das informações conhecidas dos outros produtos e conhecimentos adquiridos no curso, os requisitos e especificações da PixeR foram conce-bidos e listados abaixo.

O PixeR será capaz de:

• O PixeR deverá produzir imagens foto-realísticas;

• O PixeR será capaz de configurar o tamanho da imagem em pixels;

• O PixeR será capaz de configurar a qualidade da imagem gerada em 3 níveis: Baixa, Média e Alta;

• A câmera do PixeR deverá ser configurada pelo campo de visão; • A câmera do PixeR deverá ser configurada pela distância Focal; • A câmera do PixeR deverá ser configurada pela abertura;

• O PixeR será capaz de selecionar quais luzes artificiais estarão acesas na imagem; • O PixeR será capaz de selecionar todas ou nenhuma luzes que estarão acesas na

imagem;

• O PixeR será capaz de calcular a posição solar pelos parâmetros data, hora, latitude e longitude;

• O PixeR será capaz de salvar a imagem no formato que o usuário desejar; • O PixeR será capaz de salvar a imagem no diretório que o usuário escolher.

Esses requisitos serviram como base para a criação do plugin, o que será mostrado detalhadamente nas próximas sessões.

(42)

40

4.2

Conexão API

O plugin foi criado seguindo como base na API do Revit 2019. Para desenvolver uma aplicação para o Revit, é necessário linguagens compatíveis com Microsoft .NET Framework 4.7, incluindo Visual Basic.NET, C# e C++/CLI. A linguagem escolhida para desenvolver o PixeR foi C++/CLI por haver mais destreza com C++ em comparação com as outras linguagens. O software utilizado para editar e depurar o código foi Microsoft Visual Studio 2019 Community.

A Figura 12 ilustra os passos de execução do renderizador implementado, por meio do diagrama de atividade. A partir dessa imagem, é notável que, após o estado inicial, o PixeRé invocado, verificando se a vista ativa dentro do Revit é do tipo 3D, caso seja outro tipo de visualização, o programa se encerra. Na condição que a verificação seja verdadeira, é solicitado ao cliente que preencha o formulário.

Ao responder a caixa de diálogo, o plugin, de forma paralela, recupera a lista de luminárias existente no documento e valida se o usuário preencheu de forma satisfatória os campos. Se houve alguma incoerência , o sistema retorna para o estado de ”Preencher Formulário”. Caso contrario, o plugin computa a posição aparente solar.

Figura 12: Diagrama de atividade do PixeR

Fonte: Autor

(43)

malhas e os materiais, construindo os argumentos como entrada para o estado “Renderi-zar”. Ao final, a cena renderizada é exibida para o usuário.

Os estados que estão marcados pela cor laranja serão explicados de forma detalhada nas seções a seguir.

4.3

Posição Solar

O PixeR proposto calcula a posição do sol para as imagens que são renderizadas durante o dia, simulando assim a luz natural. A posição de algum objeto no céu, seja um satélite ou planeta, pode ser encontrada usando o sistema de coordenadas Altazimutais, que é composto pelo ângulo de elevação e pelo ângulo azimute.

Para tal cálculo, é solicitado ao usuário a data, o horário local(hl), o fuso horário(F H),

a latitude (Φ) e a longitude (Ψ) .

Primeiramente, é necessário calcular o horário solar aparente (hs), o qual é o tempo

medido pela posição verdadeira do Sol. Simplificando, é o tempo medido no relógio solar. Por causa da órbita da terra em sol não ser uma circunferência perfeita, o hs não segue

de maneira estável. Em razão, os dias não apresentam a mesma duração durante o ano. Para computar o hs a partir do hl, faz-se necessário da equação do tempo (E), a qual

quantifica o desvio entre os tempos solares médio e aparente. Esta equação assume tanto valores positivos, quanto negativos, indicando ou que hs está adiantado ou atrasado em

relação ao hl. A equação do tempo de forma simplificada é :

E = 7, 678 sin(B(N ) + 1, 374) − 9, 87 sin(2B(N ))

com :

B(N ) = 360

(N − 81)

365

onde N é número do dia do ano, isto é o número de dias decorridos desde 1 de janeiro tendo N igual a 1 e 31 de dezembro igual ou 365 ou 366 para anos bissextos. N = 81 é o equinócio da outono para o hemisfério sul e o equinócio de primavera para o hemisfério norte.

O hl segue o padrão do horário solar médio dentro de um fuso horário. Com isso,

quando o observador está afastado do meridiano central, o sol é visto de maneira diferente em relação ao relógio. O sol aparece atrasado para o espectador que está a oeste do

(44)

42

meridiano, se comparado com outro observador que está no meridiano.

Para calcular a diferença temporal entre o sol e o relógio (∆t), é preciso considerar a rotação da Terra. Em um dia, o planeta gira 360◦, percorrendo, proporcionalmente,

15◦ a cada hora (360/24), ou ainda 0,25por minuto. Cada 1de longitude a oeste do

fuso central significa 4 minutos de atraso solar; igualmente, cada 1◦ a leste representa 4

minutos de adiantamento. A fórmula final é:

∆t = Ψ − (F H × 15◦) × 4

Somando o horário local em horas com a equação do tempo, mais os efeitos da longi-tude, é possível prever o horário solar aparente.

hs = hl+ E + ∆t

Para encontrar os valores das coordenas Altazimutais do sol é preciso antes conhecer o ângulo horário e a declinação solar.

Ângulo horário (ha) é ângulo medido sobre o Equador, com origem no meridiano

local e extremidade no meridiano do astro. Varia entre -12h e +12h. O sinal negativo indica que o astro está a leste do meridiano, e o sinal positivo indica que ele está a oeste do meridiano.

ha = (15 ∗ (hs− 12))

A declinação solar (δ) é o ângulo formado entre o equador terrestre e a linha ima-ginária que contém o plano do sol. A declinação solar varia entre +23, 45◦, quando o sol

está no hemisfério norte, a −23.45◦, quando o sol está no hemisfério sul.

δ = −23.45◦ · cos 360

365 · (N + 10) 

O ângulo de elevação solar (θ) é a altitude do sol, o ângulo entre o horizonte e o centro do disco do sol. Quando o sol aparece no horizonte ao amanhecer, o grau de elevação é igual azero. À medida que ele se levanta no céu, o ângulo de altitude aumenta até 90◦.

Segue a fórmula para calcular o seno do ângulo.

sin θ = sin Φ sin δ + cos Φ cos δ cos ha

(45)

horizontal define a direção relativa do sol ao longo do horizonte local. cos φ = sin δ cos Φ − cos hacos δ sin Φ

sin θ

A partir dos ângulos θ e φ é possível calcular a posição solar em coordenas 3D, usando o sistema de coordenas esféricas.

X = R cos θ cos φ

Y = R cos θ sin φ

Z = R sin θ onde R é a distância do sol para a terra.

4.4

Coletando os elementos

Os objetos contidos na cena a ser renderizada, são obtidos através da classe Element. Esta é a classe base para a maioria dos dados persistentes dentro de um documento da API Revit. Element representa desde dados abstratos da documentação do projeto até dados físicos, como por exemplo uma parede. Para coletar apenas os elementos que devem ser renderizados, é preciso selecionar aqueles que não herdam da classe “ElementType” (classe base para todos os tipos dentro do Revit) e que sejam da categoria que possua materiais associados.

Com o intuito de exemplificar como são recuperados os elementos, segue o pseudocó-digo abaixo. Os métodos oriundos da API são mantidos com o nome original em Inglês, neste e nos próximos pseudocódigos.

(46)

44

Algoritmo 1 Recuperar Elementos 1: função Elementos(documento)

2: coletor[] ← F ilteredElementCollector(documento) 3: coletor[] ← W hereElementIsN otElementT ype(coletor) 4: para cada elemento ∈ coletor faça

5: se HasM aterialQuantities(elemento) então 6: e.insere(elemento)

7: fim se

8: fim para 9: retorna e 10: fim função

A função retorna uma lista de objetos da classe Elements.

4.4.1

Coletando as Malhas

Para recuperar as malhas de um elemento selecionado, é preciso acessar a classe Ge-ometryElement, a qual representa a geometria do elemento, e a partir dela que é possível resgatar os objetos da classe GeometryInstance, que representam a instância da geometria e contem a propriedade de calcular a transformação do espaço de coordenadas.

Com base na GeometryInstance, é conseguido a lista de representação geométrica do símbolo que gera tal instância. Para cada representação é alcançado um objeto da classe, a qual é base comum para todas as primitivas geométricas, a GeometryObject. Onde é possível ter um objeto sólido 3D. Cada sólido possui uma lista de faces, e para cada face, obtém-se uma malha triangulada, transladada e rotacionada.

(47)

Algoritmo 2 Recuperar Malhas 1: função Malhas(elemento)

2: geoElemento ← Geometry(elemento)

3: geoInstancia ← GeometryInstance(geoElemento) 4: simbololGeo[] ← SymbolGeometry(geoInstancia) 5: para cada geoObjetos ∈ simbololGeo faça 6: solido ← Solid(geoObjetos)

7: transf ormacao ← T ransf orm(geoInstancia) 8: para cada f ace ∈ F aces(solid) faça

9: malha ← T riangulate(geoInstancia) 10: malha ← T ransf ormed(transf ormacao) 11: m.insere(malha)

12: fim para 13: fim para 14: retorna m 15: fim função

Após o processamento da função, é retornada uma lista de objetos da classe Mesh, a qual guarda a malha de triângulos dos elementos.

4.4.2

Coletando os Materiais

A recuperação dos materiais dos elemento da API do Revit é realizada de forma análoga ao processo de recuperar as malhas. Para cada face é recuperado o identificador (ID) do elemento do material do qual a face é composta. A partir do ID, é possível recuperar a lista de materiais do elemento selecionado.

(48)

46

Algoritmo 3 Recuperar Materiais 1: função Material(elemento)

2: geoElemento ← Geometry(elemento)

3: geoInstancia ← GeometryInstance(geoElemento) 4: simboloGeo[] ← SymbolGeometry(geoInstancia) 5: para cada geoObjeto ∈ simboloGeo faça

6: solido ← Solid(geoObjeto)

7: para cada f ace ∈ F aces(solido) faça

8: elementoId ← M aterialElementId(f ace) 9: material ← M aterial(elementoId) 10: m.insere(material) 11: fim para 12: fim para 13: retorna m 14: fim função

4.4.3

Coletando as Luzes

Para definir as luminárias que devem estar acessas na imagem renderizada, é preciso recuperar as luzes de maneira separada. Da mesma forma de recuperar os elementos, é preciso filtrar do documento aqueles que não herdem da classe ElementType. A partir desse ponto, são filtrados apenas objetos que estendem a classe FamilyInstance, a qual os objetos representam uma única instância de um tipo de família. Depois são selecionados apenas os elementos que tenham a categoria igual a OST_LightingFixtures, isto é, que sejam da categoria de equipamentos de iluminação.

(49)

Algoritmo 4 Recuperar Luzes 1: função Luzes(documento)

2: colector[] ← F ilteredElementCollector(documento) 3: colector[] ← W hereElementIsN otElementT ype(coletor) 4: colector[] ← Of Class(coletor, F amilyInstance :: typeid)

5: colector[] ← Of Category(coletor, BuiltInCategory :: OST_LightingF ixtures) 6: para cada elementos ∈ coletor faça

7: luzes.insere(elementos) 8: fim para

9: retorna luzes 10: fim função

Ao final do procedimento, é retornada uma lista de objetos da classe LightType, que contém as informações das luzes. Apesar de poder obter diversos dados, por exemplo, como a luz é distribuída e a sua forma, na classe não há informações das posições das fontes de luz. Foi investigado todo o Namespace Autodesk.Revit.DB.Lighting, mas, até o presente momento de escrita deste documento, não foram encontradas tais informações.

Sendo assim, para poder simular as luminárias, foi realizada uma heurística, a qual transforma o material “vidro” da luminária em uma material que emite a luz difusa. Desta forma, descartando as luzes pontuais e direcionais. Com exceção do sol, a qual é uma luz pontual.

4.5

Renderizador

Após obter as informações necessárias da API, são executados os cálculos para ren-derizar a imagem. Este cálculos são demostrados nas subseções seguintes.

4.5.1

Câmera

O algoritmo de Ray Tracing apresentado neste trabalho simula uma câmera em pers-pectiva. A câmera é definida pelo ponto de origem, pelo vetor de direção e pelo vetor que indica a orientação vertical da câmera. Os três parâmetros são determinados utilizando a classe ViewOrientation3D da API do Revit, onde o ponto de origem é definido pela propriedade EyePosition; o vetor de direção é atribuído com o valor de ForwardDirection; e o vetor de orientação pela propriedade UpDirection. Os argumentos de campo de visão,

(50)

48

distância focal e abertura são solicitados no formulário.

O pseudocódigo a seguir demonstra como o raio da câmera é computado. Algoritmo 5 Raio da câmera

1: função RaioCamera(u, v)

2: desf oco ← raioLente + aleatorio() 3: of f set ← u × desf oco.x + v × desf oco.y

4: pontoF inal ← cantoInf eriorEsquerdo + u × horizontal + v × vertical 5: raio ← raio(origem + of f set, pontoF inal − origem − of f set)

6: retorna raio 7: fim função

4.5.2

Background

O background da imagem é calculado baseado na hora do dia. Quando não há sol o plano de fundo possui a cor preta (rgb(0,0,0)), e durante o dia é realizado uma interpolação tanto entre os extremos verticais, quanto pela hora selecionada.

O pseudocódigo a seguir demonstra a interpolação do backgound pela hora do dia. Sendo que no amanhecer e no entardecer o canto inferior da imagem assume a cor laranja (rgb(255,127,0))2 e o canto superior a cor azul escuro (rgb(0,0,127)). Já no meio-dia solar,

onde o sol fica no ponto mais alto, o canto inferior obtém a cor branca (rgb(255,255,255)), e a parte superior a cor azul esverdiado (rgb(0,255,255)). As cores escolhidas a partir da observação do céu.

Algoritmo 6 interpolação do backgound pela hora do dia 1: função Background(AlturaSol, distanciaSol)

2: se AlturaSol > 0 então

3: inf erior ← rgb(1, 0.5 + AlturaSol 2 × distanciaSol, AlturaSol distanciaSol) 4: superior ← rgb(0, AlturaSol distanciaSol, 0.5 + AlturaSol 2 × distanciaSol) 5: retorna Background(inf erio, superior)

6: fim se

7: retorna preto 8: fim função

2RGB é a sigla do sistema de cores aditivas, que significa Vermelho, Verde e Azul. Cada cor obtida

(51)

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.

(52)

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

(53)

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

(54)

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.

(55)

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

(56)

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

(57)

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)

(58)

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.

(59)

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

Referências

Documentos relacionados

A pesquisa pode ser caracterizada como exploratória e experimental em uma primeira etapa (estudo piloto), na qual foram geradas hipóteses e um conjunto de observáveis, variáveis

De seguida, vamos adaptar a nossa demonstrac¸ ˜ao da f ´ormula de M ¨untz, partindo de outras transformadas aritm ´eticas diferentes da transformada de M ¨obius, para dedu-

•   O  material  a  seguir  consiste  de  adaptações  e  extensões  dos  originais  gentilmente  cedidos  pelo 

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

Foi apresentada, pelo Ademar, a documentação encaminhada pelo APL ao INMETRO, o qual argumentar sobre a PORTARIA Nº 398, DE 31 DE JULHO DE 2012 E SEU REGULAMENTO TÉCNICO

Neste trabalho avaliamos as respostas de duas espécies de aranhas errantes do gênero Ctenus às pistas químicas de presas e predadores e ao tipo de solo (arenoso ou

O enfermeiro, como integrante da equipe multidisciplinar em saúde, possui respaldo ético legal e técnico cientifico para atuar junto ao paciente portador de feridas, da avaliação

Entre as atividades, parte dos alunos é também conduzida a concertos entoados pela Orquestra Sinfônica de Santo André e OSESP (Orquestra Sinfônica do Estado de São