Search Issue Tracker
By Design
Votes
0
Found in
2019.3.15f1
2019.4
2020.1
2020.2
Issue ID
1252448
Regression
No
Blend shape normal shading is wrong around bends
How to reproduce:
1. Open attached project "DigitalDouble.zip"
2. Enter Play Mode
3. Pause Play Mode
4. Advance frame by frame while looking at the elbow (Scene view) of the model until it bends enough
Expected result: Shading looks as expected
Actual result: Shading does not look as expected
Reproducible with - 2019.4.9f1, 2020.1.1f4, 2020.2.0b1
Could not reproduce with - 2018.4 (Editor errors)
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- Sprite Library Editor contains corrupted and low resolution icons
- [Linux] Players Application window does not update on move when window is changed from full-screen mode
- [Lost Crypt] Build fails in U6
- Shadows do not change in Scene when changing shadow cascade split value via script
- [Lost Crypt] Readme text is white on light grey in light mode
Resolution Note (2020.2.X):
Blendshapes are applied as deltas to the vertices according the set weight. Blendshapes primarily affect the vertex position, but if normals and tangents are set to 'import' they will also be modified. The model attached to this case is set to 'import' normals for blendshapes. These normals are authored in the DCC tool and are read from the FBX file.
The RightForeArm_02 blendshape is quite extreme (you can observe this by setting the weights of all other blendshapes to 0%, and just this one to 100%). I presume the normals for the blendshape have been calculated based on this pose. In the animation the extreme vertex position is compensated by RightForeArm_01. Thus providing a more normal shape. But the normals that are blended in are not necessarily corrected by the other shape. Thus resulting in the observed artifacts. A solution would be to author the normals for the blendshapes in the DCC to be correct for this setup.
Looking at the use case here I think you can get away by only applying corrective blendshapes to the vertex position (setting the blendshape normal option to 'none'). Alternatively, you can recalculate the normals at runtime with some scripting. However, do note that this is rather costly, as it requires baking the mesh and recalculating the normals afterwards. We do not support normal recalculation as part of the deformation process.
Note: please be aware of the following issue. When the Model Importer is set to 'Import' normals for blendshapes, but there are no normals present (for blendshapes) they will be automatically calculated for you. Unfortuntaly we cannot detect this and thus are not able to provide a warning message. Having the normals calculated for you can result in undesired effects too:
https://issuetracker.unity3d.com/issues/artifacts-are-produced-when-using-multiple-imported-blend-shape-normals