Comment on page
How to use reflections and reflection mapping to add view-dependent effects to materials
The final result
Most NPR materials use diffuse, non-reflective shaders for the basis of effects like cel shading. However, using either reflection texture coordinates or plugging a reflective shader (eg glossy/glass shader) into the Shader->RGB node, you can get textures that shift around in a metallic or glasslike way. This NPR technique was popularized by the anime Land of the Lustrous, and some examples of their advanced NPR crystals can be seen here.
The rest of this page will demonstrate how to create the above material in Blender Eevee. However, both reflection mapping and shader->RGB conversion can be done in a number of other render engines so this technique is by no means exclusive.
Mapping textures to reflections in Blender is very simple: plug a texture coordinate node's 'Reflection' output into the coordinate input of a texture.
Only two nodes, and it's already quite an interesting effect. When using reflection coordinates, it's best to use either procedurally generated textures like the voronoi here, or to use tiling image textures. Otherwise seams at the edges of textures will be obvious.
Converting it to grayscale simplifies things so that it can be used in a larger effect.
The other method to get reflective NPR is to use the 'Shader to RGB' node. The benefit of this technique is that the rest of the scene will affect the reflections, whether it's lights, HDRIs, or other objects.
The brightest parts of the metal shader are isolated, which happens to be where it's reflecting the bright parts of the HDRI. These make for interesting highlights!
Adding these two effects together and then giving them some color, here is what we get:
You already knew it was going to look like this though
A final note about reflections is that they look quite different when the base mesh is changed, so try swapping out meshes and see what happens!
Same Suzanne but with flat shading
Same Suzanne but with chunky geometry!