HRE war ein physikalisch basierter Echtzeit-Cluster-Renderer, der mit OpenGL erstellt wurde und auf den im Artikel „Clustered Deferred and Forward Shading“ von Ola Olsson, Markus Billeter und Ulf Assarsson beschriebenen Techniken basierte. Das Ziel dieses Projekts besteht darin, ein Testframework zu erstellen, um verzögerte und vorwärts gerichtete Grafiktechniken (daher der Hybridteil) zu demonstrieren und die Stärken von Clustered Shading zu untersuchen. Ich habe einen langen Blog-Beitrag voller cooler Animationen geschrieben, der als Einführung in effiziente Rendering-Algorithmen sowie als detaillierter Leitfaden für meine Implementierung von Clustered Shading dienen kann. Schauen Sie sich ihn also unbedingt hier an!
Dieser Algorithmus wurde aufgrund seiner zwei Hauptvorteile gegenüber herkömmlichen verzögerten/gekachelten Lösungen ausgewählt: Er ermöglicht mehr Freiheit bei der Wahl von Vorwärts- oder verzögerten Schattierungspfaden nach Wunsch und passt langfristig besser zu den modernen GPU-Leistungstrends. Es wurde bereits in einigen der schönsten Spiele der letzten Jahre erfolgreich implementiert, einige bemerkenswerte Beispiele sind: DOOM 2016, Just Cause 3 und Detroit: Become Human.
Leider wird dieses Projekt nicht mehr gepflegt. Kurz nachdem ich dies gepostet habe, wurde ich als Grafikprogrammierer bei Rockstar Games eingestellt und habe keine Zeit mehr, an einem Nebenprojekt dieser Größe zu arbeiten. Ich habe vor, damit weiterzumachen (wie auch mit meinem anderen großen Grafikprojekt SSGE), damit andere sehen können, was es gekostet hat, in der Branche Fuß zu fassen. Ich werde weiterhin jedem helfen, der Probleme damit hat oder Fragen dazu hat. Fühlen Sie sich frei, mich hier oder auf meinem Twitter zu diesem oder einem anderen GFX-Thema zu erreichen, über das Sie sprechen möchten! Vielen Dank an alle, die sich dieses Projekt angesehen haben! :D
Stabile Builds finden Sie auf der HRE-Release-Seite.
Derzeit werden nur Windows-Plattformen unterstützt.
Der erste Entwicklungszyklus begann im September 2018 und endete im Dezember 2018 mit der Einbindung von Image Based Lighting und der Veröffentlichung der ersten stabilen Version: HRE 0.01 „Aachen“. In den nächsten Monaten werde ich mich mit den im Abschnitt „Projekte“ beschriebenen Problemen befassen, beginnend mit der Behebung der verbleibenden unkritischen Fehler und dann mit einer umfassenden Neufassung des Materialsystems fortfahren. Das Folgende ist eine Liste der Engine-Funktionen, die ich in den kommenden Monaten einbinden möchte. Änderungen und dergleichen sind natürlich vorbehalten.
Ich werde am Ende jedes wichtigen Meilensteins begleitende Blogbeiträge schreiben, in denen ich die neuen Funktionen und ihre Implementierungen sowie alle Komplikationen, die ich dabei festgestellt habe, skizziere. In der Zwischenzeit ist hier der erste Beitrag, der einen Überblick über andere traditionelle Rendering-Algorithmen enthält und Argumente für Clustered Rendering darlegt.
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
In meinem vorherigen Projekt, SSGE, habe ich versucht, die Anzahl der Abhängigkeiten auf ein Minimum zu reduzieren. Diesmal hat das Pendel jedoch in die andere Richtung geschwungen und ich habe keinerlei (im Rahmen des Zumutbaren) Einschränkungen hinsichtlich der Bibliotheken vorgenommen, die ich in das Projekt einbeziehen könnte. Ich habe dies getan, weil ich mich mit dem Einbinden und Arbeiten mit externen Bibliotheken in C++ vertrauter machen wollte.
Hier ist eine Liste der derzeit im Projekt enthaltenen Bibliotheken:
Hier ist eine Liste der nicht enthaltenen Bibliotheken:
Alle enthaltenen Bibliotheken werden hier unter ihren jeweiligen Lizenzen dargestellt, die Sie über die Links oben oder im licenses.txt-Dokument im libs-Ordner finden.
Auf dieser Seite des Wikis gibt es eine umfassende indizierte Referenzliste für das Projekt, die ich mehr oder weniger aktuell halte. Allerdings greife ich immer wieder auf einen Teil davon zurück, um weiterzulesen oder wenn ich Inspiration brauche. Deshalb habe ich unten Links hinzugefügt, um sie zu teilen und ihre Großartigkeit bekannt zu machen. Schauen Sie sie sich an!
Vielen Dank an alle 3D- und Texturkünstler, die ihre Assets kostenlos nutzbar und so schön anzusehen gemacht haben. Ohne euch würde ich wahrscheinlich immer noch den ganzen verdammten Tag auf dieselbe alte, langweilige Utah-Teekanne starren!
Wenn ich Referenzen falsch bestätigt, falsch zugeordnet oder übersehen habe, erstellen Sie bitte ein neues GitHub-Problem oder senden Sie mir eine DM auf Twitter und ich werde dafür sorgen, dass das Problem sofort behoben wird.
Vielen Dank an Kostas Anagnostou und Eric Arnebäck, die sich in den letzten Monaten die Zeit genommen haben, alle meine Fragen zu beantworten. Ihre Erklärungen haben das Verständnis jedes schwierigen Themas so viel einfacher gemacht!
MIT-Lizenz
Copyright (c) 2018 Angel Ortiz
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, mit der Software ohne Einschränkung zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern und Zusammenführen , Kopien der Software zu veröffentlichen, zu verteilen, unterzulizenzieren und/oder zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD „WIE BESEHEN“ ZUR VERFÜGUNG GESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER URHEBERRECHTSINHABER HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNG, WEDER AUS EINER VERTRAGLICHEN HANDLUNG, AUS HANDLUNG ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IN ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN IN DER SOFTWARE ERGEBEN SOFTWARE.