18. März 2025

Modularisierung des Standard Effect

Die neueste Evergine-Release bringt mit dem neuen Asset Library Effect einen bedeutenden Fortschritt in der Shader-Architektur. Dieses neuartige Asset wurde speziell entwickelt, um die Lesbarkeit des Codes zu verbessern und eine umfassende Wiederverwendung über mehrere Projekte hinweg zu ermöglichen. Damit begegnet es typischen Herausforderungen der Shader-Entwicklung wie redundanten Mustern und Hilfsfunktionen.

Der wichtigste integrierte Shader in Evergine ist der Standard Effect. Dieser vielseitige Shader wird standardmäßig verwendet, sobald ein 3D-Modell in eine Evergine-Szene geladen wird. Der Standard Effect ist für zahlreiche Konfigurationen ausgelegt und fungiert als „Uber Shader“, der über 18 Millionen mögliche Kombinationen für unterschiedlichste Materialeffekte bietet. Bisher war dieser Shader monolithisch aufgebaut und umfasste über zweitausend Codezeilen, was Wartung und Anpassung erheblich erschwerte.

Um diese Herausforderungen zu bewältigen, hat das Evergine-Team den Standard Effect umfassend umstrukturiert und in modulare Bibliotheken aufgeteilt. Diese Modularisierung verbessert Wartbarkeit, Übersichtlichkeit und Wiederverwendbarkeit erheblich. Der neu modularisierte Standard Effect besteht aus den folgenden Bibliotheken:

  • Structures: Definiert grundlegende Shader-Strukturen, die im gesamten StandardEffect verwendet werden (z. B. LightProperties).
  • Common: Enthält allgemeine Engine-Direktiven und häufig genutzte Hilfsmethoden (z. B. Gamma-Linear-Umrechnungen).
  • Material: Enthält grundlegende Methoden zur Erzeugung von Materialien für Physically Based Rendering (PBR).
  • Lighting: Enthält umfassende Methoden zur Berechnung verschiedener Beleuchtungsmodelle (Directional, Point, Spot und Area Lights).
  • Shadow: Bietet spezielle Methoden zur Berechnung des Schattenanteils verschiedener Lichtquellen.

Der aktualisierte Standard Effect referenziert nun direkt diese einzelnen Bibliotheken. Das vereinfacht den Shader-Code erheblich und fördert eine effiziente Entwicklung.

Ein entscheidender Aspekt dieser Modularisierung ist, dass sie für Benutzer transparent ist. Entwickler können den Standard Effect in ihren bestehenden Projekten weiterhin nahtlos verwenden, ohne funktionale Änderungen zu bemerken. Die neu organisierte Bibliotheksstruktur ermöglicht es jedoch, mühelos eigene Shader zu erstellen, die auf diesen standardisierten Bibliotheken aufbauen und sich einfach in die ausgefeilten Beleuchtungs- und Schattensysteme von Evergine integrieren.

Darüber hinaus entwickelt das Evergine-Team derzeit eine zusätzliche, spezialisierte Bibliothek mit Beleuchtungsmodellen, um Entwicklern noch mehr Möglichkeiten zu bieten. Diese ergänzende Bibliothek enthält weit verbreitete Beleuchtungsalgorithmen und ist gezielt darauf ausgelegt, die Integration eigener Shader in komplexe Beleuchtungsumgebungen zu vereinfachen. Da die ursprüngliche Lighting-Bibliothek des Standard Effect zahlreiche Parameter erfordert, bietet diese spezielle Bibliothek einfachere Integrationswege und klarere Implementierungsansätze.

Derzeit stellt diese ergänzende Bibliothek folgende Beleuchtungsmodelle bereit:

  • Phong
  • Blinn-Phong
  • Cook-Torrance
  • Oren-Nayar

Alle diese erweiterten modularen Bibliotheken, einschließlich der neu entwickelten Bibliothek mit Beleuchtungsmodellen, sind im Kernpaket Evergine.Core enthalten und stehen damit in jedem Standard-Evergine-Projekt zur Verfügung.

Eigene Shader mit Unterstützung für Beleuchtung und Schatten erstellen

Mit den neuen modularen Shader-Bibliotheken wird die Entwicklung eigener Shader mit fortschrittlicher Beleuchtung und Schatten deutlich einfacher. Um einen eigenen Shader mit diesen Funktionen zu erstellen, gehen Sie wie folgt vor:

Grundlegende Bibliotheken einbinden

Binden Sie die Bibliotheken Lighting Models und Shadow in Ihren Shader ein.

Schatten- und Beleuchtungsressourcen hinzufügen

Fügen Sie Ihrem Resource Layout die erforderlichen Ressourcen hinzu:

ShadowMap-Pass implementieren

Fügen Sie einen eigenen Pass hinzu, um die Geometrie in die Shadow-Map-Textur zu rendern:

Surface- und Pixel-Strukturen definieren

Befüllen Sie die Surface- und Pixel-Strukturen mithilfe der Methoden der Shadow-Bibliothek:

Beleuchtungsmodell auswählen und anwenden

Wählen Sie eines der verfügbaren Beleuchtungsmodelle, um die endgültige Farbe zu berechnen:

Schattenterme berechnen

Wenden Sie die Schattenberechnungen mithilfe der Shadow-Bibliothek an:

Das folgende Beispiel zeigt das Endergebnis:

Die vollständige Implementierung des eigenen Shaders finden Sie [hier].

 

Das Evergine-Team freut sich sehr über Ihr Feedback zum neuen modularen Shader-System und ist gespannt auf die kreativen und innovativen Shader, die Sie mit diesen erweiterten Möglichkeiten entwickeln werden.

Jorge Canton
Autor
Jorge Cantón
Plain Concepts Research