Mesh Normal not effect by joins positions

Hi There
I got some issues about how joins deform the surface . If I rotate joins, surface Normal deform correctly, but if I move joins around, making surface stretch, the surface remaining the same normal, I did a GIF animation to show it here. Thanks

311420-deformationproblem.gif

I could imagine this is somewhat intended. I do not know how joints are handled internally but I could imagine that the deformation of the middle bone is not seen as some kind of rotation if you move the joint (translations/movements basically get ignored/nulled when calculating normals). So it’s possible the engine just sees the movement as you kind of redefining the bone (basically if you rotated the bone/moved the joint differently before skinning you would not expect the normals to change either right?). Like I said this is just my guess, so I could be wrong.
What are you trying to do? Is the gif just an example or is that the actual mesh you wanna deform? If it’s the latter you could probably create the mesh procedurally and just use empty scene components instead of bone joints to control how it’s created. That would let you calculate and specifiy the normals yourself.

If you just want flat shading you could also “cheat” a little and just overwrite the normals in a material. Just plug the world position into the ddx and ddy nodes, normalize their outputs and then plug those two into a cross product and use that as the new normal (you’d might have to change the order of the cross product inputs if the normal seems inverted). That’s a really cheap way of recalculating normals but it only works for flat shading.

Just closing this off as we were able to find the answer to this solution. We resolved this in 4.20.3

There were two problems for us:

  1. Eyelid normal artifacts when exported with the eyes open. We had to export with the eyes closed but the normals would still not deform during animation
  2. Facial shapes would not look right, especially wrinkles and folds. The skin would look flat as the lighting didn’t change during animation

The Epic team asked a bunch of questions which prompted us to try these settings (thanks team!).

The solution was to enable the following:

  1. Support Compute Skincache
  2. Force all skinned meshes to recompute tangents
  3. Use GPU for computing morph targets (blendshape animations didn’t work without this)

This fixed the problems above.