Vertex Normal Toolkit for 3ds Max

44 ratings

Vertex Normal Toolkit. Script for 3ds Max 2012+ which can edit vertex normals.

If you look for a tools, which will aid you in export asset process to Unity3D and Unreal Engine 4/5 take a look :) :


It calculates vertex normals based on: topology, using projection gizmo and can project normals from other mesh. Everything is based on layer system.

Every mesh can be divided into up to 8 layers and each 'normal' layer can be calculated independently.

This script supports any topology and any chamfer type including quad chamfer with unlimited subdivisions.

To see it how it works click here:

to see how it looks like, you may download some examples here ( fbx files after the import are for preview only):

Documentation link, please read it before You will decide to buy :

If you decide to buy VNT, MMVNF will be for free:

There is a separate zip file with both tools included in the download section after the purchase.

If you are unsure if VNT script will serve you well with your meshes, you can send me some example to try it out. I will gladly test it for you for free and send back :)

This script is provided "as is" which means I take no responsibility whatsoever for any damage this script may cause. But because it was tested on people, I don't think it will cause any problems :)

Still I would like to encourage you to make first tests on copies of your meshes / scenes... just in case :)

If you think this script lacks some cool features let me know, I'm open for ideas :)

There is a problem with VNT ( explicit normals ) and Corona renderer.

VNT is making explicit normals which are not fully supported by Corona.
Here is the link to the forum related to this topic:

It is possible to have shading artifacts even if mesh looks perfect in the viewport.

To make it working correctly you can do two things:

  1. Add edit normals modifier, select all normals and break them with average setting enabled. If you will keep it as modifier, your renders will look ok, and if further adjustments are needed, remove this modifier and add it again before rendering.
  2. enable developer / debug mode in Corona settings. go to performance tab and set Terminator Handling Shadow Shift to 1. It is set to 0 by default. This method unfortunately is not working for every one, but it is worth trying as it does not require any changes to modifiers stack.

You can use this script in all your commercial products without any time limit.
All updates are free forever.
Full license available below and inside of script.

Script is not encoded into mse.

To install it, as usual, drag and drop mzp file into viewport and all will be correctly setup. Restart 3DS Max is not required because all scripts will be run at least once, all icons will be refreshed and new macro will be ready to be added to any toolbar.
Macro button can be found under SCG TOOLS category.
This zip file contains two files:

  • vnt.mzp
  • mmvnf.mzp

mzp is to make first installation or to make an update of existing files.

ver 1.29

  • fixed startup error known in 1.28 ( update from 1.26 was needed )
  • no need to update from 1.26 / 1.28 anymore but it is possible if needed
  • hard edges support: when using gizmo projections, smoothing groups are ignored. Previously there was an error if vertex normals count was higher than vertices.

