Page 1 of 1

Model normals not updated every model frame

Posted: Wed May 15, 2019 6:05 pm
by Nash
Test file sent via PM to dpJudas.

Steps to reproduce:

Just walk up to a door and press +use to open it. The doors are actually Actors with an animated model (2 frames). Using gl_ssao_debug 4, you can clearly see that the model normals are only correct for its initial frame - as the model animates, the normals aren't updated.

Note that the model only has 2 frames - opened and closed. Interpolation is taken advantage of here to make the door look like it's opening and closing smoothly. If you disable model interpolation (gl_interpolate_model_frames 0) you can see the true nature of the model animation. :) I am only mentioning this detail because if this ticket were to be fixed, the model normal recalculation would have to take interpolation into account.

Same in OpenGL and Vulkan.

Re: Model normals not updated every model frame

Posted: Thu May 16, 2019 2:47 pm
by Marisa the Magician

Re: Model normals not updated every model frame

Posted: Thu May 16, 2019 3:03 pm
by dpJudas
I can't remember what I pushed back then. But whatever it was, seems it broke again (or was never fully repaired).

Re: Model normals not updated every model frame

Posted: Thu May 16, 2019 4:10 pm
by Nash



@MK: not sure if what you reported is the same problem but take a look at these. Door closed and door open. Notice that in the opened one, the normals of the swinging part of the door is completely wrong.

Re: Model normals not updated every model frame

Posted: Thu May 16, 2019 4:39 pm
by Nash
Conclusion: this is a fault of the Blender MD3 exporter I'm using. It seems that normals in an animated MD3 has to be recalculated per-frame (???????????) and the exporter currently only writes the correct normals for the first frame.

I was wrong. It's not the exporter's fault. Here's the real cause of this problem:

I parented the door mesh to the door bone without an Armature modifier (just plain object parenting) - this will NOT work because even though it LOOKS like your animation is working, Blender doesn't really "see" the transform, therefore you won't get the correct normals for every frame.

I fixed this by properly parenting the door mesh to the bone with an Armature modifier, be sure it had the correct weight painting (it's just one bone, basically select the entire mesh and give every vertex a weight of 1.0), and now the normals are exported correctly every frame.

Can be closed I suppose.

Re: Model normals not updated every model frame

Posted: Thu May 16, 2019 5:07 pm
by Marisa the Magician
Oh...