Yunus Balcioglu
animatrix_
About Me
Senior FX Technical Director @ Industrial Light & Magic | Feature film credits include The Lord of the Rings: The Rings of Power, Marvel's Eternals, Star Wars: The Rise of Skywalker, X-Men: Dark Phoenix, X-Men: Apocalypse, Aquaman, Alien: Covenant, Pirates of the Caribbean, Justice League and many m... more
Senior FX Technical Director @ Industrial Light & Magic | Feature film credits include The Lord of the Rings: The Rings of Power, Marvel's Eternals, Star Wars: The Rise of Skywalker, X-Men: Dark Phoenix, X-Men: Apocalypse, Aquaman, Alien: Covenant, Pirates of the Caribbean, Justice League and many more. less
EXPERTISE
Technical Director
INDUSTRY
Film/TV
Houdini Skills
ADVANCED
Procedural Modeling | Digital Assets | Mantra | Pyro FX | Fluids | Destruction FX | VEX | Python
INTERMEDIATE
Realtime FX
Availability
Not Specified
My Gallery
My Talks
Recent Forum Posts
It seems like there are fewer and fewer commercial tutorials Sept. 4, 2026, 3:55 a.m.
I'm still creating commercial Houdini training. My Pragmatic VEX course actually received a major update recently, and I'm currently working on Volume 2 as well, which I hope to release soon.
From my perspective, producing this kind of material is definitely a significant investment of time, especially when you want to cover more advanced topics in depth and keep the material updated as Houdini evolves. But I don't think commercial Houdini training is disappearing entirely. There are still people creating it
From my perspective, producing this kind of material is definitely a significant investment of time, especially when you want to cover more advanced topics in depth and keep the material updated as Houdini evolves. But I don't think commercial Houdini training is disappearing entirely. There are still people creating it

Pragmatic VEX: Volume 1 [4K] [H20] Sept. 3, 2026, 4:46 a.m.
https://www.patreon.com/animatrix/posts/opencl-intrinsic-168438241 [www.patreon.com]
I've been developing a custom OpenCL point relaxation solver for surface distributions. The input geometry is first triangulated, after which the OpenCL solver operates directly on the resulting surface topology.
Rather than treating the scattered points as a purely Euclidean point set, each point maintains its position on the surface using a primitive and barycentric coordinates. Local neighborhoods are constructed by traversing connected triangles and unfolding the relevant surface region into a local 2D chart.
Within this chart, neighboring points define a Voronoi cell, or a power cell when weighted radii are used. The cell is clipped against the actual unfolded surface patch, and its centroid provides the relaxation target.
The resulting 2D displacement is then converted back into tangent-space motion and walked across the triangle mesh, updating the point’s primitive and barycentric coordinates as it crosses edges.
This allows the relaxation to operate according to the intrinsic connectivity of the surface rather than relying only on straight-line proximity in 3D. Points that are spatially close but separated by a fold do not automatically become neighbors, while points connected through the surface can still interact through the unfolded local patch.
The solver also uses distance-ordered surface traversal and deterministic processing of neighboring samples. The primitive-to-point lookup is assembled in parallel using atomics, so its linked-list insertion order is not inherently deterministic. Relevant constraints are therefore processed in a stable order before the final Voronoi cell is constructed, avoiding result differences caused purely by GPU insertion order.
The relaxation step includes adaptive damping, reversal detection, over-relaxation, and a local step limit. It also tracks a number of quality and convergence conditions, including incomplete surface patches, point and cell capacity limits, nearest-neighbor completeness, overlapping chart regions, boundary interaction, and per-point displacement history.
These diagnostics make it possible to reduce the aggressiveness of a step when the local solution is unreliable rather than blindly accepting the computed centroid.
For comparison, I tested the solver against the Scatter SOP relaxation using the same point distribution. On this particular surface, the custom OpenCL solver reaches a much more uniform distribution in roughly 35 iterations, while Scatter still retains several large under-covered regions after 1,000 iterations. Even at 10,000 iterations, the same gaps remain.
Another difference is convergence behavior. With Scatter, increasing the iteration count from low values through hundreds and eventually thousands continues to change the distribution rather than clearly settling into a stable configuration. The custom solver converges much earlier and produces substantially more even surface coverage.
I'm also developing an intrinsic Delaunay triangulation, or iDT, variant of the solver.
The current implementation traverses the triangulation already present on the mesh. An iDT approach would instead construct connectivity according to the intrinsic surface metric, allowing poorly shaped local triangulation to be replaced by connections that are better suited to intrinsic surface traversal and unfolding.
This is especially interesting for operations such as relaxation, neighborhood search, smoothing, attribute transfer, and other algorithms that depend on local surface connectivity. On a general curved mesh, however, using a virtual intrinsic triangulation also requires a robust mapping between that intrinsic representation and the original embedded surface, so there is more work involved than simply flipping triangle edges.
How can you read parametric UVs in vex? Aug. 24, 2026, 12:27 p.m.
stereocolor
I just ran into an issue when trying to use pointprimuv on a nurbs grid, I only the first component, v is all 0.
I managed to work around it by first storing the u value in a wrangle, then swapping the U and V using a primitive properties sop, storing the "new u" value in another wrangle, then swapping it back again.
Am I missing something obvious or is this a bug?
NURBS have poor support in Houdini, especially in VEX, so I would not be surprised if this is a bug.
For example, if you start using functions like xyzdist() on NURBS geometry, the performance will tank compared to polygonal geometry.
As for pointprimuv() specifically, I had actually implemented my own version of this and submitted it to SideFX as an RFE before the function was later added to Houdini.
I also showed my original implementation in this Tokyo HIVE presentation if you want to see a practical use case: