Informações Principais
     Resumo
     Abstract
     Introdução
     Conclusão
     Download
  
  
  
 
Conclusão
 
 
Acadêmico(a): Daniel Streck
Título: Renderizador 3D para aplicações gráficas utilizando Vulkan
 
Conclusão:
A proposta do trabalho era implementar uma biblioteca de renderização 3D utilizando as APIs Vulkan e OpenGL e realizar uma comparação estatística de performance entre as duas, tal objetivo foi alcançado. Originalmente foram propostos dois requisitos funcionais a mais (implementar as técnicas de occlusion culling e multi-threaded command submission) do que foram atendidos, porém, ficou claro durante o desenvolvimento do trabalho que devido à complexidade da API Vulkan, tais requisitos estavam fora do escopo para realização deste primeiro estudo exploratório da API. Nota-se que maior ênfase foi colocada na parte de implementação utilizando a API Vulkan, pois um dos objetivos do trabalho era realizar um estudo exploratório da mesma devido à natureza recente do objeto de estudo. Além disso, durante o desenvolvimento do trabalho preocupou-se em deixar as interfaces das implementações com as duas APIs o mais similar possível, para conseguir gerar dados estatísticos válidos para comparação. Através das cenas de teste desenvolvidas, foi possível verificar que a versão da biblioteca com Vulkan obteve um melhor desempenho em relação a implementação com OpenGL. Nota-se que o desenvolvimento utilizando a API Vulkan apresentou grande dificuldade para compreensão de seus vários objetos de etapas. A natureza da API é muito explicita, e ao contrário do OpenGL, cada estágio do pipeline da GPU precisa ser explicitamente inicializado e a forma que o mesmo será utilizado precisa ser explicitamente definida antes da execução do processo de renderização. Portanto além de ser necessário possuir uma boa compreensão dos elementos que compõe a API, faz-se necessário possuir conhecimento avançado em computação gráfica e de arquitetura de placas de vídeo modernas para utilização da API Vulkan. Outra dificuldade apresentada foi com as dependências circulares em C++, onde duas unidades de compilação precisam referenciar uma a outra. Por exemplo, em um caso em que duas classes arbitrárias possuem referência uma a outra, e que se faça necessário incluir o header de uma classe A antes de uma classe B e o header da classe B antes de A. Tal tarefa prova-se temporalmente impossível. Para resolver tal problema utilizou-se da técnica de forward declaration, na qual se declara a classe necessária antes da classe na qual ela será referenciada porém sem a sua definição, a qual será inferida pelo compilador posteriormente.