Each vertices on a 3D model has a vector that influences how lighting is displayed on a 3D model, that is called the normal vector. The BNPR Abnormal plugin for blender users to easily adjust normal vectors and perfect a toon-shade look! This kind of shading is compatible with 3D game engines as well, as long as you import the vertex normals (This is different than a normal map seen on more realistic / photorealistic 3D models). Unreal Engine 4 : Tested OK! Unity: ?
https://github.com/BlenderNPR/Abnormal get the Abnormal plugin from the git-hub repository located at this link. Follow the instructions on the repository to install it onto your blender.
Have a 3D model that is separated, each part of the body should be it's own mesh for convenience. (I highly recommend keeping the head and body separate for a more anime-styled shading.)
Select the desired mesh, open the Abnormal panel and click on Start Normal Editor.
Press A twice to select all vertices (If you have the meshes separated), or Press C and use Left Click to select the vertices you wish to modify.
Find the Sphereize Normals button on the left side of the panel (You may need to collapse some panels), Click it.
Now a huge transparent sphere will appear, the Normals of the mesh will now mimic the Normals of a sphere, which is exactly what we want for our desired NPR look! (This might look weird on more realistic 3D models.)
Use G to move the origin of the sphere to modify the Normals to your liking. (Don't worry! I will show an example of this.)
Press Confirm Changes on the right side panels. Enjoy your toon-shader!
For this section, I will document a workflow from the perspective of a fresh Abnormal Installation, with minimal node set up for a toon shader (aka. a person who just downloaded blender and wants to edit normals). I will explain some of the intuition involved in editing normals for this section. (Warning this section is very long with lots of pictures and information)
Verify that Abnormal is installed, the expanded plugin panel should show something similar to the above.
(Optional) If your 3D model is a character, it's likely that it will come in all as a single mesh, to separate the mesh, go into edit mode and select the faces/vertices to separate. Press F3 and type in "separate" to find the separate function once you have selected the vertices to separate. Having separate meshes will greatly assist in the later normal editing process.
At this point, ideally the 3D model you have is split up between the head and the rest of the body. Find the BNPR Abnormal panel and click on Start Normal Editor, with the mesh/3D Model selected.
When you first enter Abnormal, you might encounter something like this, where the normal vectors are unnaturally long and obtrusive, this can be easily fixed by lowering the normals length on the right side of the interface. I prefer it on the lowest setting , which is 0.01
Now that the normal length is a reasonable size, you can now select all normals by pressing A twice. If you did not separate your mesh, press C and use Left Click to select the vertices that you want to adjust the normals for. Now on the right side of the panel, find the Sphereize Normals button under the Target Normals panel
Once you click on Sphereize Normals, the interface will look something like this and there will be a sphere empty, I recommend lowering the size of that empty so that it fits within the mesh. This is just for readability.
Now use G (the default hotkey to translate the sphere empty) to change the normals to your liking.
I recommend moving the sphere so that the normal vectors on the nose of the face points straight forward. Once you have your desired normals, YOU MUST CLICK ON CONFIRM CHANGES.
You're done! You can tell if the normal editing worked if the shadows on the 3D model has a gradient-look. This is intended! I borrowed Kiry's Toon Shader to demonstrate our new shading!
Hope this helped! Good normals is only one part of a myriad of techniques to making great NPR scenes, keep on learning! Sincerely, ebisuamagi Last Updated 11/7/2020