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
- [Linux] Crash on System.Runtime.InteropServices.Marshal:copy_from_unmanaged_fixed when accessing shared memory
- Misaligned text in Preferences window > 2D > Animation, Asperite and Sprite Editor preferences
- Unable to Install ZivaRT Player deprecated package
- Inconsistent Label Popup UI in Package Manager
- All active Audio Sources play their Clips when the "Play On Awake" checkbox is enabled and Scene view Audio is unmuted
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