Hello polycounters
I'm a normal mapping novice who is currently practicing with the technique and hoping to achieve a higher skill/comfort level.
I'm working on understanding how any smoothing group info I have on my low detail model is getting baked into the normal map.
I thought other beginners might benefit from seeing an example of how smoothing groups on the low res mesh are affecting the normal map directly:
Now, I was expecting any smoothing group info in the high detail mesh to get baked in, but was surprised at first to see smoothing in the low detail mesh having an effect.
I had been thinking of Normal maps with the "clay detail over a simple faceted styrofoam mass" analogy. Smoothing groups themselves don't affect geometry, but rather how normals are interpolated across a surface during rendering. I thought the smoothing groups of the low detail mesh shouldn't be affecting the Normal map at all.
But I think I get it now. It seems more intuitive for me to think about normal maps as storing the difference between the "apparent when rendered" normals of the two meshes, not the actual geometry or surface curvature. So in the examples above, the normal map is essentially "reversing out" any smoothing on the low detail mesh.
Now, the question I'm left with is:
Should I use separate smoothing groups on the low detail mesh at all?
One one hand, it seems that the "smoother" normal map generated by the uniformly smoothed low detail mesh would be less prone to artifacts in-game. These seam artifacts are noticable on extreme closeup when I render in max, but they're not terrible. They become more prominent in the viewport, and may be unacceptable in-game, depending on the engine.
On the other hand, if you need to develop assets for multiple engines/platforms, then using smoothing groups in the low detail mesh with "creased" normal maps would allow a single asset to work reasonably well in both cases. (If normal map rendering is unavailable or disabled, at least you get smoothing groups.)
My first instinct is to avoid smooth groups and the crease/seams normal maps, if only because games are becoming so photo-realistic anyway. Does anyone have any advice/experience with this?
Thanks,
- ymalaika
Replies
If you want to use SG's you have to apply them after rendering the normalmaps. This ususally works fine. E.g. you could have two lowpoly-models: one for rendering with one continuous smoothing group and one to export with different SG's set.
Another case where you might need to set SG's,(depending on your engine):
If you have rotated chunks of uv's in your normalmap - e.g. in order to make better use if your uv-space - and you get strange artifacts in your rendering where they touch each other on the model, try to set different SG's for each of them.
If you don't use smoothing at all you will end up with lots of bad seams, since you will miss bits of the high poly model when baking down.
Polygons are cheap nowadays, textures are what really kills performance. If you need a row of polygons more to make an egde work with the desired smoothing angle, go for it.
Next-gen also means more polygons to play with!
You can expect from a normal map to fake detail, but it wont fake the smoothness if it's lacking (or is overexposed) in the lowpoly model.
All the smoothing in the lowpoly model will affect the baking, If you have stuff that looks funky, chances are it will be baked too. If edges look unsmoothed in the low poly, they will look like that when baked too.
Sometimes it helps to Subdivide the low poly model once or twice for baking, that reduces the reach of any smoothing artifacts to smaller areas.