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.

 
Aufbau eines OSL-Shaders in Blender

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]