Como inspiração para a imagem final, buscou-se uma cena que abordasse todos os materiais desenvolvidos durante a disciplina de Phisically Based Rendering. Para isso, pensou-se em uma sala de jantar, na qual é possível retratar objetos variados de diversos tipos implementados. Para começar, buscou-se uma malha de uma mesa com cadeiras na qual quatro pratos … Continue lendo Cena do Projeto Final
Compressão Gamma
Para ser um legítimo path tracer, há de se fazer um processo na imagem final chamado compressão gamma. Isso se dá devido à necessidade de se compensar a correção gamma. Apesar de ter um conceito embasado em fenômenos da física e de adaptações ao ser humano, a implementação no path tracer é bastante simples. Para … Continue lendo Compressão Gamma
Novo Material: Metal
Seguindo o desenvolvimento do path tracer, a implementação de um novo material é essencial para a correta representação deste numa cena mais realista. Portanto, como o metal pode ser descrito com uma simples BRDF, escolhemo-no como próximo a ser adicionado. Para a construção dessa nova classe que herda de Material, será preciso explicar como a … Continue lendo Novo Material: Metal
Estrutura de Aceleração
Com o cenário atual do nosso path tracer, para cada raio é feita a interseção com todas as primitivas, o que demanda muito tempo de processamento, tornando inviável o carregamento de malhas com muitos triângulos. Para solucionar o problema, há mecanismos de aceleração que limitam os testes de primitivas. Dentre as várias formas de otimizar … Continue lendo Estrutura de Aceleração
Novos Materiais: Espelho e Vidro
Agora que se já otimizou o tempo de renderização do nosso path tracer, o passo a se seguir é a implementação de novos materiais. Começaremos com o espelho, cujo comportamento é de fácil entendimento. O espelho, por ter um comportamento muito específico, foi escolhido para compor uma nova classe que herda da classe abstrata Material. … Continue lendo Novos Materiais: Espelho e Vidro
Otimização com Múltiplas Threads
Após a implementação do Path Tracer, foi detectada a necessidade de diminuir o crescente tempo de renderização. Para se ter uma ideia, para gerar a Figura 1 foram necessárias aproximadamente 26 horas de processamento usando as configurações mencionadas no post anterior. Tendo isso em vista, a primeira otimização a ser feita será o uso de … Continue lendo Otimização com Múltiplas Threads
Desenvolvimento do Pathtracer
Ainda no final do desenvolvimento do Ray Tracer, implementamos a renderização usando mais de um raio por pixel, sendo estes distribuídos por toda a sua área. A distribuição se deu aleatoriamente para que as bordas de cada forma (onde aconteciam transições de cores) fossem suavizadas, gerando uma imagem com uma melhor qualidade. Pode-se visualizar, como … Continue lendo Desenvolvimento do Pathtracer
Implantação de cor e Carregamento de objetos pela Biblioteca Assimp
Para se implementar a cor de uma primitiva, beneficiou-se da facilidade da programação orientada a objetos, mais especificamente o conceito de herança. Com ela, foi possível adicionar o atributo cor apenas na classe pai abstrata (Primitive). Para facilitar o controle de cores, foi usado o padrão RGB, no qual é informado os valores que variam entre … Continue lendo Implantação de cor e Carregamento de objetos pela Biblioteca Assimp
Implementação da Câmera Perspectiva Pinhole
Usando como base a câmera ortográfica já implementada, criou-se a câmera Pinhole, herdando da classe abstrata Camera e acrescentou-se o parâmetro de distância. Isso se faz necessário, já que, para se obter a imagem perspectiva, a tela se desacopla da câmera. Esse novo parâmetro dita a distância entre essas duas entidades. Escolheu-se tomar o canto … Continue lendo Implementação da Câmera Perspectiva Pinhole
Construção de triângulos no Ray Tracer
Tomando como ponto de partida do desenvolvimento na cadeira de PBR, aproveitou-se o Ray Tracer básico implementado pelo professor Christian Pagot, o qual está disponível neste link. A partir dele, busca-se a consecutiva incrementação e refinamento do software. Como primeiro desafio, construiu-se uma classe que possibilitou a implementação de triângulos. Partiu-se da classe já existente responsável … Continue lendo Construção de triângulos no Ray Tracer