Blender-Handbuch: Open Shading Language
Diese Seite bezieht sich auf Blender v2.66 |
Die Open Shading Language ist eine C ähnliche Programmiersprache, mit welcher Sie Shader (in Blender nur mit Cycles) programmieren können. OSL wurde von Sony Pictures Imageworks entwickelt und ist seit 2010 frei verfügbar. OSL wird unter anderem bei Disney genutzt.
OSL Aktivieren
[Bearbeiten]Um OSl zu aktiveren, wecheln Sie zu Cycles und setzen einen Haken in den Rendereinstellungen unter Open Shading Language. Shader werden im Text Editor programmiert. es lohnt sich deshalb mit 3 Ansichten (3D View(Rendered);Text Editor; Node Editor) arbeiten.
Blackbox
[Bearbeiten]Um Shader zu verstehen, stellen wir uns einen als Blackbox vor.
Shader basieren auf dem EVA-Prinzip.
Ein einfaches Beispiel
[Bearbeiten]#include "stdosl.h" shader bsp_test( color Col_in = color(0.8, 0.8, 0.8), output color Col_out = color(0.8)) { Col_out = Col_in; }
Kopieren Sie diesen Text in den Text Editor von Blender. Bauen Sie anschließend das Node-setup aus Abbildung 2 nach. Beachten Sie das der Script-Baustein erst nach der Auswahl des Textes Anschlüsse bekommt. Wenn der Quelltext des Shaders geändert wurde kann man die Änderung erst sehen wenn im Node Editor im Script Baustein der Text aktualisiert wurde.
Im Kern besteht ein OSL-Shader aus folgenden Zeilen:
/* ABC */ optionale Header shader Name ( optionale Parameter ) { Anweisungen // optionale Kommentare }
Was ist aber jetzt was???
Header erkennen Sie an der Dateiendung '.h'. Diese Dateien enthalten Deklarationen für Variablen und Funktionen.
/* */ und // sind Kommentare. Kommentare sind nützlich (oder wie verstehen Sie komplexe Programme)
OSL als Programmiersprache
[Bearbeiten]Variablen
[Bearbeiten]Woher weiß Blender das Col_in eine Farbe ist? Col_in ist eine Variabel und vergleichbar mit Variablen aus dem Mathematikunterricht. Aber wenn ein Computer rechnet muss man diesem mitteilen welcher Typ vorliegt, da ein PC generell strohdoof ist.
int | Integer; Ganzzahl | 32 Bit (-32.768 bis 32.767) |
float | Fließkommazahl | 32 Bit (1,2E-38 bis 3,4E+38) |
point | Punkt | |
vektor | Vektor | |
normal | Normale | |
color | Farbe | |
matrix | 4*4 Matrix | |
string | Zeichenkette | |
void | Funktion |
Allerdings gibt es noch besondereheiten: Sonderfall: Color
- color(0.8) entspricht color(0.8,0.8,0.8)
- Farbräume:
- Wenn kein Farbraum angegeben wird RGB benutzt.
rgb | Rot,Grün,Blau; Array aus 3 Fließkommazahlen |
hsv | H (Hue; Farbwinkel), S (Saturation; Farbsättigung), V (Value; Helligkeitswert) |
hsl | H (Hue; Farbwinkel), S (Saturation; Farbsättigung), L (Luminance; Farbhelligkeit) |
YIQ | NTSC Standard |
xyz | CIE XYZ Koordinaten |
xyY | CIE XYY Koordinaten |
Quellen und Literatur
[Bearbeiten]Referenz (engl.):[1]