Shader to RGB node
Start by creating a bump map from a 3D noise like the following:
Feed a shader with strong specularity with the bump map. Then use the shader to rgb node to extract the color info of the surface. Use a color ramp node to tint the shadow, the midtones and the highlites.