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.