Hello
I would like to show you a script which allows to generate, manipulate and align vertex normals.
Everything is based on layer system.
It has 3 different generation algorithms:1. topology based2. using projection gizmo3. projection normals from other mesh ( transfer normals )Every mesh can be divided into up to 7 layers and each 'normal' layer can be calculated independently.
under this link is short description video about this script:
https://www.youtube.com/watch?v=Sy47E5cWTDAunder this link there is a tutorial how it works and how to use it:
https://youtu.be/o31PbWjFcs8Probably it is too long but I wanted to show whole setup process.
Link to store:
https://gumroad.com/l/VertexNormalToolkitAdam
Replies
1. wait for opinions those who bought it already
2. 'believe' it is working, and believe me... it is
3. send me a mesh ( if it is possible of course ) and I will prepare it for you and send back so you will see what result you may expect. If you will, make sure it will be challenging. And that's good in my opinion way of making you sure it is working as expected.
4. Use other available tools
But like cptSwing said; If you want to sell it you should probably post a link to where it's being sold
I checked the website listed on your profile but it just shows an "Internal Server Error" message.
If you go to the YouTube video page he has all info in there. Including example models.
My apologies for missing this information but I didn't wanted to throw the 'price in your face' in my first first post here
Thanks you PolyHertz !
My website... I didn't established any....... shame on me...
I will add more models over time to try to convince unconvinced
Looks good either way!
Purchased your script. Finding it a little difficult to use, i would suggest to have tooltips for all of the buttons, its very unclear what they all do.
thanks
result is the same, but it is doing it in a completely different way. IFWN always takes mesh as a whole, calculates normals direction based on angle and face size and if face is bigger, it receives whole normal information.
"the box with dimples"
left IFWN right VNT. Well... what can I say... Just download examples and compare...
VNT - take polys from given layer and calculates normals only for this part of the mesh. This way, normals can be calculated not as topology is determining but as user would like to have it. Try to use IFWN on any ball attached to youtube videos. you will see the difference.
Those balls image above were not calculated using IFWN, just last example was calculated using VNT.
Left IFWN right VNT.
I'm sorry if IFWN author will read it, but I do not have any negative intentions. And this post is NOT intended to diminish any value which IFWN definitely has. It is just pure synthetic comparison
I bought IFWN and it was not possible to recreate the same or even similar result like on the right. Sometimes script must be 'smarter' than topology Thin and long triangles are the main killers if it comes to managing normals on the mesh. As I said, topology is not enough in many situations...
"it combines this with a Normal-Thief-like function to transfer normals from other meshes",
Again result may be the same, but way of doing it is different: In 'thief' you need a HP ( or other in general ) mesh, which must ( more or less ) be the same as LP mesh, just to transfer normals correctly. And always takes mesh as a whole ( UPDATE! now it can use polygon selection to determine area where normals will be projected). VNT on the other hand since v1.20 is a standalone 'being'. You do not need a 'valid' HP mesh, it can be generated from cone or plane gizmo. It will give you a very consistent mesh which can be further deformed and then you can use it as a source of normal direction. Or you can use any other mesh. And you do NOT need them as high density object all the time. Script is tessellating it just for the time of transferring normals and then brings density back to low poly. And you can pass this information to selected layer. Also you do not need HP mesh to every part of LP object, just for the area where you would like to use it.
Not bad as for a 'clunky' script isn't it ??
Sorry if it sounds rude, but if you can make mesh on the left looking like this, using mesh on the right let me know.
Because I wasn't able to recreate it using any other way than VNT.
Both of them are free for download to test and compare here:
https://drive.google.com/drive/folders/1RWkJ1FPILv-Jl3neu-elZxUGbz8lqPNy?usp=sharing
There are others too, even more complex.
"what does the projection do, how are the sphere/cylinder etc meshes generated"
This is the true power of 3ds max. Linking spinners, making one relative to another ( look at https://www.youtube.com/watch?v=jLwanJo5BSE tutorial on youtube, pure osomness ! ) So I used a regular primitive shapes as a reference to make whole alignment easier and as source of initial data used for normal generation, and the rest is just math So gizmo itself is not needed, you can calculate normals without making it active. AND, you can have more than one gizmo at a time. 5 layers ? 5 gizmos, all of them active, and you can quickly iterate through them to get best result possible. This type of "projection" is completely bypassing mesh topology. So you can align normals in any direction you like. This is super useful when topology is uneven, bad as topology can get:
or is extremely low poly and still you can achieve perfect result.
The same with arrows. I needed a custom gizmo which direction is pre calculated so user will see where normals from given layer will be pointing at.
Edit normals modifier is sloooooooooow. So normals must be calculated in a separate pass, when there is no user interaction.
"how do you define the layers"
to figure this out it took me 3 months Literally day by day of thinking and trying different ways and technical approaches.
And through reading max help pages I have found information about polygon, edge and vertex bits. Every sub object has 32 bits of information like: is it selected, visible, inverted, belong to smoothing group, dead, inactive and so on. But max is using only from 1 to 26 bit. Last 7 is not used at all. NOW it is So 7 bits - 7 layers.
"Can it store the edited normals in the modifier stack"
Short answer is - no.
Longer answer : if mesh is calculated as a whole at once, yes, you can store normal information in last used modifier Edit normals.
But 3ds max has only three ( four ? ) possible places where explicit normals are preserved. Editable poly, editable mesh and edit normals ( edit mesh ). Two of them (edit and editable mesh ) are NOT storing mentioned bit information. Especially those last 7. So I cannot use it because whole layer setup is completely lost.
So the other two left only. Because whole layer system relies on polygon assignment I need a constant access to this subobject type.
This is why you can switch between layer setup and regular view at any time. This also makes possible to calculate normals in any order you wish. And with each calculation previous result is preserved. I could keep this result ( probably ) in separate edit normals modifier but I do not see a bigger difference. And it would make more complex script than it is needed. Why you would need 7 edit normals modifiers ?
So yeah. Main idea with layers disables possibility to keep whole modifier stack intact.
And some prons:
- setup whole object takes more time than just select and press one button.
- even simple object to look really good require some setup, some polygons assigned to layer
This script is NOT meant to be efficient while dealing with simple meshes. It is written to provide AAA shading quality to any mesh you can model. If you will find an example where this script cannot give you the result you require, let me know.
This is why I was asking for challenging object, where 'there is no hope' for good result
If you wan't more it is a good idea to watch 'looooong' video. All I have written here is explained there while presenting ways of using this script and methods it gives.
P.S. 2
In case you need some 'unbiased' opinions, under the long video there are few comments from people which bought it. Ask them
"Looks good either way!"
Thank you very very much
I have added tooltips at some point and they flooded whole UI. So I removed them
I will add an option to turn them on/off in settings. But not during next few days, sorry.
There is much shorter one:
https://www.youtube.com/watch?v=Sy47E5cWTDA
but it does not explain anything. Just pure 'before after'.
Script has a lot of options so I thought it will be best if I will describe them in one ( even long ) tutorial.
But you are right, some sort of pdf guide ( just guessing ) would be appropriate.
If you will have any problems using it please let me know. I will help with everything I can
Thanks again for your purchase, much appreciated
but how I could use it... rewrite ~4000 lines of maxscript into nodes ??
as I wrote above, VNT is written in max 2012 because I have a license for this version only.
And in my case buying ( renting ) a new max version just for MCG is pointless.
Thank you !
If you do not need this tool, I do not see any reason to buy it, but if you will, thx x 1000
It is not like I have abandoned procedural / modifier solution completely. Current state is a bunch of trade offs to make it as easy as possible
( to do too ) with flexibility not available anywhere else. And to be honest I have a few ideas how to make it non destructive.
Time and tests will tell.
If it is possible, could you share a link to this forum? I wonder how it can develop further
It's the same, because, beeing curious, i bought your script before my statement, and we're doing the same thing with basically the same algo. So i can only compete with this functionnality.
As i said, you had good ideas, you do a lot more than me, automatism, combining with face weigthed normals, creating primitives, layers... so on. But i keep my statement on intuitivity. Destructive workflow will be a no for a lot of users. But the workaround is certainly not easy.
I keep stacks and work with any type of objects but it's certainly not great for managing a lot of projections.
Indeed... very similar result. I'm aiming to a situation where whole object has only single smoothing group. That's the whole point of mid poly modeling. And if there is no other way to get the desired result using some hard edges.. to support them whenever it is possible.
And as I wrote, the longer I think the more I need to figure something out to preserve modifier stack intact. somehow...
And thank you for your support, much appreciated
In this case every edge where two or more colors meet I will end up with hard edge.
There is a way to have smooth groups and at the same time single vertex normals per vertex, but how it is read by engines importers ? What will happen when user will use some hard edges and merging normals will not be possible ?
Max bit masks are 100% agnostic in this regard. They exist in max scene only.
But now, I have single smooth group:
And the order of calculating normals is like :
Calculating normals with single chamfer is easy :
1. non calculated object, like max wants 2. first is grey layer, 3. then yellow, notice like grey layer is loosing normal information ( green layer looks terrible but it is not time for his layer to calculate, yet ), which is correct. Now yellow takes all. 4. and finally green is overtaking normals only from the edge between yellow and green.
If yellow layer would be not calculated grey and green layer normals would point in more or less the same direction making whole object look flat.
So the whole idea is to pass part of the normals from layer to layer in ascending order of importance.
And the result before and after:
No hard edge is used.
And if you have single chamfer is it super easy to recreate normals direction.
Real fun starts when artist will make chamfer with 3 or more steps... then without proper vertex weighting it is barely possible to make it look good.
You may wonder why I'm trying to avoid hard edges as possible.
Every hard edge is a 3d software 'cheat'. Every game engine is splitting vertices for every hard edge. The more smoothing groups you have, the more vertices you will have in the game. So the whole point is to maintain vertex count relatively low while achieving the best light reflections on surfaces like in this example.
The more curvy shape is, the more details on it like chamfered edges, the harder is to achieve AAA result.
And this script does exactly that
There may be other reasons smoothing groups won't work. I'm just brainstorming since you mentioned you had a seven layer limit. But honestly 7 is plenty. Even with smoothing groups I'm not sure I've ever used more than 3 or 4.
I'm afraid, using SM to something other than smoothing groups of polygons will lead me into problems I'm not aware of completely Also SM setup will have to go hand in hand with layer system and this is not guaranteed at all. Now you can have single layer with 32 smoothing groups and all 'clicks' without any problems. User can setup an object how he wants, and at the same time it is possible to divide and object to any layers layout he needs. All is independent.
I did have to watch about 40 mins of your video to figure out how to use it, but it's very easy to use once you know how it works.
Thank you very much
Actually this loong video everyone is complaining about is for those who obtained a script
I'm glad you like it and managed to achieve some satisfying results. OHO !
Ok then. If I will be able to get into this forum will be osom. If not, I'm waiting for the news you may have. Thanks anyway
Sorry for the delay, but I'm making this script in my free time only.
Vertex normal information is quite fragile, perhaps you could store the resultant normals in a vertex colour or UVW channel as a backup? - I'm envisaging issues with combining and chopping up meshes.
It should be possible to make this a single, live modifier from max 2016 upwards - it'll need some rework in terms of mesh manipulation
I'm trying to make it as neutral as possible in therms of data usage. This is why I'm using unused polygon bits only.
This information is '3ds Max only' so it will not affect / exclude any other object data.
Vertex colors / UVW channels may be in already in use by someone, so those data should not collide.
I'm not a big fan of renting software. This is why I bought (few years ago ) granddaddy 2012 and still it serves its purpose.
Of course this is a big factor for possible ways of doing tools.
But as long as Autodesk will not change the way vertex normals are preserved or even calculated I do not
know if any 'external' tool can replace this unwanted result.
That was the main reason why Editable Poly is always as a base 'state' for normals calculation - to keep them between layers calculation.
one benefit of storing it in a channel would be portability to other apps. the explicit normal stuff is a bit fragile / unsupported
scgstudio : the big change at 2016 was the ability to commit mesh edits in a scripted modifier in the same way you could previously with a c++ one. I moved a few of my mesh editing scripts into modifiers a while ago and it wasn't a massive job to port them unless you were adding/removing geometry.
I agree on the forced update thing as a rule but to me that change is a pretty significant upgrade so it might be worth considering
Here is an example of a FWN modifier, but it doesn't work. If you remove the modifier definition code it works just fine on an editable mesh.
BTW, In Max 2015 and newer you can set explicit normals with the SetNormal on an Editable Mesh. It's so much faster than using Edit Normal mod. Most people prefer the flexibility of a modifier though.
Thanks for this info. Now I'm closer than ever to consider an update to 2016.
2018.4 - super stable, I use it at work everyday and sometimes I'm truly impressed regarding what scene holds
And yeah, using 2018.4 here as well and am reasonably happy.
Well... I'm still thinking about this limitation. I have a few ideas but it is hard to judge which will be the most appropriate from user stand point.
One is to add edit poly on top and from this point start to manage layer setup. As normal generation result use edit normals modifier as top most modifier. This way nothing below will be lost. This has some possible issues:
What will happen when you object is scaled or rotated ? Some algorithms are heavily based on 'sane' state of picked object.
I could add Xform modifier first, before edit poly but when you want to remove it some really weird things may happen.
So yeah, this is some sort of solution, preserving the whole stack, but this time no scaling rotating would be allowed.
So some limitations will be still present.
Other method is to make a 'hidden' instance, make whole setup on it and then transfer all normals to original object.
Either way I will figure something out for sure. It just takes time
Yep, I'm currently writing a whole help system embedded in script.
Every button clicked with ctrl pressed will display all in depth information in separate window what it does and why.
When I will finish this, I will have all information needed to make a pdf file.
I'm thinking ( thinking ) about a 'presentation' version also. It will show every possible combination of settings and clicking on every button will display all needed information.
I saw you wrote on Itch.io... they cover it too.