Search code examples
3dsmaxnormals

3ds max: Recalculate normal without using reset XForm


I have a model with sort of weird normals (see this image: recalculate normal). As the model contains animations, I don't want to use 'reset XForm', as this basically means recreating all animations. Is there a way to recalculate the normals without using 'reset XForm'?

Thank you very much

Edit: Sample model can be found here


Solution

  • The "Edit Normals" modifier should do what you want. It has a "Reset" option which resets normals according to smoothing groups. (You might want to adjust the smoothing groups below the "Edit Normals" with an "Edit Poly" modifier prior to resetting the normals)

    Edit: Unfortunately the "Edit Normals" modifier fails, when the normals are distorted due to a Non-uniform scale, which is applied to the object. 'Edit Normals' unfortunately does neither support scaling for the normals, nor are any coordinate systems taken into account. So it is always a good idea to apply a "Reset XForm" prior to animating an object.

    If it happens though, that an animated object has a non-uniform scale, you're only left with these options:

    • Apply a Reset XForm and redo the animation
    • Adjust the normals via Maxscript. The Edit Normals Modifier is accessible via Maxscript see Max Script help for Edit Normals Modifier. This will be pretty tricky though, since also in this interface you can only move and rotate normals.
    • Modify the "Edit Normals" modifier. Its complete C++ source code is available in the 3ds max SDK. I think it's simpler than the max script approach, since you have access to all internals and can use common matrices.
    • If your goal is to export the model e.g. for a game, and you have access to the exporter source, the simplest approach would be to clean up and re-create the normals in the export process (you will have to export the normals somehow anyway).