In no particular order of subject I wanted to start an art study / tutorial series. The purpose is to discuss, improve and sharpen the skills of the related subject to the post. This is the first post, so today the subject is a custom made "Toon Shader" for Blender. Works well with the new rendering engine "Eevee" and is super-fast, basic and very easy to do. So fire up Blender and let's get started!
First off, make sure you have the asset ready. We can achieve cartoon-ish shading with simple fresnel nodes and color ramps. We don't need to prepare the color ramp beforehand since we can just use the color ramp node in Blender.
Select your asset in Blender and go to the "Material Properties" tab on the right-hand side. If your asset does not have a material, you can start off by hitting "New". Blender will automatically create the standard "Principled BSDF" node for us and connect it to the "Material Output". It will have white base color and some standard values.
Sidenote: Since I will use Suzanne the monkey mesh that comes with Blender for this example, I will go ahead and add a Subdivision Surface modifier in the "Modifiers" tab to get the best result. Also, I will go to "Object" and enable "Shade Smooth".
Back in the "Node"-view, go to "Add" and "Search". Now type "Fresnel" to add a Fresnel node. Go back to "Search" and write "ColorRamp" and add that as well. The Fresnel-node will add a bit of refraction. We will control this with the "ColorRamp". If you go ahead and flip the values in the "ColorRamp" node, you can see that we are already a good way into it. We have the selected color, and an outline for the object. Great!

Remember that you don't necessarily have to use a color, if you want you can just mix it with a texture.
So now we have a working, superbasic toon effect. If you want, you could hook the same color output from the color ramp node to the Subsurface Color, Specular, Roughness and Emission too, but you might not wanna do that just yet. The reason is that we need to seperate the values based on what we are doing. Remember that we flipped the values of the color ramp before? In some cases you might wanna do that, in others not. Another input value we can play around with is the Specular. So duplicate the "ColorRamp" node and hook that up with the "Fresnel" and the "Specular" input value in the "Principled BSDF".
Since we want to control the lighting on the object we want to do this. Currently our lighting is a bit soft and looks too "3D" still. It is basically the same setup as the color ramp with the base color that we set up before, but this time, add the specularity color (I picked white) and bring up the black color a little way more than before. The closer the values in the color ramp are, the sharper will the edges be. Oftentimes, the edges are very sharp on toon-shading. Remember that the more distance you give the values, the more will the colors blend with eachother. I will show you what I have so far.

Now you can go ahead and hit the little arrow at the top left corner of your nodes to minimize them. We need to take a look at one more thing. And it is super-easy.
To achieve full toon-shading that is still affected by the light in the scene, we need to do the same for the roughness. I recommend just copying the color ramp from the "Specular" and hook that up, again with the "Fresnel" node and the "Principled BSDF". Now you would probably just increase the colors and decrease the black just a little bit.
If you don't care about the light and wanna go full-blown toon, you can do the same for the emission. When emission is applied on an object, it technically self-emits and specularity is not affected. Or, it is, but you can just not see it. Think of it like this: You are staring at a lightbulb that is emitting a very strong light, but you are trying to find the light-reflection on the surface. Pretty hard, huh?
As a final note, you can go into "Add - Converter - Math" to get a vector node and hook it up between the "Fresnel" and "ColorRamp" nodes. This way it might be easier to control the amount. But it is just a quality of life change.
Anyways, that is actually it! This is my first art tutorial / study that I do and will probably do more in the future. If you liked it, tell me what you thought in the comments below and thanks for reading!
First off, make sure you have the asset ready. We can achieve cartoon-ish shading with simple fresnel nodes and color ramps. We don't need to prepare the color ramp beforehand since we can just use the color ramp node in Blender.
Select your asset in Blender and go to the "Material Properties" tab on the right-hand side. If your asset does not have a material, you can start off by hitting "New". Blender will automatically create the standard "Principled BSDF" node for us and connect it to the "Material Output". It will have white base color and some standard values.
Sidenote: Since I will use Suzanne the monkey mesh that comes with Blender for this example, I will go ahead and add a Subdivision Surface modifier in the "Modifiers" tab to get the best result. Also, I will go to "Object" and enable "Shade Smooth".
Back in the "Node"-view, go to "Add" and "Search". Now type "Fresnel" to add a Fresnel node. Go back to "Search" and write "ColorRamp" and add that as well. The Fresnel-node will add a bit of refraction. We will control this with the "ColorRamp". If you go ahead and flip the values in the "ColorRamp" node, you can see that we are already a good way into it. We have the selected color, and an outline for the object. Great!

Remember that you don't necessarily have to use a color, if you want you can just mix it with a texture.
So now we have a working, superbasic toon effect. If you want, you could hook the same color output from the color ramp node to the Subsurface Color, Specular, Roughness and Emission too, but you might not wanna do that just yet. The reason is that we need to seperate the values based on what we are doing. Remember that we flipped the values of the color ramp before? In some cases you might wanna do that, in others not. Another input value we can play around with is the Specular. So duplicate the "ColorRamp" node and hook that up with the "Fresnel" and the "Specular" input value in the "Principled BSDF".
Since we want to control the lighting on the object we want to do this. Currently our lighting is a bit soft and looks too "3D" still. It is basically the same setup as the color ramp with the base color that we set up before, but this time, add the specularity color (I picked white) and bring up the black color a little way more than before. The closer the values in the color ramp are, the sharper will the edges be. Oftentimes, the edges are very sharp on toon-shading. Remember that the more distance you give the values, the more will the colors blend with eachother. I will show you what I have so far.

Now you can go ahead and hit the little arrow at the top left corner of your nodes to minimize them. We need to take a look at one more thing. And it is super-easy.
To achieve full toon-shading that is still affected by the light in the scene, we need to do the same for the roughness. I recommend just copying the color ramp from the "Specular" and hook that up, again with the "Fresnel" node and the "Principled BSDF". Now you would probably just increase the colors and decrease the black just a little bit.
If you don't care about the light and wanna go full-blown toon, you can do the same for the emission. When emission is applied on an object, it technically self-emits and specularity is not affected. Or, it is, but you can just not see it. Think of it like this: You are staring at a lightbulb that is emitting a very strong light, but you are trying to find the light-reflection on the surface. Pretty hard, huh?
As a final note, you can go into "Add - Converter - Math" to get a vector node and hook it up between the "Fresnel" and "ColorRamp" nodes. This way it might be easier to control the amount. But it is just a quality of life change.
Anyways, that is actually it! This is my first art tutorial / study that I do and will probably do more in the future. If you liked it, tell me what you thought in the comments below and thanks for reading!