Tutorial to improve Shading of your low poly models and get rid of hard edges or surfaces that heavy depend upon normalmapping.
It will introduce techniques i use that makes normalmapped model looks better.
Tutorial for Superspecular soft edges
tecniques i used on this model to let it perform good edge specularity without normalmap smoothing group with only a normal shader with some reflections to show the precision of shading(no bumps or deformations) compared to other unique smooth groups models.
Moderator Edit: there's a similar tutorial here:
http://frostsoft.blogspot.com/2012/01/shading-interpolation-vertex-normals.html
Replies
Looks good tho
[edit] oh ok I found it. Man you can remove maybe 90% of the text haha
Interesting, will try asap. Sometimes to get a similar look I bake 'lowpoly to lowpoly' and blur the edges in photoshop. It looks similar but your stuff is much lighter since no maps involved. Smart!
[edit 2]
Ok I tried it, it does look very good!!
However I have a problem (tried it in Max) : I did it on both a cube and cylinder, it works great, but the highlight somehow disappears when crossing from one flat face to the next, across the bevel. Any idea on how to cheat this? Other than than it does look very cool.
Not sure why you mention edit mesh tho, you sure mean edit normals?
Looking at the result, I have to say it is very good looking and simple to create. But that's for a box, I wonder if it doesn't become very hard to do for more complex object ?
I do think perhaps this process could be improved a bit with a script, it's kind of tedious to do for every face.
Also: what about exporting to game engines, surely not all of them support application exported normals, and will try to generate their own ?
edit: pior,I don't see any of that here ?
I'm already shaping in my mind a script to automate the process on more complex objects (in 3ds Max). Look for contiguous flat polys, apply the Edit Normals modifier, collapse, that's it. Thresholds here and there to refine the process. I'll be back when got something working.
I'm interested to what happens when exporting to game engines too, as I still don't have any experience about it. Need to test its compatibility and results with normal mapping too.
Edit: I'm afraid single polys to be made flat shading would require to be processed by hand, because I can't see a way to sort them among the others. Auto selection would need at least two contiguous flat polys, and it's still not enough, as it could get faces on bevels too. Still thinking...
Pior: About baking lopoly-to-lopoly - you're talking object-space normals, right?
How about thinking about it in a different way? This just dawned on me:
why not work with a script that's about selecting the faces other than the ones you average with the current method ? It seems like a better way to work, setting the adjacent normals correctly, since you might not always want to average all normals of a face. Imagine a face that has one of those nice bevels at the top, yet goes into a big curved surface at the bottom. You would probably mess up the smoothing by averaging this face's normals.
I guess it would even be best not to work with averaging four normals per face, since frankly, that's a bit blunt. I think the script should mainly provide the user a more intuitive way of changing these normals.
That's true about my engish is something long and bad ahaha.
Yes i mean edit normals.
For Pior:
In next steps i will show how to fix all the related problems at least manually.
I have to rewrite some better scripts to automate some process and avoid some common mistakes my actual doesn't do automatic iteration on selection groups properly so i cannot do all the process within a second with a button press.
i have to solve some special cases i used to solve manually.
The real problem with this technique is how max manage normal data.
It doesn't go together with edit poly so some changes in edit poly can lead to complete mess in normal data due to changes in vertex order.
At beginning i had to do the normal process 2 times but now i have learned when to do it and how to avoid common max crazyness.
For now try to make the process late as possible.
With your feedback i hope to write a better and smaller article and all related tools for my one magic button workflow.
xoliul: Average normal is only for planar faces with only fillet around with a script you can do other kind of curve surfaces with normal interpolation that evaluate only the actual selection and bake it.Actually a kind of smoothgroup.
As you see i use it a lot on any kind of surfaces not only planar ones.
I'm trying may kind of automatic fix and selections everyone has it pros and cons.
i have to come to a solution that can fix with one button at least 90% of the model.
now i'm experimentin something that works with prior smooth groups the only problem is that chamfers interfere with automatic smoothing group creation and i have however to recoglize what is surface and what a bevel.
I strongly believe that the key is in the tools when i will come with a decent one button automatic script i will release it.
i edited because i come with an idea...i have to try to automate all in edit poly and not in edit normals(ehm i ater read that syncviews has the same idea) i don't remember if it is possible.I'm thinking to convert all to a plugin because i'm hating maxscript sintax and maybe in sdk i can avoid some limitations.
Soon i want to try a script that do a preliminary job before chamfering.
Please if you like it leave comments also on site maybe with links to images of your models you will do with this technique.
Could you elaborate, or rather, simplify.
I've learned from some people at work, if u apply an editor normals to your lowpoly with the normal map applied in realtime in the viewport , it fixes them up quite nicely alot of the time.
mlichy : yes you can use it also as postprocess to fix normals, but if you apply it from the beginning you rarely have something to fix and the overall quality is better.
A curvature defined by model normals is in floating point , normalmap is based on filtered low definition pixel samples.Good normals let you create less gradients in normalmap in low frequency details.
Interesting stuff here, I look forward to developments. I think similar scripts already exist for Maya, but I can't remember the name now. Will look around.
there's also a couple technical-savvy screenshots for those interested.
Kind of get what you are saying, but it seems like a hell of a lot of work that could only be done on simple, non-organic models.
btw what does this mean?? "No normalmaps = lot more horsepower + memory with no tangentspace structs as tangent and binormal vector3 in vertex that use the same space you can use on part of your models to have 3 other handmade uv sets."
Are you saying not to use normal maps?
had major problems baking normal maps from highpoly with this - but thats probably because im too stupid
I could be completley wrong, but in the end my green normal lines were indetical to the author's, so I take it that I did it correct.
vcool : you did it correctly.
I know that you mention deadlineproof that just burning on the normal map detail separately. But I'm thinking of objects that really would require the use of normal maps to catch the subtlety of the surfaces curves that doing without a normal map would be loss or raise polycount too high.
I guess I'm asking. Would there be a good way to know when this process is usable, and when it is not? Especially on the >same< industrial design model?
Somewhat separate, attempting to burn normal maps from these areas where you have applied that edit normals. That would create bizarre normal maps if attempted to burn from a high rez correct? Where the rg>B< channel especially has funky shading. I had a fellow artist hand me a model he did in maya where I think he did use that edge softening technique I think Mop is mentioning, but then applied a high rez normal map on top.. The resulting normal map was interesting.. I thought he had chosen the wrong world space or something at first, but now I wonder if it was this.
Good luck with making one for Max, guys!
i'm looking for a different kind of script that do all automatically.
It have to select surfaces surrounded by fillets recognizing them and apply to this surfaces the local interpolated normal.This will really speed up all the process.
Sadly this script is only in concept stage all script i have done so far are not so different from maya one.
Engines support vertex normals of any kind, it's just data
They can also be manipulated in realtime via vertex shaders.
Secondly,
Does this script actually achieve same as the 3DSMAX feature? I can't figure it out. Perhaps with the Type-in-functionality, but that seems way to time consuming to repeat multiple times.
Imma try porting such a model to Source today, and see what happens.
Great news i have finished the script now in testing it works with one button and it seem to be faster and better than any previous attempt.
the idea is really easy but worked perfectly for curvy and planar surfaces and give always the proper shading to all fillets too.
I have only to test it on some complex model.
Maybe to fix the script to let a workflow when you don't whant it applied to the entire model.Actually it apply a onesmooth group before to calculate so you lost all previous smooth groups.I have to find a solutio to keep wanted ones.
How come that after all these years of transitioning between oldgen and nextgen (yeah stupid labels but you all know what I mean), not a single technical artist ever pointed out that stuff? I mean they are the ones supposed to know that kind of things, how to make stuff look good using smart tech and so on. Makes me kinda bitter after fighting against ugly shading for so long using either handpainted stuff ruined by shading, or normalmaps looking weird because of the annoying 'gradient' faces not being managed well by this or that engine.
Really can't wait to play with that stuff more. Now that I look around I almost feel like I am seeing it everywhere hehe (looking at the very nice details in Forza3 for instance)
How do you mean? You don't even use the small color gradients in my left example towards to edges of the object? Does that that make much of a difference?
I suppose if you are able to optimize and overlap UVs you can save texture space since in this example most sides are identical.
The color gradients in the right hand is yuk, nobody wants those.
Tell me about it. I was feeling the same way yesterday. "How come nobody ever told me this before? It's so bloody simple.".
Now I just need to find a proper way of working with this. Anyone know a good script for this in Maya is welcome to share the info
Well I did a test and this feature doesn't work in Unreal 3. It doesn't make any difference to the normals. So while it's useful to know you can do this it's not directly applicable in that case.
I'm guessing that several other game engines wouldn't support this either. It'd be interesting to hear which engines do support this.
That's all this idea is based around, right? manual normal tweaking?
Pior: possibly the reason that it's not more widespread is that currently it's a lot of manual labour to get something which in many cases doesn't make any visible difference (eg. on characters you wouldn't do this). Until there's a magic button which can do what is shown manually here then it's gonna take a fair bit of time to do this for most complex models, time which isn't needed if you just manually add a couple of edges and bake.
I tried ASE importing a box like from the tutorial into Unreal, doesn't work, normals just get reset.
I made a quicky script to average normal in edit poly mod
[code]-- AverageNormal V1.1
-- Fucking average normal for selected face
-- 29 Septembre 2009
-- macroScript run on 3dsmax 2009 in edit poly mod
-- http://mathieujacquin.free.fr
macroScript AverageNormal category:"zOffTy Tools" tooltip:" AverageNormal " buttonText: "AverageNormal"(
--===========================================================================================================================
clearListener()
disableSceneRedraw()
---array pour stoker la face selectionn
- Use the "set to face" function and be sure to choose the "Match face normal" option.
- Note that the modified normals will be locked
- Then simply apply a "soften edge" normal modifier on the whole mesh. The unlocked normals will match the locked ones.
( Tested on 2008 )
That works only on simple objects, like the beveled cube. T_T
Try a cube with an extrusion, like the one in my example.
Almost got the migNormalTools script who greuh linked to working in a funtionally easy way.
1) Manually tweaked to get "hard" look where the extrusion/cube meets.
2) Way you described. "Set to face" w. "Match face normal" and then Soften Edge. Note the look where extrustion meets the cube.
3) Soften edge only, no "Set to face".
-Select all of the verticies you want to be on the same average plane
-go to the Normals Menu> Vertex Normal Edit Tool
-You'll have to at least nudge in one of the rotation axis to get the tool activate
-Rotate the tool around so the blue arrow is facing the direction you want the vertex normals to face.
I hope that helped a little bit, just another way to do it.
(you can also get to the Vertex Normal Edit Tool through the default shift-right click> vertex normals with the desired vertexes selected.
The first example without all the awkward hassling. I want an easy applicable process that you can use for a full scale project with a complex model.
One of my students figured out the last puzzle when using the migNormalsTool for Maya. This seems to be the easiest way of working with this in Maya that I have come across so far at least. I'm happy.
What do you think?
It works actually very well with a slight manual adjustment very time saving.
I will release a video of the script 8 hours from now.Now i have to go or my girl will kill me.
For Unreal 3 i'm pretty sure it works in ase i remember to have used it.Maybe some missing option . I don't have any installed game now to test.
Engine support is not a problem all engines will support it if people will use the technique.
Most part of engines actually doesn't recalculate normals.
So there are engines out there that will completely ignore your normals? Like I export a cube with hard edges, and get an average-normal pile of crap in-engine?
I think I'm pretty thankful I've never had to work with one of those.