HRE era um renderizador clusterizado em tempo real, baseado fisicamente, construído com OpenGL e baseado nas técnicas descritas no artigo Clustered Deferred and Forward shading de Ola Olsson, Markus Billeter e Ulf Assarsson. O objetivo deste projeto é construir uma estrutura de teste para mostrar técnicas gráficas diferidas e avançadas (daí a parte híbrida) e examinar os pontos fortes do sombreamento clusterizado. Escrevi uma longa postagem no blog cheia de animações interessantes que podem servir como uma introdução a algoritmos de renderização eficientes, bem como um guia detalhado da minha implementação de Clustered Shading, então não deixe de conferir aqui!
Este algoritmo foi selecionado por seus dois principais benefícios em relação às soluções tradicionais diferidas/ladrilhadas: ele permite mais liberdade para escolher caminhos de sombreamento progressivos ou diferidos conforme desejado e é mais adequado a longo prazo para as tendências modernas de desempenho da GPU. Já foi implementado com sucesso em alguns dos jogos mais bonitos dos últimos anos, com alguns exemplos notáveis sendo: DOOM 2016, Just Cause 3 e Detroit: Become Human.
Infelizmente este projeto não é mais mantido. Fui contratado para trabalhar na Rockstar Games como programador gráfico logo após postar isso e não tenho mais tempo para trabalhar em um projeto paralelo desse tamanho. Pretendo continuar assim (assim como meu outro grande projeto gráfico SSGE) para que outros possam ver o que foi necessário para entrar na indústria. Ainda estarei ajudando qualquer pessoa que tenha algum problema ou dúvida sobre ele. Sinta-se à vontade para entrar em contato comigo aqui ou no meu twitter sobre este ou qualquer outro tópico da GFX que você gostaria de conversar! Obrigado a todos que conferiram esse projeto! :D
Compilações estáveis podem ser encontradas na página de lançamentos do HRE.
Atualmente apenas as plataformas Windows são suportadas.
O primeiro ciclo de desenvolvimento começou em setembro de 2018 e terminou em dezembro de 2018 com a inclusão da Image Based Lighting e o lançamento da primeira versão estável: HRE 0.01 "Aachen". Nos próximos meses, abordarei os problemas descritos na seção Projetos, começando com correções para os bugs não críticos restantes e depois passando para uma grande reescrita do sistema de materiais. A seguir está uma lista dos recursos do mecanismo que pretendo incluir nos próximos meses. Obviamente, está sujeito a alterações e tudo mais.
Escreverei postagens de blog no final de cada marco importante, descrevendo os novos recursos e suas implementações e quaisquer complicações que encontrei ao longo do caminho. Enquanto isso, aqui está a primeira postagem que contém uma visão geral de outros algoritmos de renderização tradicionais e defende a renderização em cluster.
Hybrid Rendering Engine
| -- assets
| | -- models # Meshes and textures
| | -- scenes # Scene description files in JSON format
| | -- shaders
| | | -- computeShaders # Compute shaders for clustered forward
| | | -- OldShaders # Shaders not currently in use
| | ` -- currentShaders # Shaders for the current rendering pipeline
| ` -- skyboxes # Skyboxes in either cubemap or equirectangular map form
| -- build # CMake compile
| -- include # Project header files
| -- libs # Check dependencies section for descriptions & links
| | -- ASSIMP
| | -- Dear imgui
| | -- Glad
| | -- Json c++
| | -- GLI
| | -- GLM
| | -- stb_image
| ` -- SDL2
| -- modules # CMake lib setup scripts
|-- src # C++ implementation files
` -- CMakeLists.txt # CMake build script
No meu projeto anterior, SSGE, fiz um esforço para reduzir ao mínimo a quantidade de dependências. Desta vez, porém, o pêndulo oscilou para o outro lado e não fiz nenhuma restrição (dentro do razoável) quanto a quais bibliotecas eu poderia incluir no projeto. Fiz isso porque queria ficar mais confortável com o processo de inclusão e trabalho com bibliotecas externas em C++.
Aqui está uma lista das bibliotecas atualmente incluídas no projeto:
Aqui está uma lista das bibliotecas não incluídas:
Todas as bibliotecas incluídas são representadas aqui sob suas respectivas licenças, que podem ser encontradas nos links acima ou no documento Licenses.txt na pasta libs.
Há uma lista abrangente de referências indexadas para o projeto que mantenho mais ou menos atualizada nesta página do wiki. No entanto, volto constantemente a um subconjunto deles para leitura adicional ou quando preciso de inspiração, por isso adicionei links abaixo para compartilhá-los e espalhar a palavra sobre sua grandiosidade. Confira!
Obrigado a todos os artistas 3D e de texturas que tornaram seus ativos de uso gratuito e tão bonitos de se ver. Se não fosse por vocês, eu provavelmente ainda estaria olhando para o mesmo velho e chato bule de chá de Utah o dia todo!
Se eu reconheci, atribuí incorretamente ou perdi alguma referência, por favor, crie um novo problema no GitHub ou envie-me um DM no Twitter e eu irei corrigi-lo imediatamente.
Parabéns a Kostas Anagnostou e Eric Arnebäck por dedicarem seu tempo para responder a todas as minhas perguntas nos últimos meses. Suas explicações tornaram a compreensão de cada tópico assustador muito mais fácil!
Licença MIT
Direitos autorais (c) 2018 Angel Ortiz
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para negociar o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar , publicar, distribuir, sublicenciar e/ou vender cópias do Software e permitir que as pessoas a quem o Software seja fornecido o façam, sujeito às seguintes condições:
O aviso de direitos autorais acima e este aviso de permissão serão incluídos em todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM NENHUM CASO OS AUTORES OU DETENTORES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.