Vertex Normal Toolkit

4 votes
Date Updated: 


This script can generate, manipulate and align vertex normals.

Everything is based on layer system.
It has 3 different generation algorithms:

  • topology based
  • using projection gizmo
  • projection normals from other mesh ( transfer normals )

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

version history:

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 due to max "reasons" :

-  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 and add edit poly modifier, 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. From 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 bend with negative degree so its range is from -360 to 360 degree. See second screenshot attached below.


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 release 

known issues :
edit mesh and editable mesh are a 100% blockers when used with this script.
workaround for this is to use edit mesh / editable mesh at the very end and use it on a copy of non instantiated object.

Version Requirement: 
works on 3ds max 2012+, probably will work on 2009 too
Video URL: 


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
Amaralin's picture

VNT Review

I've been working on several of my own projects and Marketplace packs for a while now and trying to incorporate the 'Star Citizen' technique. My decal workflow is in order I just needed to revisit my modelling process and the need and use of chamfers to support weighting my models was new to me to say the least.

I honestly have to say as someone who jumped into this without being sure if this was for me it's excellent and a great expert toolkit to have on the side as you go. My only stumbling block to date has been not being familiar with Max (Maya background) which resulted in me having to contact SCG Studio numerous times with some rambling large emails which highlighted to me I also had holes and flaws in my own workflows. Each and every single time I asked for clarity regarding his toolkit and even surrounding things that are not directly related to VNT I received large and detailed responses which I think speak volumes for the author. On some occasions I have had 1 on 1 Skype tutorials explaining a whole variety of things related to how to use VNT and how to improve the use of this on my own assets and models when I found myself struggling with various shading issues.

All in all though it can cover pretty much any situation so long as you give it a chance. It may be a while but when I get the go ahead to release images of the work (the aim is to use this toolkit to weight everything across our environments) I will also throw them up here and can't wait to do so.

Honestly - all in all an absolutely superb toolkit.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.