VEX (Vector Expression Language) ist Houdinis native, C-ähnliche Skriptsprache, die parallel auf Punkt-, Vertex-, Primitive- oder Voxel-Ebene ausgeführt wird und sowohl Geometrieverarbeitung als auch Shader und Simulationsverhalten steuert.
Rubrik: Software & Tools · Unterrubrik: SideFX Houdini · Niveau: Fortgeschritten
Was ist VEX?
VEX wurde von SideFX als Hochleistungssprache für datenparallele Operationen entwickelt. Die Syntax lehnt sich stark an C an, ist aber auf Vektormathematik und den Zugriff auf Houdinis Geometriedatenmodell spezialisiert. Im Gegensatz zu Python, das für Houdini-Scripting auf Anwendungsebene genutzt wird, läuft VEX direkt im Compute-Thread und ist deutlich performanter.
VEX wird in verschiedenen Kontexten eingesetzt:
| Kontext | Anwendung |
|---|---|
| SOP (Attribute Wrangle) | Geometrie-Attribut-Manipulation |
| VOP (Volume Wrangle) | Volume-Shading und VDB-Bearbeitung |
| DOP (Microsolver) | Simulations-Verhalten anpassen |
| Shader (CVEX) | Oberflächen-, Displacement- und Volume-Shader |
| Particle | Partikelverhalten in Partikelsystemen |
Erklärung
Grundsyntax
```vex // Einfaches VEX-Snippet im Attribute Wrangle (SOP-Kontext) // Bewegt jeden Punkt auf Basis seiner Y-Position
float amp = 0.5; float freq = 2.0; v@P.y += sin(v@P.x freq + @Time) amp; ```
Wichtige Syntaxelemente:
@P,@N,@Cd→ Zugriff auf built-in Attribute (Position, Normal, Farbe)v@myAttr→ Zugriff auf selbst erstellte Vector-Attributei@group_name→ Group-Membership als Integer-Attributf@,v@,i@,s@→ Typ-Präfixe für Float, Vector, Integer, String
Kontextvariablen
Im SOP-Kontext (Point Wrangle) sind folgende Variablen automatisch verfügbar:
@ptnum– Index des aktuellen Punktes@numpt– Gesamtanzahl der Punkte@Time– Aktuelle Zeit in Sekunden@Frame– Aktuelles Frame@opinput0– Erster Input-Geometrie-Stream
Wichtige Built-in-Funktionen
| Funktion | Beschreibung |
|---|---|
noise(v) | Perlin-Noise für Vektor |
fit(val, a, b, c, d) | Remapping-Funktion |
rand(seed) | Pseudozufallswert |
length(v) | Betrag eines Vektors |
cross(a, b) | Kreuzprodukt |
dot(a, b) | Skalarprodukt |
normalize(v) | Normierter Vektor |
addpoint(geohandle, pos) | Neuen Punkt erstellen |
setpointattrib(...) | Attributwert setzen |
nearpoints(geohandle, pos, rad) | Nachbarpunkte suchen |
Wrangle-Nodes
Der Attribute Wrangle (SOP) und sein Verwandter, der Volume Wrangle (SOP), sind die primären Nodes für VEX-Code in SOP-Netzwerken. Daneben gibt es:
- Point Wrangle – läuft über alle Punkte
- Primitive Wrangle – läuft über alle Primitives
- Vertex Wrangle – läuft über alle Vertices
- Detail Wrangle – läuft einmal über die gesamte Geometrie
VEX vs. Python in Houdini
| Kriterium | VEX | Python |
|---|---|---|
| Geschwindigkeit | Sehr hoch (parallelisiert) | Mittel |
| Anwendungsbereich | Geometrie, Shader, Simulation | UI, Pipeline, Asset-Management |
| Lernkurve | Mittel | Gering |
| Debugging | Eingeschränkt | Gut (Python Shell) |
Beispiele
Beispiel 1 – Zufällige Skalierung: ``vex // Jedem Punkt eine zufällige pscale zuweisen f@pscale = fit01(rand(@ptnum), 0.5, 2.0); ``
Beispiel 2 – Gradient-Farbe: ``vex // Farbgradient basierend auf Y-Position float minY = -2.0; float maxY = 2.0; float t = fit(@P.y, minY, maxY, 0.0, 1.0); v@Cd = lerp({1,0,0}, {0,0,1}, t); ``
Beispiel 3 – Wave-Deformation: ``vex // Sinusförmige Wellendeformation float freq = chf("frequency"); float amp = chf("amplitude"); v@P.y += sin(v@P.x * freq + @Time * 2.0) * amp; ` Die chf()`-Funktion erstellt automatisch einen Float-Parameter-Slider im Parameter-Panel.
In der Praxis
VEX ist in professionellen Houdini-Pipelines unverzichtbar. Häufige Anwendungsfälle:
- Attribut-Erstellung für Simulationssteuerung (z. B. Flammen-Intensität aus Geometrie-Curvature)
- Custom Solver in DOP-Netzwerken für FLIP- oder Pyro-Simulationen
- Prozedurale Shader im CVEX-Kontext für Karma
- Partikel-Verhalten in POP-Netzwerken
Vergleich & Abgrenzung
VEX ist am ehesten mit GLSL (OpenGL Shading Language) oder HLSL (DirectX) vergleichbar: eine Sprache, die datenparallel auf Arrays von Elementen (Punkte, Voxel, Pixel) läuft. Im Gegensatz zu allgemeinen Programmiersprachen wie Python fehlt VEX Konzepte wie Klassen oder Datei-I/O – dafür ist es erheblich schneller in der Ausführung.
Häufige Fragen (FAQ)
Muss ich VEX lernen, um Houdini effizient zu nutzen? Für einfache Setups nicht zwingend. Sobald jedoch individuelle Simulationssteuerung, komplexe Geometrieverarbeitung oder Shader-Anpassungen nötig sind, ist VEX-Wissen unverzichtbar.
Gibt es eine IDE oder Debugging-Unterstützung für VEX? Houdini bietet einen integrierten VEX-Editor mit Syntax-Highlighting. Debugging erfolgt primär über printf()-Ausgaben in der Houdini-Konsole und das Spreadsheet zur Attribut-Inspektion.
Ist VEX mit C++ kompatibel? Syntaktisch ähnlich, aber nicht identisch. VEX hat keine Pointer, kein Speichermanagement und spezialisierte Built-ins. HDK (Houdini Development Kit) hingegen nutzt echtes C++.
Verwandte Einträge
- SOP-Netzwerk (Surface Operators)
- Prozedurales Modeling in Houdini
- Partikelsysteme in Houdini
- Pyro Simulation (Feuer & Rauch)
- FLIP Fluids – Flüssigkeitssimulation
Weiterführend
- SideFX (2024): VEX Language Reference. URL:
- Pal, J. (2022): VEX for Houdini Artists. Independently Published.
- Rebelway (2023): Houdini VEX and Python Programming. Online-Kurs.
- SideFX (2024): CVEX Shaders. URL:
