Non-Photoreal Paint

A personal project exploring stylized fur rendering, originating from look dev work at Noggin. The video above reflects my current Houdini VEX-based approach, after an earlier AOV/Nuke Blink method proved limited by temporal instability and C++ constraints.

NPR test scene before switching to Rebelle Painter

The first test I did in Houdini. The tool I created offers a variety of choices for how the stokes flow over the surface, including the ability to use flow maps instead of a built-in system. The shaders are automatically created and pathing in a diffuse map is all that's needed to generate the pictured result.

First test with Rebelle Painter and custom Houdini script

I eventually moved away from the first tool I had built. The second had a lot of the same control, but I rebuilt the internal system significantly. I used the knowledge of building the Nuke system to refine my vex code. The shaders were also adjusted to give more of a solid paint stroke.

Rebelle Motion Io Strokes

Scattering stokes doesn't give the natural longer stokes I was looking for. So I moved into building the stokes in Houdini, then via Python sending a custom JSON to Rebelle Motion io. This produces a controllable natural digital stroke.

Rebell Painter image, the result of feeding the painting program a custom script and having it
A render composited with toon lines. The toon lines were created using a Rebelle Painter and a custom script. Part of a larger project to
A render composited with toon lines. The toon lines were created using a Rebelle Painter and a custom script. This image features more

The resulting outlines are fast, fully directable, and temporally stable. That said, I am aware this can be done faster with the Maya plugin, Flair. However, this is the first step in understanding this workflow and creating the internal stokes. Flair cannot do this out of the box.

Houdini viewport display of cards wrapping around an object, intended as blocking shapes. Part of a larger project to

Paint by color chunks

Houdini viewport display of polylines wrapping around an object. Part of a larger project to

Colors from render

Houdini viewport display of cards wrapping around an object. Part of a larger project to

Stroke preview

I'm still refining the internal curve structure in Houdini as it's been far more complex than the outlines. I'm using the same technique I used to generate the scattered stokes, then using vex to draw line segments for Rebelle.

The final challenge that I've not wrapped my head around yet is grouping strokes by color. While they should flow with the surface, they should also respect the rendered colors. For example, a stroke shouldn't flow from a purple surface to a white one, that boundary needs to be followed.

Daunish-logo

CG Generalist | [email protected]

©Daunish Irani 2026