Einige werden es vielleicht mitbekommen haben: Substrate wurde mit Unreal 5.7 zum neuen Standard-Materialsystem. Ohne jetzt großartig über Pro und Contra von Substrate sprechen zu wollen (Solltet ihr dazu einen Artikel von mir wünschen, so teilt mir dies bitte mit.), hat sich mit Substrate auch der verwendete PBR-Workflow von Metallic hin zu Specular geändert. Dadurch verändern sich auch die benötigten Texturen entsprechend. Um diese Konvertierung bestehender Materialien so angenehm wie möglich zu machen, habe ich ein kostenloses Tool namens Metal2F0 erstellt.
Etwas Hintergrundwissen
Ich habe nicht vor, in diesem Artikel wirklich tief in das Thema einzusteigen, aber zumindest auf die wesentlichen Unterschiede beider PBR-Workflows möchte ich kurz eingehen, um die Unterschiede zu verdeutlichen.
Beim Metallic-Workflow werden alle Farbinformation in der BaseColor-Texture gespeichert. Die Metallic-Map ist eine Graustufenmap und dient als Maske, um metallische und nichtmetallische Anteile zu separieren. Die metallischen Anteile der BaseColor werden für spiegelnde Reflexionen verwendet, da Metalle selbst keine farbigen Oberflächen besitzen. Die nichtmetallischen Anteile der BaseColor entsprechen der Oberflächenfarbe, in der Realität sind spiegelnde Reflexionen von Nichtmetallen nie farbig. Damit werden insgesamt 4 Farbkanäle (1x Metallic + 3x BaseColor) benötigt, um die Farbinformationen sowohl bei nichtmetallischen Oberflächen als auch bei spiegelnden Reflexionen von metallischen Oberflächen zu speichern.
Beim Specular-Workflow werden alle Farbinformationen der nichtmetallischen Oberflächen in der Diffuse-/ Albedo-Map gespeichert. Alle metallischen Bestandteile sind dabei schwarz. Alle Farbinformationen für spiegelnde Reflexionen werden in der Specular-/ F0-Map gespeichert. Da die spiegelnden Reflexionen nichtmetallischer Oberflächen in der Realität unbunt sind und das dadurch reflektierte Licht je nach Oberfläche irgendwo im einstelligen Prozentbereich liegt, sind ihre Anteile in der Specular-Map sehr dunkle Grauwerte. Damit werden insgesamt 6 Farbkanäle (3x Diffuse + 3x Specular) benötigt, um die gesamten Farbinformationen zu speichern.
Wir benötigen also einmal 4 Farbkanäle und einmal 6 Farbkanäle, um mehr oder weniger das Gleiche darzustellen. Warum also sollte man dann den Specular-Workflow verwenden, wenn er 50% mehr Farbkanäle und dementsprechend mehr Speicherplatz benötigt? Mir fallen dabei direkt 2 Argumente ein:
- Übergänge zwischen metallischen und nichtmetallischen Oberflächen, bspw. teilweise oxidierte Metalloberflächen, sehen mit dem Specular-Workflow deutlich realistischer aus.
- Im Stylized-Bereich kann die Wirkung des Art-Styles durch farbige Reflexionen bei nichtmetallischen Oberflächen nochmals verstärkt werden. Wichtig ist, dass man dabei sehr vorsichtig sein muss, um nicht zu stark gegen PBR-Grundsätze, wie die Energieerhaltung, zu verstoßen.

Ergebnisvergleich beider Workflows in UE 5.8. Links Metallic-Workflow, Rechts Specular-Workflow.
Unreals Kompatibilitätsschicht
Man kann auch mit Substrate weiterhin die bisherigen BaseColor- und Metallic-Maps verwenden. Dafür gibt es nun im Material-Editor eine Node namens Substrate Metalness-To-DiffuseAlbedo-F0, die die Konvertierung vornehmen kann. Der Nachteil dabei ist, die größere Unübersichtlichkeit ausgenommen, dass diese Konvertierung in Echtzeit zur Laufzeit durchgeführt wird. Konvertierung zur Laufzeit kostet etwas Performance zur Laufzeit.
Metal2F0
Als ich angefangen habe, mich mit Substrate zu beschäftigen, ist mir irgendwann aufgefallen, dass es sicherlich viele Teams geben müsste, die aus früheren Projekten große Bibliotheken von Materialien haben, die auf dem vorher unter Unreal üblichen Metallic-Workflow basieren. Daher dachte ich mir, ich könnte doch einfach ein kleines Tool schreiben, was die bisherigen Materialien so konvertiert, dass sie direkt mit Substrate kompatibel sind. Bei neuen Materialien, kann man dies ja direkt bei der Erstellung berücksichtigen, aber alle frühere Materialien neu zu erstellen, ist doch eher ein unrealistisch hoher Aufwand. Und so ist Metal2F0 entstanden.

GUI von Metal2F0
- Wie man in den Screenshots erkennen kann, gibt es zwei verschiedene Benutzungsmodi:
- Single
- Einzelmodus, um sich erst einmal mit dem Programm vertraut zu machen oder ein einzelnes Material zu konvertieren.
- Batch
- Massenmodus, bei dem man einen Ordner auswählt, die entsprechenden Endungen pro Texturemap konfiguriert und dann direkt den ganzen Ordner konvertieren lassen kann.
Ansonsten ist das Vorgehen eigentlich immer gleich und relativ simpel. Man wählt die BaseColor- und Metallic-Texturen aus. Da für Metallic-Texturen sowohl einzelne Maps (Graustufen) als auch Packed-Textures (RGB(A)) unterstützt werden, muss man den gewünschten Farbkanal auswählen. Anschließend definiert man die Ausgabedateien und legt noch den Specularity-Wert der nichtmetallischen Teilflächen fest. Der Standardwert von 0,04 (4%) entspricht dabei dem Standardwert von Unreal. Je nach Quelle heißt es, dass der Specularity-Wert von Nichtmetallen in der Realität entweder zwischen 0% und 8% oder aber zwischen 2% und 5% liegt.
Es ist noch wichtig zu erwähnen, dass als Formate PNG, TGA und EXR unterstützt werden.
Metal2F0 ist sowohl kostenlos als auch OpenSource und zusätzlich gibt es auch direkt ausführbare Dateien zum Download, daher könnt ihr es einfach mal ausprobieren und mir gerne auch Feedback dazu geben.
Online- vs Offline-Konvertierung
Ob man nun seine Texturen zur Laufzeit durch Unreals bereitgestellte Node konvertieren lässt oder es aber vorher tut, ist eine Entscheidung, die getroffen werden muss. Man sollte sich überlegen, ob im Projekt zur Laufzeit ausreichend Puffer (Rechenzyklen + VRAM) für die Extraberechnungen durch die shaderinterne Konvertierung zur Verfügung steht oder ob der durch die vorherige Konvertierung etwas höhere Speicherverbrauch auf der Festplatte / SSD weniger ins Gewicht fällt.

