NPR Skin Shader Showcase + Breakdown

Here is the most developed version of my procedural NPR skin shader. It has been through multiple iterations over my past NPR projects. I hope the information I provide here will be useful to you.

Renders

I will only be using the hand to display the shader. For full body renders, see this topic:

The hand is from the official Human Base meshes Asset bundle by Blender Studio. Infact, the whole body and head is the realistic female body asset sculpted over and rigged.






Breakdown

Base Material

The material is based on the in-built toon shader. I like using it as it looks flat and gives me more control over the shading.

The first step is to add sub surface scattering. Toon shaders do not actually support SSS, but it can be faked by adding/mixing two shaders with different sizes.

Add glossy shaders

The outlines are indistinct. To fix this, mix a darker shader using fresnel or facing. Pass the factor though Voronoi for a stepped effect. You can even use Smooth F1 mode for smoother steps.

Brush strokes

I passed the normal vector though a Voronoi for the basic painterly effect.

The most obvious problem is that the edges are too sharp. The first instinct for those of you experienced with shaders would be to use Smooth Voronoi. But that makes the surface look like it is beveled instead of strokes merging into each other.

I struggled with this problem for quite some time. The problem is that I want to blur the edges without mixing the colors. That might sound crazy, but it is possible. The two colors need to be randomly displaced at a very tiny scale to give that illusion that they are blending into each other. This can be done in Blender by adding very fine noise to the coordinates.



The next problem is that of adding multiple layers of strokes. Again, you can’t simply mix multiple Voronoi textures. It will just look like a denser Voronoi. The different textures need to mix without their colors mixing. The solution is to make them appear in very small patches to give the illusion that they are mixing. Instead of using different Voronoi textures, a single node can be used with different W (4th dimension vector component / time) for the “patches”.


The lower the number of increments in snap, higher will be the number of layers.

And that is basically how far I have come till now. These methods can also be applied to material other than skin, or even shaders other than Toon BSDF. I have been very brief here, so feel free to ask for more details.

55 Likes

This is great! Can image textures (such as wood, grass, etc.) be overlayed for extra detail?

Thank you for sharing this amazing shading technique!

1 Like

It should be possible, though it may look uncanny if the textures are too realistic.

1 Like

Alright, thanks. And would it be plugged at the end of the setup, or near the beginning?

Looks great. Naturally you post this after I spent a week painting some toon textures. Thanks for sharing.

1 Like

The diffuse/albedo could go into the toon shader colour. I am not too sure about the normal/bump. It could either before or after voronoi depending on the effect you are looking for.

1 Like

Thanks for the breakdown! Maybe I’m stupid, but I can’t seem to figure out where the “position” of the voronoi texture in the last picture should be plug into. Should I mix it with the first texture in some way?

1 Like

Well, I’ll be sure to try it out. Thanks again for the help!

Does the Toon bsdf work in EEVEE? Is there an EEVEE alternative? Thanks

It’s beautiful… thanks a lot for sharing!

1 Like

Toon BSDF is cycles only. You can try these tricks with Diffuse BSDF too, though it may not look as good.

Nice work. You really made something amazing out of nothing. I didn’t think that such good look can be achieved without manual brush strokes.

This great! I’m inspired by the technique.
But I struggle to get the result you got. Any chance you can share a screenshot of the whole node setup?


Edit: Small correction, the nodes for layering are not included here. See the last image of the breakdown.

4 Likes

Toon BSDF doesn’t work with Eevee, but there is a workaround. You can use “Shader to RGB” and get very similar results.
My result in eevee:


Here’s the node tree:

4 Likes

This looks great! Thanks for sharing.

1 Like

Thank you for sharing this! I had a lot of fun messing around with it today :smiley:

3 Likes

@Xeofrios I’m just noticing that your noise texture nodes have options that mine do not. Is there a special setting I’m missing?

image
image

In your screenshot I see normalize and other options absent from my node.

Those are new additions in 4.0

1 Like