I have a blob model that squelches around the level. It uses a bone to deform its shape (thus, needs a SkinnedMeshRenderer), but it also sometimes flattens down, which I do by scaling the whole model in Y (while leaving X and Z scale alone).
With a MeshRenderer, this looks great (but of course I lose the bone effect). But with a SkinnedMeshRenderer, as I shrink it down in Y, the shading gets severe and wrong.
Here are two versions of the same model, at uniform scale: SMR on the left, MeshRenderer on the right. Both have the same material, and have Cast/Receive Shadows turned off. (Rendered with wireframe + shading so you can see the geometry.)
Looks fine! But now here are the same models, at scale <1, 0.3, 1>:
The MeshRenderer model (right) looks correct: the shading is reduced, reflecting that what was essentially a hemisphere is now a flat hemisphere. But on the left, the opposite has happened: the shading has gotten more extreme. This is incorrect and sticks out like a sore thumb in my level.
If we go further, say a Y scale of 0.05:
Then the MeshFilter one (right) has adopted uniform shading that would blend in with the floor (as it should). The SMR one (left) is now too dark overall, especially on the lower right half, though we seem to have a specular highlight right in the middle.
Note that the actual geometry drawn really is the same in both cases. Here’s a side view:
Both flat as a pancake. Yet the SMR one has this extreme shading on it.
What’s going on here, and how can I make it stop? (I need to use SkinnedMeshRenderer for the bone animation, so I can’t just switch to MeshRenderer.) This is using the standard render pipeline, if it matters.