When I cast a shadow on my NPR model, I found that there were always some areas of bump that would not receive the shadow, So I seperate the part of the mesh that went wrong. As shown in the picture below, there is one area in the middle that does not receive the shadow. Basically, I use a plane as a shield, and use the sun light to cast shadow in the node. If I don't use nodes, the shadow is fine, So I'm sure there's something wrong with the shadow of my nodes setting. Who can tell me what I did wrong? I will upload the .blender file soon
2 Answers
Your shadow is working correctly. The problem is that lighting in blender internal/GLSL has several parts to it. Shadows (cast by other objects that block light sources) are one part, separate from shading (an object getting darker where it faces away from a light source). In other words, using just the "Shadow" output of the lamp data node will allow other objects to cast shadows on the material, but not allow the object to cast shadows on itself.
The bright spot in the middle of the shadow was there because shadows work by projecting the light-blocking mesh onto the shadowed mesh. The protruding nose on your shadowed mesh was shielding some of it from being touched by that projection; you could say it was like an anti-shadow. If this seems ridiculous to you, you may enjoy the cycles rendering engine.
Thanks to @dixiepig, your answer made me clear: light shadows only work on surfaces with normal angles greater than or equal to 90 degrees. If the Angle between normal and light direction is less than 90 degrees,the face's color will be controlled by the value of the light direction * surface normal direction. As I don't want to cast shadows on the concavoconvex parts of my lips when no other object casts a shadow, which will broke the look of the animated character, finally my solution is: allow the object to cast shadows on itself, but change the normal of
some particular area such as lips, now it seems great for me.