Eigene Shader
Anleitungen, wie Du eigene Shader in Wonderland Engine schreiben kannst.
Vertex vs Fragment Shaders
In Wonderland Engine bieten wir derzeit APIs zum Schreiben von eigenen Fragment-Shadern an.
Material Struct
Die Material-Struct definiert die Materialeigenschaften, die als Eingaben für Deinen Shader verwendet werden und für die Generierung der UI.
Diese Struct-Definition ermöglicht es uns, Materialeingaben effizient zu packen und Entpackungscode automatisch im {{ decoder }}
Placeholder Deines Shaders zu erzeugen.
Ein Beispiel für eine Material-Struct könnte so aussehen:
Property-Typen
Die folgenden Eigenschaftstypen werden in Kombination mit den Präzisionsspezifikatoren lowp
und mediump
unterstützt:
float
,uint
,int
: Skalare Wertevec2
,vec3
,vec4
: Gleitkomma-Vektorenivec2
,ivec3
,ivec4
: Ganzzahlen-Vektoren
Präzision
In Wonderland Engine resultiert lowp
immer in einem 8-Bit-pro-Komponente-encodierten Typ, mediump
in einem 16-Bit-encodierten Typ (z. B. ein Halbfloater) und highp
, wo unterstützt, in einem 32-Bit-encodierten Typ.
Suffixe
Die folgenden Suffixe haben eine spezielle Bedeutung:
*Color
: Wird einen Farbwähler generieren. Verwendelowp
für LDR-Farben.*Texture
: Wird ein Texturressource-Dropdown generieren. Immermediump
verwenden.
Speicher-Alignment
Aufgrund der Art und Weise, wie das Materialpacking in Wonderland Engine funktioniert, benötigen die meisten Vektortypen eine Ausrichtung auf 32 Bit. Siehe Präzision, um zu erfahren, wie Du Bits pro Komponente zählst.
Präprozessorsymbole
Um Teile eines Shaders für die Leistungsfähigkeit ausblenden zu können, haben wir eine erweiterte Präprozessor-Implementierung.
Funktionen
Du kannst “Feature-Symbole” in Shadern definieren, um Teile Deines Shaders ein- und auszuschalten:
FEATURE_<name>
wird verwendet, um ein Feature namens <name>
zu definieren. Diese werden in den Views > Resources > Pipelines
Einstellungen in der “Features”-Liste angezeigt. Wenn ein Feature aktiviert ist, wird ein Symbol definiert, das Deinem Featurename entspricht, z. B. ALPHA_MASKED
in obigem Beispiel (nicht FEATURE_ALPHA_MASKED
).
Fragment-Eingaben
Symbole, die mit USE_<input>
beginnen, werden verwendet, um Shader-Eingaben zu aktivieren. Du hast folgende Optionen:
Symbol | Typ | Name |
---|---|---|
USE_POSITION_WORLD | highp vec3 | fragPositionWorld |
USE_POSITION_VIEW | highp vec3 | fragPositionView |
USE_TEXTURE_COORDS | highp vec2 | fragTextureCoords |
USE_TEXTURE_COORDS_1 | highp vec2 | fragTextureCoords1 |
USE_COLOR | mediump vec4 | fragColor |
USE_TANGENT | mediump vec4 | fragTangent |
USE_OBJECT_ID | mediump uint | fragObjectId |
USE_MATERIAL_ID | mediump uint | fragMaterialId |
USE_NORMAL | mediump vec3 | fragNormal |
USE_BARYCENTRIC | mediump vec3 | fragBarycentric |
Includes
Wonderland Engine kommt mit einem GLSL-Shader-Include-System. Bitte sieh Dir bestehende Shader an, um zu erfahren, welche Includes üblicherweise benötigt werden.
Uniforms
Einige spezielle Uniforms, die immer verfügbar sind:
Uniform | Typ | Beschreibung |
---|---|---|
viewIndex | uint | Index der derzeit gerenderten Ansicht. |
Für andere verwende bitte die Shader, die mit dem Editor geliefert werden, als Referenz. Einige sind nur verfügbar, wenn sie über ein Präprozessorsymbol aktiviert werden.