Although there exist multiple tools that can create this painterly look, they are mainly for other programs like Blender, so I wanted to create my version of a tool specifically made for Houdini users.
The toolkit works by scattering "brush strokes" onto masked areas of the geometry created by the user through the first node of the toolkit, "Stylized Mask Generator." These masks are made to determine where the user wants to place the highlights, shadows, reflective lighting, among others.
Once the masks are adjusted to the user's geometry, the user can use the second tool, the "Geometry Deformer," to create 3 different versions of the original geometry: one that reduces the polygons on your geometry, the next creates a sharper geometry, and the final one creates a stylized version of the geometry by deforming its original topology. All these versions, including the original geometry, can be used inside the last tool, "Brush Stroke Applicator," to determine where the brush strokes are projected onto the geometry, creating a unique look between different layers.
Once the first 2 nodes have been setup, they are connected to the "Brush Stroke Applicator" to transfer all the information that is used for the brush stroke placement. In this last tool, the user controls everything that has to do with the stroke, like its shape to resemble more an oil brush, watercolor, or digital brush, or even create your own version of the brush stroke by using the Comfy UI option where you can determine the specific look you want. The user can also determine the length, width, size, and rotation of the stroke, or if it is following a specific shape like a spiral on top of the geometry, among many others displayed below.
To keep the interface clean and avoid overwhelming users with too many parameters at once, the toolkit is broken down into three modular HDAs:
Stylized Mask Generator
Geo Deformer
Brush Stroke Applicator
You can drop these into your scene individually by typing their names, or you can grab them pre-connected by typing "Painterly Tool".
To make manual connections quick and easy, I implemented a color-coded pipe system directly into the node inputs and outputs. You can simply match and connect the ports that share the same color to guide your way through the setup. It is important to note that you should not connect the black outputs to anything, as these are strictly utility outputs meant for visualization and troubleshooting inside your viewport.
I recommend that, before doing anything else, the first step is to split your geometry into separate parts (unless you are working with a single, continuous mesh). Breaking your model down gives you significantly more control over exactly how and where the brush strokes will be applied later in the pipeline.
Step 1: Mask Viewer and Detail Masks
The Mask Generator creates a total of 8 distinct masks on your geometry, specifically designed to mimic how a real artist blocks out light while painting.
Right at the top of the interface, you will find the Mask Viewer parameter. This allows you to visualize and adjust the size and location of each mask depending on your preferences. While the masks come with predetermined names to keep things organized, their use is entirely flexible—for example, if you want to use the "Light Mask" to drive a shadow region instead, you can, though keeping to the naming convention helps prevent confusion!
The first two masks are unique: they are engineered to auto-detect high-frequency surface details based on the curvature or concavity of your input geometry. The remaining six lighting masks share a standardized, highly intuitive set of parameters, making it easy to tweak, scale, and reposition them across the rest of your mesh.
Step 2: Mask Location and Modifier
Whenever you select a mask (excluding the Detail 1 and Detail 2 masks), two core submenus will appear: Mask Location and Mask Modifier.
The parameters under Mask Location control where the mask sits on your model. The system uses a hidden object that automatically rotates around your geometry to cast rays. By adjusting the top four parameters in this menu, you can easily determine the overall placement of your mask.
For advanced control over the mask's scale and precise rotation, you can tweak the settings inside the Mask Bounds Collider.
What this is actually doing under the hood is modifying the physical shape of the boundary geometry that is casting the rays onto your model. This boundary geometry is converted into a point cloud that you can see right in your viewport. Because the rays are being cast directly from these points, adjusting the shape, size, and layout of the points gives you highly accurate, customized masking results.
The Mask Modifier section gives you precise control over the texture and falloff of the mask itself. Within this menu, you can adjust the overall resolution of the mask, control the physical surface area the mask covers on your geometry, and—on specific masks—enable and tweak custom noise attributes to break up clean edges and give the mask a more organic feel.
Step 1: Tool Overview
The Geo Deformer tool procedurally generates three distinct versions of your original mesh: a stylized version, a sharpened version, and a low-topology version. You can easily visualize and navigate through these different options by using the Geometry Editing dropdown menu located right at the top of the interface. Generating these modified meshes gives you a variety of strategic options for how your final brush strokes will be placed. Specifically, the Stylized Geometry option can also be exported out of the tool as your final, deformed mesh to be used directly for future rendering.
Step 1: Stylized Geometry
The Stylized Geometry menu features four distinct operational tabs: Mask Deformer Setup, Geo Deformer, Sharpen, and Relax Topology. The actual deformation of your mesh takes place within the first two tabs. In the first tab, you control the primary mask that isolates exactly which parts of the geometry will be deformed. The second tab then determines the overall strength of that deformation and handles how much of the model's original shape is preserved. The final two tabs focus on cleanup and refinement; the Relax Topology tab smoothes out any self-intersection or geometric crashing that might have occurred during the deformation process, while the Sharpen tab crisp up the deformed mesh to give you sharp edges.
Step 1: The Brush Shape Menu
Located right at the top of the Brush Stroke Applicator, the Brush Shape menu features two distinct modes: Standard Brush Stroke and Shape Brush Stroke. Selecting the standard mode gives you a traditional, linear stroke, while switching to the shape mode unlocks dynamic paths like a spiral motion, a circle, or a wavy line. While both options share very similar global controls for adjusting the overall stroke behavior, certain specialized parameters will automatically become active depending on the stroke shape. Additionally, directly under this menu, I included a toggle that applies a different random color to each stroke, giving you a much clearer view in the viewport of exactly how your strokes are intersecting and laid out on the model.
Step 2: Setup
The Setup tab within the Brush Stroke Applicator is divided into two primary sections: Scatter and Surface Projection. In the Scatter section, you can select which specific masked layer to work with—using the maps previously created by the Mask Generator—while controlling the exact number of brush strokes scattered onto that mask and adjusting their overall placement. Moving down to the Surface Projection section, you can determine exactly which version of the geometry to use as the base for projecting your strokes, along with additional alignment parameters that ensure the instanced brush strokes conform perfectly to the underlying geometry and dynamically follow its physical shape.
Step 3: Brush Stroke Edit
The second tab, Brush Stroke Edit, allows you to modify the physical shape and artistic style of your brush strokes. Right at the top, you will find a toggle that lets you use two different types of brush strokes simultaneously instead of just one, which is incredibly useful for breaking up repetitive shapes and creating distinct material variation across your asset. Activating this dual-stroke mode automatically duplicates the parameter set, giving you independent control over each shape.
Underneath this toggle is a style menu where you can select your preferred paint medium—such as oil, watercolor, or a digital brush—or choose a custom option to import an image map of your own brush stroke texture. Directly below the medium selection, there is another toggle to activate the ComfyUI Brush Creator, which hooks into machine learning to generate endless brush stroke possibilities. Finally, the bottom of this tab features multiple options to deform your stroke geometry, along with a toggle to control whether the stroke retains its raw topology or uses an automatic remeshing system, which prevents the geometry from exploding on complex curves while giving you the option to bypass remeshing for simpler, low-detail meshes.
Local Brush Stroke
Comfy UI Brush Stroke
Step 4: Additional Shape Changes
In this tab, you'll be able to further change the shape of the brush strokes, like smoothing the geometry, deforming the edges of the shape to create a unique look, adding noise to the inside of the geometry to break out the normals for each brush stroke, and adjusting the normals of the shape to create a more planar or 3D look.
Step 4: Stroke Transform
The Stroke Transform tab has all the transformation controls for the brush stroke placement, allowing you to add randomness to them so they feel more organic. Parameters include a minimum and maximum amount for stroke size, length, width, and rotation. Also, at the bottom of the tab, there is a stroke offset section that adds padding between brush strokes to avoid crashing. This is automatically turned on, so if you see that the brush strokes are too far away from the geometry, you can turn it down.
Step 4: Material Setup
In the material setup, you'll be able to adjust the color, normal, roughness, alpha, and opacity of the brush strokes. If you have selected to use multiple brush strokes, these parameters will duplicate so you can adjust each of the materials. At the top of the material setup, you'll see a menu where you can view and edit each texture.
On the Brush Shape menu, selecting Shape Brush Stroke will make a new tab appear named Brush Stroke Shape. In here, you'll be able to select and control the overall shape that the brush stroke will be following, including spiral, circle, and wavy. Each shape will have its unique shape adjustments found underneath, where you'll be able to control things like the number of spins in your spiral, the number of points forming your circle (fewer points = different shapes), or the number of waves in your wave/zigzag.
On the bottom collapsible menu, you'll find parameters to adjust how the stroke follows the shape, along with some shape deforming options like activating tapering and rotation.
The Painterly Style Toolkit includes a specialized COPs layer powered by ComfyUI. This allows you to generate new iterations of the brush stroke textures directly within Houdini based on predefined inputs.
⚠️ IMPORTANT: To use the ComfyUI parameters inside the "Brush Stroke Aplicator" tool, you MUST have ComfyUI installed locally, and the background application/server MUST BE ACTIVELY RUNNING while you work in Houdini. If it is not running, the ComfyUI layers will not compute.
Step 1: Comfy UI Setup
The setup process requires specific installation steps for both the ComfyUI application and the Houdini bridge plugin. Please follow the detailed installation guide below before attempting to use the HDA:
VIEW DETAILED COMFYUI SETUP TUTORIAL DOCUMENT
This is a great video and documented tutorial created by Rafael Drelich.
Step 2: Launch Comfy UI
Before opening your Houdini scene, launch the ComfyUI app. Keep this application window running in the background at all times for the tool to work.
Step 3: Comfy UI Setup
Once ComfyUI is running in the background, you can adjust the brush stroke shape and texture within the Brush Stroke Applicator HDA:
Toggle on the ComfyUI parameter found in BrushStrokeEdit/ComfyUIBrush.
To refine the look/shape of the brush stroke, turn on "Edit AI Prompt": You can adjust the provided text prompt slightly to refine the visual output. Focus your keywords on descriptive attributes (e.g., thick, thin, dense). Swapping the Stroke Style parameter will give you completely different paint style results.
Get Different Variations with the Brush Iteration Seed parameter to generate completely different variations within that specific style.
IMPORTANT: Remember that every time you adjust the text prompt or change the seed, you must press the COMPUTE BUTTON to send the new data to ComfyUI and pull the updated results back into Houdini.