Here is a rundown of how my VAT Veils tool is built.
The base functionality of the tool is:
- generate a cloth mesh on an unreal-spline
- cache out a "floating" 200-frame cloth simulation, make it loopable
- generate Vertex Animation Textures from that animation
- import the Vertex Animation Textures into Unreal, create a Material Instance and assign everything correctly so the user only has to drag the mesh into the scene
The goal for this tool was to find a way to automate the tedious process of creating, importing and and setup of the VATs. To accomplish this, I integrated the HDA inside an Editor Utility Widget (EUW), using the Houdini Public API. From within the EUW, I can instantiate the HDA, set inputs and parameters, and run a python script that handles the VAT-setup. This also had the added benefit of providing a very clean UI, without the usual clutter that you need to scroll past when you use an HDA as it is.
Houdini:
The Houdini-part is relatively straight forward. The cloth mesh gets deformed onto the input-curve, and has a simple noise animation applied to it. The middle-part of the cloth mesh is pinned in place, then it gets fed into a vellum simulation.
Animated Noise VOP:
Loopable Vellum simulation:
The vellum simulation runs for 200 frames, and is looped into a 100-frame animation. In Unreal, only a preview mesh is visible, which shows the resolution via the vertex color.
Editor Utility Widget:
Inside the EUW, I created custom buttons for creating a Houdini Session, Instantiating the HDA, cooking the HDA, and generating the VATs. I also exposed parts of the Houdini Engine UI via the Details View Widget. Sadly enough, this Widget seems to be very buggy, and doesn't expose the parameters properly. I had some issues with it and I hope proper support gets added by Epic Games in the future.
OnClicking the "Generate VATs" button, the hidden parameters for reseting the simulation and rendering the cache are executed. The only two parameters exposed to the user in this section, are the export path for the cache and VATs, and the cache version, which the user needs to set manually so as to not override previous caches.
After the cache has finished, the Vertex Animation Textures are being generated. To be able to access the rop network from inside Unreal, I had to add the Labs Export Node to an Editable Node in the HDA type properties. As a last step, after the generation of the VATs is done, my python script is executed, that handles the import and setup of the VATs.
I figured out a lot of valuable HDA-workflow-related tricks during this project. If anybody is interested in learning more about it, feel free to contact me!











