VEX (Vector Expression Language) ist Houdinis eingebaute, C-ähnliche Hochleistungssprache, die direkt in Wrangle-Nodes und im VOPS-System ausgeführt wird und es Artists und Technical Directors erlaubt, prozedurale Geometrieoperationen, Shader und Simulations-Logik ohne externe Skripte zu implementieren.
Rubrik: Software & Tools · Unterrubrik: Houdini · Niveau: Profi Synonyme / Auch bekannt als: VEX Language, CVEX, Wrangle Code, VEX/CVEX
Was ist VEX Scripting?
VEX (Vector Expression Language) ist keine allgemeine Skriptsprache wie Python, sondern eine speziell für parallel ausführbare Geometrie- und Shading-Operationen optimierte Sprache. Ihr wichtigstes Merkmal: VEX-Code wird auf jedem Punkt, Primitive oder Vertex parallel ausgeführt, was ihn bei großen Geometrien um Größenordnungen schneller macht als Python-basierte Iterationen. VEX ist die Sprache hinter dem Attribute Wrangle SOP, dem Volume Wrangle, dem Geometry Wrangle im DOP Level und dem VOP (VEX Operator) System.
Erklärung
Syntax und Datentypen
VEX orientiert sich stark an C/C++. Grundlegende Datentypen:
``vex int i = 5; float f = 3.14; vector v = {1.0, 0.0, 0.0}; // 3-Komponenten-Vektor vector2 uv = {0.5, 0.5}; // 2-Komponenten (UV) vector4 quat = {0, 0, 0, 1}; // Quaternion / Color mit Alpha matrix3 m3; // 3x3-Matrix matrix m4; // 4x4-Matrix string s = "hello"; ``
Besonderheit: Vordefinierte globale Attribute sind direkt über @-Präfix zugänglich:
@P– Position des aktuellen Punktes (vector)@N– Normale (vector)@Cd– Vertex/Point Color (vector)@pscale– Scale für Copy-to-Points (float)@ptnum– Punkt-Index (int, read-only)@numpt– Gesamtzahl der Punkte (int, read-only)@Time,@Frame– Aktuelle Zeit in Sekunden / Frame-Nummer
Der Attribute Wrangle SOP
Der Attribute Wrangle ist der meistgenutzte VEX-Node in Houdini. Er führt VEX-Code aus, iteriert dabei über Points, Vertices, Primitives oder Details (wählbar über Run Over). Beispiel – Noise-basierte Displacement:
``vex // Displacement entlang Normalen mit Perlin Noise float freq = 2.5; float amp = 0.3; float n = noise(@P * freq + @Time * 0.2); @P += @N * n * amp; ``
Dieses einfache Snippet verschiebt jeden Punkt entlang seiner Normale mit einem animierten Rauschwert – in Echtzeit, parallel auf der CPU.
Funktionsbibliothek
VEX bietet eine umfangreiche Built-in-Bibliothek:
Mathe: sin(), cos(), pow(), sqrt(), abs(), clamp(), fit(), fit01(), lerp(), smoothstep()
Noise-Funktionen: noise(), onoise() (Perlin), vnoise(), curlnoise(), wnoise() (Worley/Voronoi), fbm() (Fractional Brownian Motion)
Geometrie-Zugriff: point(), prim(), vertex() lesen Attributwerte anderer Punkte/Primitives; nearpoint() findet den nächsten Punkt; neighbours() gibt Nachbar-Indizes zurück.
Attribut-Manipulation: setpointattrib(), setprimattrib(), addpoint(), removepoint(), addprim() erlauben das Erstellen und Löschen von Geometrie direkt aus VEX.
Transformationen: quaternion(), qmultiply(), dihedral(), maketransform() für komplexe Rotationsberechnungen.
VOP Networks (Visual VEX)
Das VOP (VEX Operator) System ist der visuelle Pendant zu handgeschriebenem VEX. Im Material Network oder VOP SOP werden VEX-Operationen als verbundene Nodes dargestellt – ideal für Shader-Entwicklung oder Artists, die keinen Code schreiben möchten. Houdini kompiliert VOPs intern zu VEX.
CVEX und Custom Shaders
CVEX (Context VEX) bezeichnet VEX-Code, der in Shader-Kontexten (Surface, Displacement, Light, Fog, Image) läuft. Für Karma- und Mantra-Shading werden CVEX-basierte principled shader und Custom Material-Definitionen via materialX oder SHOP Networks eingesetzt.
Performance-Tipps
VEX ist bereits hochoptimiert, aber einige Patterns sind langsamer:
- String-Operationen sind teuer – Attribute als int-IDs statt strings speichern wo möglich
nearpoints()mit großem Radius kostet Zeit; mitmaxpointslimitieren- Conditional-Branches (
if/else) auf Basis von Attributwerten sind schnell; dynamische Dispatch-Systeme eher vermeiden
Beispiele
- Randomize-Scale für Copy-to-Points:
@pscale = fit01(rand(@ptnum), 0.5, 1.5);– weist jedem Punkt einen deterministisch zufälligen Scale-Wert zu. - Curl Noise für Partikel-Trails: In einem
Gas AdvectDOP viaVolume Wrangle:v@vel += curlnoise(@P * freq + {0,@Time,0}) * strength; - Attribut-Transfer via VEX:
float h = point(1, "height", nearpoint(1, @P)); @Cd = set(h, h*0.5, 0);– liest Höhenwerte aus einem zweiten Input und mappt sie als Farbe. - Prozedurale Animation ohne Keyframes:
@P.y += sin(@ptnum * 0.3 + @Time * 2.0) * 0.5;– erzeugt Wellenanimation auf einem Grid. - Custom Destruction Constraints: VEX berechnet Constraint-Stärke basierend auf Abstand zum Einschlagspunkt:
float strength = fit(dist, 0, radius, 0, maxstrength);
In der Praxis
Wrangle-Snippets als Toolbox anlegen: Häufig verwendete VEX-Snippets in Houdinis Asset Library als Digital Assets (HDAs) oder als Python-Shelf-Tool-Presets speichern und teamweit teilen.
Fehlersuche: Das Geometry Spreadsheet zeigt Attributwerte nach VEX-Ausführung. printf("@P = %g\n", @P); gibt Debug-Infos in die Houdini Console.
Kombination mit Python: Python (via hou Modul) für Node-Management und Pipeline-Integration; VEX für die eigentliche Geometrie-Verarbeitung. Niemals Python für Punkt-Iteration nutzen – immer VEX.
Wichtige Shortcuts: Im Wrangle-Code-Editor: Ctrl+Enter kompiliert; F1 öffnet VEX-Dokumentation für das Wort unter dem Cursor.
Vergleich & Abgrenzung
| Software | Äquivalent | Unterschied |
|---|---|---|
| Blender | Geometry Nodes / Shader Nodes | Visuell, kein nativer Code-First-Ansatz; weniger mächtig |
| Cinema 4D | Xpresso / Fields | Kein code-first VEX-Equivalent; deutlich limitierter |
| Maya | MEL, Python via API | MEL ist veraltet; Python-API nicht parallelisiert |
| Substance Designer | GLSL Functions | Nur für Texturing; nicht für Geometrie |
| TouchDesigner | GLSL / Python | GLSL für GPU-Shading; kein nativer Geometrie-Kontext |
Häufige Fragen (FAQ)
Muss ich VEX lernen, um Houdini professionell zu nutzen? Für einfache Setups reichen Node-basierte Workflows. Für Profi-VFX-Arbeit ist VEX jedoch unverzichtbar. Die meisten TD-Stellen setzen VEX-Kenntnisse voraus. Der Einstieg über Attribute Wrangle mit einfachen Ausdrücken ist niedrigschwellig.
Was ist der Unterschied zwischen VEX und Python in Houdini? VEX wird direkt auf Geometrie-Ebene, massiv parallel auf der CPU ausgeführt und ist 10–1000x schneller als Python für Point-Iteration. Python dient der Automatisierung auf Node-/Scene-Ebene (hou-Modul), nicht für Geometrieverarbeitung.
Verwandte Einträge
Weiterführend
- SideFX VEX Language Reference: (2025)
- Entagma – VEX für Artists Tutorial-Serie: (2023–2024)
- Paul Esteves "VEX for Houdini Artists" – CGCircuit Kurs (2024)
