ZBrushCentral

Using Zbrush 2 for normal map in games

I am wondering what is the difference between the normal map generated by the Zbrush 2 and those generate using hi poly model using nvidia , ati or other normal map generation software . Is it the same can it be use in games and how have use it in games before?

thanks

I’ve been using ZB to make normal maps for games, and have found that it is much better to export my high poly model out of ZB into 3DS Max 7, and use the normal map projection method there, which actually ray casts between the low poly and high poly to create the map, thereby getting a much more accurate normal map.

ZB calculates the differences between the subdivision levels, which often is not as accurate, even with the “Adaptive” and other high quality toggles on. I particularly had problems when geometry has been pinched or otherwise moved perpendicular to the normal. In general, the ZB normal maps are plagued by artifacts and by too much smoothing when surfaces have been pinched into hard corners.

Unfortunately, in order to import the ZB model into Max, you have to keep the poly count relatively low, or Max will choke. I try not to exceed about 1.5 million polys (or 750K quads as ZB counts them).

One normal map feature of ZB that work extremely well though is the NormalRGB shader, which I use whenever making normal maps that will go onto a flat plane in the game. And it has the added benefit of allowing you to use it with pixols rather than just a 3D mesh.

That’s good to know about Max 7, because from what I saw with Maya, making a normal map from a super high poly could take wayyyyyyy toooo long, if it doesn’t crash. :slight_smile:

By the way normal maps seem to be coming out reversed when drawn between UV seams in ZB2. Any idea?

in the import export pref menu, you can modify the nmap orientation

[email protected] quote
“I’ve been using ZB to make normal maps for games, and have found that it is much better to export my high poly model out of ZB into 3DS Max 7, and use the normal map projection method there, which actually ray casts between the low poly and high poly to create the map, thereby getting a much more accurate normal map.”

Can you explain more your steps in 3DMax? I will appreciated¡
Thanks in advance
Andreseloy

Sebcesoir - actually I was talking about the normals being reversed between UV seams. You def have to flip the image vertically in Zbrush before you export into Maya, but that wasn’t the prob.

I did figure out though, Normal maps will look more correct with larger UV sections all joined together in the layout view. As well bumps will look like bumps and not indents, if the object is Cylindrically mapped so all UV’s are sitting vertically and horizontally similar. Another words all UV’s run left to right and and are aligned the same, as if you merged all edges.

The wierd seam thing doesn’t seem to be fixable so far. As well it’s always at the UV borders. See attached Seam image.

Attachments

seam.jpg

This is more of a Max topic than a ZB one, but so long as the forum moderators tolerate a Max-filled post, I’ll try to help you out.

I’m at home right now rather than at work, so I don’t have Max 7 to refer to here, but I’ll try to do this from memory.

First of all, make sure you have Max 7, not an earlier version. This is a new feature. It’s part of the “Render to Texture” dialog, so if you F1 in Max for the help, and look for “Render to Texture” you should be able to get details about it.

Anyhow, here’s the basic workflow. Build a low poly object in Max, making sure to UV map it properly. None of the UVs should be backwards, because the normal map will light improperly, so use something with numbers or letters on it as a UVing image. While it is possible to overlap UVs on identical parts, I would recommend detaching them later on before you project, just to avoid problems such overlapping sometimes causes. If it has hard edges that you want to preserve for ZB, then Meshsmooth it a few times with obey smoothing groups selected. Now export the model to ZBrush as an OBJ. Or instead you could build totally different high poly geometry for sculpting, which is often better than just subdividing, then bring that over. No need to UV map the high poly stuff.

Make it pretty in ZB, then import it back to Max as an OBJ. It might be best to set your viewport to Bounding Box before bringing it in if it’s really high poly. Line up the high poly model to occupy approximately the same space as the low one. With the low selected, go to “Render>Render to Texture.” The Render to Texture Dialog is actually a rather deep thing, so if you haven’t used it, you’ll have to consult the help file for everything.

The difference between the traditional Render to Texture and what you want comes from a box halfway down the dialog which lets you Enable Projection. Click that, and hit the Pick button. From the list select the high poly geometry that you want to project from. Now go to the Options button, and make sure to turn off Cage. Cage Projection sounds like a wonderful feature, but it never ever works. Ever. Really, I don’t know why they included it in the Max 7 release. I think it was just to taunt us. But offset is just fine for most things.

Lower in the dialog you can choose which maps to project to, including a NormalsMap, which has an option to put the height data in the alpha if you want it, and you can project anything else you want as well. This is particularly nice if you want to put a Skylight in the scene with shadows, so you can project all the soft radiosity shadows to a texture as well, although that’s very slow.

Make sure the path at the top of the dialog is configured to put the rendered maps where you want them, and all the options concerning the maps are to your liking, then hit the Render button at the bottom.

I recommend testing it at a low resolution, then when you’re satisfied, kick it up to 2048 or whatever. It’s surprisingly fast - even with over a million triangles, maybe a few minutes for a low res (256) normal map. It’s never taken me more than an hour to render a 2048.

Max ray casts between the high and the low poly one, which works much more accurately than the ZB normal map creator (see my earlier post), and has the added benefit that the high poly object doesn’t have to be a subdivided version of the low one. So for example you can make each button on a person’s shirt an actual cylinder with geometrically perfect hard circular edges (modeled in Max), while still being able to sculpt in all the folds of that shirt in ZBrush.

BTW, in relation to your original question that started the thread, I’m pretty sure that the Nvidia and ATI tools works very similarly to the Max thing I described, ray casting between the high and low poly objects. But I haven’t used those tools, so I can’t speak to their quality.

:+1:
Andreseloy