ZBrushCentral

Generating Normal Maps for Low Polys with Hard Edges

Is there a way to have Zbrush compensate for the low poly mesh’s hard edge normals when generating normal maps? I could not figure it out after a lot of googling. xNormal can do it, and that has been my solution but I’d like to get all my maps out of Zbrush to save time.

I have started doing some hard surface sculpting in Zbrush and ran into this problem for the first time. It arises when you generate a normal map for a low poly object that has hard edges. When you generate the normal map from the high-res it adds that edge detail into the map, so when you apply it to the low poly that has hard edge normals they multiply and the surface ends up looking concave. Turning off sNormals (smooth lowres normals) it fixes the multiplying problem but then the rest of the map is faceted because it is indiscriminate about it; the resulting map is useless.

Attachments

Front.jpg

NM1.jpg

I am also interested whether there is any in-Brush solution? It bothers me for years already. So tired of re-baking in Xnormal or 3ds max for an actual low poly model to get rid of seams or normal map gradients on “everything smoothed” hard surface models.

I think you should stick with baking externally in a program like xnormal, instead of in zbrush. Especially for hard edges on really low poly assets (I try to avoid sharp edges wherever possible). It’s just one of those things were there’s not going to be a simple solution that would work for everyone. Different programs and engines just have a knack for calculating their tangents differently, so a map that looks correct in zbrush might not look correct when you go to apply it in another program, even though the map itself is otherwise correct (just not synced). That’s one of the reasons zmapper and it’s OpenGL preview were removed. With xnormal you can choose a different a tangent basis to help sync it with your renderer, while gaining additional control over the process (projection cages, user normals, etc).

for an actual low poly model to get rid of seams or normal map gradients on “everything smoothed” hard surface models.

Nothing wrong with gradients. They’re there to work with the mesh. If you wanted the smoothing broken up as in other programs, chances are you’d have to physically disconnect the faces along the UV seams (which should also match the hard edges).

Those gradients never work perfectly in a game, at least on “all smoothed” simple geometry with sharp edges, even being baked in Xnormal whatever tangent basis plugin is in use.
Since Xnormal dosn’t support displacement maps it’s not a very simple way to go Xnormal also. It takes me more time to save/open/bake a gigabyte sized model in Xnormal than the sculpting in Zbrush itself.
Would be so much easier if Zbrush would have its own ray-tracing baker with an envelope/cage or something.

I am using not so high poly model plus displacement/color maps exported from Zbrush to be then re-baked into actual lowpoly in 3dsmax.

As long as the engine has the same vertex normals and tangent basis used during the bake, a gradient should make no negative difference. It’s just working alongside the mesh’s smoothing, and so often its needed.

Imagine a corner of a cube with a separated UV islands and you want to do a few dents ,chips on an edge. Unless you would do a very thin geometry bevel I have never seen a correctly rendered normal maps gradients in a game on smoothed vertexes. Only if the model have hard edges/separated UV and no gradients in the normal map.

The problem may not be seen in shading itself but often appears on specular highlights

Unless you would do a very thin geometry bevel I have never seen a correctly rendered normal maps gradients in a game on smoothed vertexes. Only if the model have hard edges/separated UV and no gradients in the normal map.

That comes down to the tangent basis.
http://wiki.polycount.com/NormalMap?action=AttachFile&do=get&target=max2010_normalmap_workarounds.png

Do you really have a precise rendering, especially specular highlights in a game engine with all smoothed edges/ normal map gradients? I am just curious because in my experience they are always a bit off on things with 90deg corners (like walls for example) and looks perfect only with either geometry bevels or split vertex normals / uv on some edges.

Even when baked in xNormal which do it right for a standard Direct X9 rendering. Perhaps some right shaders in some right engines do it right but Istill have to see one.

It really comes down to what you’re working with. If you get an engine where the tangent basis is synced, the results are always so much better. Again, the problem is that a lot of programs wind up calculating them differently (I think as far up as the 2011 version of 3dsMax would calculate them differently when baking and when showing it in the viewport). If you bake in xnormal it should look fine in xnormal’s model viewer, but move it to another program and the map could no longer look accurate. Some engines like Unreal don’t even appear to be synched to anything. There is no standard set in place, which is why a simple zbrush solution doesn’t seem as easy to me. Maybe it would end up baking a map that looks fine for Maya users, but then Max/Softimage/Unity/etc users will think it’s incorrect, when it’s just the result of the programs seeing the mesh a bit differently. Zbrush used to have an OpenGL preview for its normal maps, but it most likely just ended up confusing people because results that might look perfect in the preview wouldn’t look the same when rendered elsewhere, or vice versa.

As for gradients on the cube, don’t get me wrong, you’re still going to want to try and split the uv islands into different smoothing groups, the hard edges matching the UV borders. A cube is really a pretty deceptive example as it seems like it would be one of the most basic shape to work with, but really it’s nothing but sharp 90’ angles everywhere (every face is hard edge), and it has a silhouette that doesn’t quite match what is trying to be projected onto the edges. Chances are you’ll only see gradients in the bake if you try and run a single smoothing group over more than one side, and when that’s the case then the gradients are simply just information being used to try and correct that smoothing. They’re only there to help, and if they are there, its because the baker saw the need to put them there to try and match what it was seeing on the high res source.

I agree with your comments, my point only is we need a kind of in-Brush solution to bake over both smoothed and split normals i.e. with smooth groups support. A kind of ray tracing rendering with a cage/envelope thing. Right now I know about all smoothed or all faceted choice only. If we would have cage/smooth groups support it would make a game artist life much easier since there is no easy way to transfer the huge zbrush tools into other programs and with a clever smoothing group placement you can minimize any rendering mismatch. It’s much more important and necessary thing than all the recent improvements imo.

Here’s my xNormal bake and it looks fine in Maya but this model doesn’t have a direct purpose for any specific engine, so I’m realizing I don’t have any good options for making it universal across multiple platforms. So it’s a bit of a bummer. I wish it was more standardized, I mean 3ds max and and Maya have different ways of displaying them, so I should’ve known what I was in for.

Thanks for the feedback.