ver. 1.28

  • 8th layer added ( hard to explain why I didn't add it earlier, really )
  • some UI / usability fixes and improvements, some icons adjusted for future VNT version(s)
  • no more material slots in use
  • using single material scene only to preview layers colors
  • BUGS ! discovered but not fixed :
  • second layer ( usually green ) was using bit 27th. Looks like this bit is in use by edit poly modifier.
    • repro :
      • select at least two meshes, one of them must have a VNT setup
      • and must use 2nd layer. Do nothing with them, convert to poly.
      • pick mesh with VNT setup and you will get 2nd layer empty
      • with a notification "select non assigned polygons".
      • pressing this button will select exact polygons as those assigned to 2nd layer.
        So yeah, this has been NOT fixed, but I have moved this "bad" bit to 8th layer.
        2nd layer is using "new" one - 25th bit and 8th one is using 27th.
        this problem will be still possible to recreate but this time not that much I guess
        as any of Your beautiful meshes was not using 8th bit in VNT setup.
        no other bits are affected by this issue. If you find any, let me know.
        there is no reason to remove it as one more layer may become useful
        just remember about this issue. If this is Your "day breaker" do not use 8th layer.
  • there is a problem with symmetry modifier. When applied mesh will have some serious problems with layers and some faces will be excluded from any layer. Hard to say why it is like that but looks like symmetry modifier is using bit 25th for faces for some reason( max documentation is saying something opposite O_o ) and I need to investigate why it is like that. If symmetry is your daily use modifier, please use first 7 layers only.
  • broken backwards compatibility with old VNT setup has been fixed
  • vnt.ini moved from #plugCFG to vnt install directory : getDir #userScripts + "\\vnt\\vnt.ini"
    • this way, if You are using custom script folder ( to keep it in case of max reinstall ) all settings will be preserved.
    • old vnt.ini file is still at previous location :
      • getDir #plugCFG + "\\vnt.ini" use this command to get old vnt.ini file.
  • this and every next version of VNT will be NOT compatible with old vnt.ini settings.

ver. 1.26

  • in projection mesh mode there was a chance to redirect normal which was not belonging to selected layer, it was possible to get this bug when mesh has reset normals and "Generate Normals" button was pressed.

ver. 1.25

  • non subdivided projection method has different algorithm; this will allow to generate vertex normal direction for foliage like assets
  • fixed bug when selecting gizmo projection shape, it was possible to set non existing option
  • fixed size of some buttons so they are no longer scaled and look much more clear
  • every subobject selection type is supported.
  • No separate file due to lack of backwards compatibility.

ver 1.22

  • generating normals from gizmo supports hard edges between layers
  • generating normals from projection supports hard edges between layers
  • generating normals using topology where faces are sorted by area and normals are calculated form smallest to biggest faces
  • this version does not contain a separate file in zip as it is not backwards compatible with the rest of the files.

ver 1.20

  • it is possible to take projection gizmo and use it as regular projection mesh. To make it right click on gizmo selector while setup ( tools ) button is active. This way you can generate normals for one area using more than one projection mesh combined as single object. Less layers are needed this way.
  • fixed bug where there was no any subobject level selection active and script was trying to assign it anyway from variable
  • fixed bug where mesh has more than one material applied (multimaterial) and selected polygon was assigned to any layer.
  • room this point entire mesh had first material from multimaterial applied.

ver 1.10

  • assignment faces selection to layer has been improved. Now its ~ 60% ( 1,4 sec to 0.45 sec ) faster than before
  • with no lag in between.
  • now it is much easier to calculate normals for round and concave areas: plane projection gizmo can be bent with negative degree so its range is from -360 to 360 degree.

ver 1.05

  • fixed normals direction when generation gizmo is set to plane and length bend angle is 0 ( angle bend upper spinner ) while width bend angle ( angle bend lower spinner ) is greater than 0, normals are generated incorrectly.
  • fixed when changed material id on polygon ( when mesh is not in preview mode ) was lost when "preview layers" button was pressed. If polygon id was changed when mesh was not picked by script all settings are preserved.

ver 1.03

  • fixed incorrect length of arrow helper for plane gizmo
  • when first bend angle of plane gizmo was set at zero degree and second was higher than 180 degree preview arrow helpers had an incorrect direction. It had an impact on preview of those arrows as well as final direction of generated normals using those settings.

ver 1.01

  • fixed crash where after generating normals using "GENERATE NORMALS" button
  • selected projection mesh has been deleted and normals were generated again using the same button

ver 1.0

  • initial state
  • I was sure there is no bugs in this tool, this was fixed in the upcoming bugfixes ;)

Contact info:

polycount topic:

This script contains part of great script written by Martijn Buijs.

"My" version of this script has been  improved ( it is ~3x faster than the original ) and half of it was removed due to optimization.

Original code is available here :

Optimized version is here :

LICENCE ( included in script ):

End User License Agreement

This EULA shall apply only to the software products supplied by Adam Wrotek aka SCGStudio.

Use of the software

• One license grants the right to perform the installation of the Software according to the license type when purchased.

• Each additional installation of the Software above the bought limit requires an additional purchased license.

• You can use this software UP TO limit of licenses You have purchased. So if You bought 5 licenses You can use them on literally 5 computers.

Making Copies

You may make copies of the Software for back-up purposes, provided that you reproduce the Software in its original form and with all proprietary notices on the back-up copy.


• Modify, translate, reverse engineer, decompile, disassemble (except to the extent applicable laws specifically prohibit such restriction).

• Reverse engineer, decompile, disassemble, modify, translate, make any attempt to discover the source code of Software, or create derivative works from Software.

• Copy the Software (except as specified above).

• Rent, lease, transfer or otherwise transfer rights to the Software.

• Remove any proprietary notices or labels on the Software.

Technical Support

Technical support is available primarily through emailing Adam Wrotek ( ).

It is possible to make an on-line direct contact. Adam Wrotek can provide direct support, however it needs to be followed by e-mail contact first.


The license will terminate automatically if you fail to comply with the limitations described above. On termination, you must destroy all copies of the Software and Documentation.


This Software is provided on an "AS IS" basis, without warranty of any kind, express or implied, including without limitation, any implied warranties of merchantability,

fitness for a particular purpose and non-infringement of intellectual property of any third party. This Software has inherent limitations including design faults and programming bugs.

The entire risk as to the quality and performance of the Software is borne by you, and it is your responsibility to ensure that it does what you require it to do prior to using it for

any purpose (other than testing it), and prior to distributing it in any fashion.

Should the Software prove defective, you agree that you alone assume the entire cost resulting in any way from such defect.



This disclaimer of warranty constitutes an essential and material term of this agreement.

If you do not or cannot accept this, or if it is unenforceable in your jurisdiction, then you may not use the Software in any manner.

Title, ownership rights and intellectual property rights in and to the Software shall remain to Adam Wrotek. The Software is protected by international copyright treaties.

360 sales

You will get AAA nurbs shading quality for polygonal meshes.

Copy product URL


(44 ratings)
5 stars
4 stars
3 stars
2 stars
1 star

Vertex Normal Toolkit for 3ds Max

44 ratings