Non-Photoreal Paint

A white rabbit project of mine, I can't seem to stop thinking about it. Started as look dev at Noggin and has snowballed into an obsession. The video above is where I'm currently using a Houdini Vex solution. But my first thought was to use AOV's and Nuke's blink system to create the strokes. My lack of C++ coding skills and inability to get a temporally stable result put an end to that.

PaintStroke_Gen_v02

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.

PaintStokesGeo_v02_01_AnimTest_1

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

Noggin_Color_04_0156

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.

test_Outlines_0156
Test_Outlines_Multi_0156

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.

Noggin_CurvesChunked_03

Paint by color chunks

Noggin_CurvesColored_03

Colors from render

Noggin_CurvesFlattened_03

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 2024