HRE era un renderizador agrupado en tiempo real, basado físicamente, construido con OpenGL y basado en las técnicas descritas en el artículo Clustered Deferred and Forward Shading de Ola Olsson, Markus Billeter y Ulf Assarsson. El objetivo de este proyecto es crear un marco de prueba para mostrar técnicas de gráficos diferidos y directos (de ahí la parte híbrida) y examinar los puntos fuertes del sombreado agrupado. Escribí una publicación de blog extensa llena de animaciones geniales que pueden servir como una introducción a algoritmos de renderizado eficientes, así como una guía detallada de mi implementación de Clustered Shading, ¡así que asegúrate de consultarla aquí!
Este algoritmo fue seleccionado por sus dos principales beneficios sobre las soluciones tradicionales diferidas/en mosaico: permite una mayor libertad para elegir rutas de sombreado directas o diferidas según se desee y se adapta mejor a largo plazo a las tendencias modernas de rendimiento de GPU. Ya se ha implementado con éxito en algunos de los juegos más atractivos de los últimos años, siendo algunos ejemplos notables: DOOM 2016, Just Cause 3 y Detroit: Become Human.
Lamentablemente este proyecto ya no se mantiene. Me contrataron para trabajar en Rockstar Games como programador de gráficos poco después de publicar esto y ya no tengo tiempo para trabajar en un proyecto paralelo de este tamaño. Planeo mantenerlo así (así como mi otro proyecto gráfico importante, SSGE) para que otros puedan ver lo que me costó entrar en la industria. Seguiré ayudando a cualquiera que tenga algún problema con él o tenga alguna pregunta al respecto. ¡No dudes en comunicarte conmigo aquí o en mi Twitter sobre este o cualquier otro tema de GFX del que quieras hablar! ¡Gracias a todos los que revisaron este proyecto! :D
Las compilaciones estables se pueden encontrar en la página de versiones de HRE.
Actualmente sólo se admiten plataformas Windows.
El primer ciclo de desarrollo comenzó en septiembre de 2018 y concluyó en diciembre de 2018 con la inclusión de Image Based Lighting y el lanzamiento de la primera versión estable: HRE 0.01 "Aachen". Durante los próximos meses abordaré los problemas descritos en la sección Proyectos, comenzando con correcciones para los errores no críticos restantes y luego pasando a una reescritura importante del sistema de materiales. La siguiente es una lista de las características del motor que pretendo incluir en los próximos meses; obviamente está sujeta a cambios y todo eso.
Escribiré publicaciones de blog adjuntas al final de cada hito importante, describiendo las nuevas características y sus implementaciones y cualquier complicación que encontré en el camino. Mientras tanto, aquí está la primera publicación que contiene una descripción general de otros algoritmos de renderizado tradicionales y desarrolla el caso para el renderizado en clústeres.
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
En mi proyecto anterior, SSGE, hice un esfuerzo por reducir la cantidad de dependencias al mínimo. Esta vez, sin embargo, el péndulo ha oscilado en la otra dirección y no he puesto restricción alguna (dentro de lo razonable) en cuanto a qué bibliotecas podría incluir en el proyecto. Hice esto porque quería sentirme más cómodo con el proceso de incluir y trabajar con bibliotecas externas en C++.
Aquí hay una lista de las bibliotecas incluidas actualmente en el proyecto:
Aquí hay una lista de las bibliotecas no incluidas:
Todas las bibliotecas incluidas están representadas aquí bajo sus respectivas licencias, que se pueden encontrar en los enlaces anteriores o en el documento licenses.txt en la carpeta libs.
Hay una lista indexada completa de referencias para el proyecto que mantengo más o menos actualizada en esta página de la wiki. Sin embargo, vuelvo constantemente a un subconjunto de ellos para leer más o cuando necesito inspiración, por lo que agregué enlaces a continuación para compartirlos y difundir su genialidad. ¡Échales un vistazo!
Gracias a todos los artistas de texturas y 3D que han hecho que sus recursos sean de uso gratuito y tan hermosos a la vista. ¡Si no fuera por ustedes, probablemente todavía estaría mirando la misma vieja y aburrida tetera de Utah todo el maldito día!
Si reconocí mal, atribuí mal o me perdí alguna referencia, cree un nuevo problema de GitHub o envíeme un DM en Twitter y me aseguraré de solucionarlo de inmediato.
Un saludo a Kostas Anagnostou y Eric Arnebäck por tomarse el tiempo para responder todas mis preguntas durante los últimos meses. ¡Sus explicaciones hicieron que comprender cada tema desalentador fuera mucho más fácil!
Licencia MIT
Copyright (c) 2018 Ángel Ortiz
Por el presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión. , publicar, distribuir, sublicenciar y/o vender copias del Software, y permitir que las personas a quienes se les proporciona el Software lo hagan, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O DE OTRA MANERA, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIOS EN EL SOFTWARE.