Open Shading Language (OSL)

Open Shading Language (OSL) ermöglicht die Verwendung einer neuen OSL-Map oder einer ganzen Kategorie von verschiedenen OSL-Maps, und Sie können mit den Entwicklungswerkzeugen zusätzlich eigene OSL-Maps erstellen, die in jedem Renderer eingesetzt werden können.

Open Shading Language (OSL) ist eine Open-Source-Shading-Sprache, die relativ leicht verständlich ist. Sie kann auf viele unterschiedliche Arten eingesetzt werden. Sie können die OSL-Map nutzen, eine in 3ds Max integrierte Ausführungsumgebung für OSL-Shader, die wie jede andere integrierte 3ds Max-Map funktioniert. Es steht Ihnen auch eine Kategorie mit im Voraus geladenen OSL-Maps zur Verfügung. Darüber hinaus können Sie auch alle OSL-Maps einsetzen, die Sie aus dem Internet heruntergeladen haben. Schließlich können Sie mit unseren Entwicklungswerkzeugen auch selbst Shader und Maps erstellen. Dabei handelt es sich um eine deutlich einfachere Methode zum Erstellen benutzerdefinierter Maps als die Entwicklung entsprechender Funktionalitäten in Form einer C++-Map für 3ds Max.

OSL funktioniert in allen Renderern, die auch die gewöhnliche 3ds Max-Shading-API (Scanline, vRray, Corona usw.) unterstützen. Sie funktioniert auch außerhalb der Renderer, und zwar überall in 3ds Max, wo gewöhnliche Maps angefordert werden, etwa im Modifikator 3D-Verschiebung. Sie funktioniert auch in Renderern mit nativer Unterstützung für OSL, z. B. Arnold. In diesen Fällen wird die Ausführungsumgebung in der OSL-Map nicht verwendet; stattdessen werden der OSL-Quellcode, die Parameterwerte und die Shader-Bindungen an den Renderer gesendet, der wiederum den OSL-Code ausführt. Es erscheinen praktisch täglich neue Renderer mit nativer OSL-Unterstützung.

OSL verwendet "Just-in-time"-Kompilierung und -Optimierung der gesamten Schattierungshierarchie, solange alle darin verwendeten Shader OSL-Shader sind. Sie können OSL-Shader mit gewöhnlichen Shadern kombinieren, aber dies wirkt sich nachteilig auf die Optimierung aus.

Anmerkung: Die Computergrafikterminologie ist nicht immer ganz präzise: Begriffe wie Shader, Maps, Textur, prozedural und Material können in unterschiedlichen Kontexten, Renderern und Anwendungen unterschiedliche Dinge bezeichnen. Da OSL in 3ds Max keine Closures unterstützt, erscheinen sie als Maps. Da OSL jedoch eine Shading-Sprache ist, werden die Begriffe Shader und Maps im OSL-Kontext synonym verwendet.
Anmerkung: Das originale Render-API bot keine Unterstützung für mehrere Ausgaben. Diese wurde erst als Erweiterung zu einem späteren Zeitpunkt eingeführt. Aus diesem Grund können die meisten Materialien und Maps nicht direkt mit Maps mit mehreren Ausgaben verbunden werden. Um dieses Problem zu beheben, wurde der Ausgabeselektor eingeführt. Dieser wird automatisch zwischen ein Element, das mehrere Ausgaben unterstützt, und ein Element, das mit mehreren Ausgaben nicht umzugehen weiß, geschaltet. Der Ausgabeselektor ist im erweiterten Material-Editor automatisch ausgeblendet, wo die Verbindung ganz wie eine gewöhnliche Verbindung aussieht (mit Ausnahme des roten Drahts statt eines blauen). Diese Option kann in den Einstellungen im Menü Optionen des erweiterten Material-Editors oder über die Option Einzelmap-Ausgabeauswahlen ausblenden aktiviert bzw. deaktiviert werden.

Einschränkungen bei OSL

Die OSL-Map weist in 3ds Max einige Einschränkungen auf.

Einschränkung Beschreibung
Unterstützt nur Maps, keine Materialien

Ein in OSL geschriebener Shader kann mehrere Ausgaben haben, die unterschiedliche Datentypen zurückgeben: Farben, Gleitkommawerte, Ganzzahlen, Zeichenfolgen usw. Diese werden alle unterstützt.

OSL unterstützt allerdings auch einen speziellen Typ namens Closure. Stellen Sie sich Closures als Materialien vor. Diese werden nicht unterstützt. In der Praxis bedeutet dies, dass die OSL-Map nur zur Erstellung von prozeduralen Texturen (Maps) und nicht zur Erstellung von Materialien verwendet werden kann.

Die empfohlene Vorgehensweise ist daher, die prozeduralen Textur-Maps in OSL anzulegen, die Ausgaben jedoch mit einem standardisierten, ausreichend definierten und Renderer-unabhängigen Material zu verbinden, beispielsweise mit dem physikalischen Material.

Wenn ein OSL-Shader, den Sie aus dem Internet heruntergeladen haben, scheinbar nichts bewirkt oder keine Ausgaben aufzuweisen scheint, kann es sich um ein OSL-Material handeln.

Unterstützt nur einfache Datentypen

Die OSL-Maps in 3ds Max unterstützen nur einfache Datentypen: Farben, Vektoren, Gleitkommazahlen, Ganzzahlen und Zeichenfolgen. Arrays und Structs als Eingaben werden nicht unterstützt.

In der Praxis ist dies aber kaum ein Problem, da nur sehr wenige OSL-Shader tatsächlich mit Arrays oder Structs als Eingaben arbeiten. Die Einschränkung bezieht sich nur auf die Parameter; Arrays und Structs innerhalb des OSL-Codes funktionieren einwandfrei.

Keine #include-Anweisungen

Die Anweisung #include ist im OSL-Code in 3ds Max nicht zulässig. Wenn Ihr OSL-Code die Anweisung #include <stdosl.h> enthält, ist diese überflüssig und kann entfernt werden. Die Datei wird stdosl.h wird vom Kompilierer ohnehin mit aufgenommen.

Unterstützung für Ansichtsfenster

In vielen OSL-Maps wird nunmehr der zugehörige Shader für die Anzeige des Ansichtsfensters verwendet, was zu einer höheren Leistung und einer erheblichen Verbesserung der visuellen Darstellung führt. Führen Sie das Ansichtsfenster dazu im Modus Realistisch mit Maps aus. OSL-Maps, für die der Shader verwendet wird, weisen einen Hinweis wie Ansichtsfenster: Shader verwendet oberhalb ihrer Parameter im Material-Editor auf. OSL-Maps, in denen weiterhin das Einbacken Anwendung findet, weisen hingegen einen Hinweis wie Ansichtsfenster: eingebackene Textur verwendet auf.

Beachten Sie, dass die folgenden OSL-Shader derzeit weiterhin eingebackene Texturen verwenden:

UVW

Stamm

Szene

Werte

Anmerkung: Diese Verbesserung am Ansichtsfenster wird von Arnold-Material ebenfalls nicht unterstützt, da es stets eingebackene Texturen verwendet.