Home Technical Talk

High Poly Models and Normal Mapping

Dio
Dio
polycounter lvl 18
Offline / Send Message
Dio polycounter lvl 18
Up to this point Ive only made characters for Quake III and Unreal2k4. Im looking to update my skills so naturally Ive many questions.

High Poly modeling and normal mapping seem to be the next step. First question what consititutes high poly? All I managed to find in a nights search was an outdated HL2 FAQ that said between 3000 and 7500. Secondly, what does normal mapping achieve in-game? Ive produced some using Texporter in Max 6 and have seen them inside the belly of Doom3. All I know is they are made of pastel rainbows. Last and perhaps most important question, what should I shoot for Doom3, HL2, or another? Im using Max 6 but as I mentioned can make Normal maps with plugins. I love CStudio but am competant with bones, should that be an issue.

Replies

  • MoP
    Options
    Offline / Send Message
    MoP polycounter lvl 18
    Here's an example of a "high poly" model.

    hipoly_3.jpg

    Basically, for normal-mapping, you use subdivided (Meshsmoothed) polygon geometry, and use a plugin or application to render the meshsmoothed version of the model down onto an "in-game" resolution mesh. Between 3000-7500 polys sounds about right for the in-game model, but there's no limit on how many polys you use on the original high detail version. That head and helmet there is over 100,000 polygons, but I could make a mesh to fit around that in about 400 polys, and render the normal-map onto the low-poly mesh.

    Here's some more info in a tutorial I wrote - it's Max 7 specific, but you should be able to apply some of the techniques to Max 6 and whatever normal-mapping application you're using.

    Tut: http://www.cgchat.com/forum/showthread.php?s=&threadid=20424

    Hope that helps you some.

    MoP
  • Dio
    Options
    Offline / Send Message
    Dio polycounter lvl 18
    Thanks. The tutorial makes it all clear. Ive been doing 9/10's of this all along to make the texture maps so it shouldnt be too difficult.
  • Sett
    Options
    Offline / Send Message
    Sett polycounter lvl 18
    MoP, in your example you have a low poly tire with 12 sides. With that example how low could you go with the polys - at what point would things not look right, 9 sides 5 sides?

    The above example- the vents, could that be just a plane in the low poly?

    How far can you push this?


    Workflow. high->low-> UV map high?(or low?) ->texture ???

    or low-> high->...etc?
  • MoP
    Options
    Offline / Send Message
    MoP polycounter lvl 18
    My workflow is usually:

    - Rough low poly mesh to "mass out" the model (no detail, but no optimisation or thought towards mesh flow or deformation).

    - High poly model, meshsmoothed. I usually do mechanical parts purely in Max and organic pieces in Zbrush, but you can do this step any way you want.

    - Low poly mesh (I usually build it from scratch), triangulated, with attention to deformation and mesh flow. I try and match the silhouette as closely as possible, although the "interior detail" (areas that won't show up in silhouette) doesn't need as many polys, this can be handled by the normal map.

    - UV map the low poly mesh - the high poly model doesn't need UV-maps at all if you're just generating a normal-map. However, in some apps you can render down other details from the high-poly to the low poly (diffuse maps, shininess, opacity) so there are some cases where you might want to map parts of the high poly mesh. It's not necessary though.

    - I would usually base the diffuse texture on a GI lighting bake of the high poly model onto the low poly model's UV's. You can do this in Max7, I know for sure. Then just paint over that in photoshop to get the colours and stuff.

    Bear in mind that's just the way I do it. There are many different approaches, this one just works best for me right now.

    As for "when does it not look right", that really depends on the target engine and game style. Usually it's silhouette that counts most, since normal-maps can't recreate that, so i'd say for wheels and stuff you still wanna keep the number of sides as high as possible. However you could have a perfectly flat front to that tyre, and it'd probably look fine with a normal-map, from a distance anyway. It wouldn't hold up so well up close.

    The vents in her helmet could very easily be just a plane in the low-poly version. Since you'll never see them in silhouette, the normal-map would be doing all the work, so it'd hardly need any geometric detail at all.

    Hope that helps.

    MoP
  • motives
    Options
    Offline / Send Message
    motives polycounter lvl 18
    does the normal map require the meshsmoothed model to be made out of one chunk of geometry or is it OK to use intersecting Geo?
  • MoP
    Options
    Offline / Send Message
    MoP polycounter lvl 18
    You can use intersecting geometry in the high poly model - you can use as many separate objects as you want for it. However depending on the normal-map rendering software and settings you use, you might encounter problems or rendering artefacts. 99% of the time it should be fine though.
  • Cubik
    Options
    Offline / Send Message
    Cubik polycounter lvl 18
    In the tire example shouldn't there be more polygons in the silouette of the lowpoly wheel? I mean I can still count the sides no matter how detailed the highpoly mesh is.

    Anyway, I'm in the same position as Dio. I have made some low-poly characters and a few highpoly (that looks terrible, but anyway) so I have some questions too:
    1. Can I start with the lowpoly mesh and then just do a clone, add detail, maybe a turbosmooth and call the clone my highpoly. Essensialy the other way around from what MoP is doing.
    2. About what Eric said in the cgchat thread:
    "MoP, good one. Thanks for this.

    I think it's worth mentioning that you can mirror and overlap your UVs as much as you like... just make sure to move all the UVs 1 unit out of the 0-1 UV box, leaving only the non-mirrored UVs and only one of each overlap UV within.

    We do this so we can still cast the normals accurately, but keep the mirroreds and the overlaps in the correct alignment, since they're offset exactly 1 UV unit. The only difference is that they're sitting outside the 0-1 casting area, so they don't cause Render To Texture problems.

    Thanks again MoP!"

    When do I need to move the UV? On which version, the lowpoly or the highpoly (as MoP said, sometimes you want to UV-map the highpoly model too)? There wouldn't be any problems with moving the UVs back in after they have been moved and served purpose outside the warm and happy glow of their cage?

    Thanks for the tutorial MoP! Between this and Poops' video tutorial I might get a grip on this fancy, shiny technology any day now smile.gif.
  • MoP
    Options
    Offline / Send Message
    MoP polycounter lvl 18
    Cubik: Yeah, like I said, it really depends on the target platform and game type when it comes to determining the polygon count and detail of the low-poly mesh. In that wheel example in my tutorial, I wasn't really aiming for anything specific. You could use more polys to round out the silhouette if they were available and it was necessary, or less polys if it was only gonna be viewed from a distance.

    Yeah, you can definitely use the workflow you described. Bear in mind, though, that if you make any major changes to the silhouette or overall shape of the model while adding detail, you will also have to adjust the low poly mesh to match.

    When you want to move a mirrored or overlapped UV segment of the mesh (only on the low-poly mesh - you wouldn't need to move any highpoly UV's, if you're even using them), I would make sure you're using Chuggnut's UV Tools (if you're using Max - www.chuggnut.com ) since they incorporate a useful type-in box to shift selected UV's by an absolute amount - so you can just type "1.0" in the U field, hit Move and your selection will be moved exactly 1 unit along the U axis, basically leaving it in the same place but just outside the "renderable area" as Eric describes.

    You wouldn't even need to move them back in to the 0-1 UV area after rendering the normal-maps, since they would receive texture co-ordinates in the same manner when applied in Max. If you really wanted to make sure though, you could just save a copy of the file with mirrored/stacked UV's intact, then move the mirrored bits out of the way, render the normal-map, then load up the original model and apply the normal-map to that. That would be the fastest method.

    MoP
  • HarlequiN
    Options
    Offline / Send Message
    HarlequiN polycounter lvl 18
    " think it's worth mentioning that you can mirror and overlap your UVs as much as you like... just make sure to move all the UVs 1 unit out of the 0-1 UV box, leaving only the non-mirrored UVs and only one of each overlap UV within."

    This is entirely dependent on the Engine the map is destined for use in. Some engines allow mirroring correctly, some allow it but have wierd artifacts if you do it on a line of verts (see Doom 3's seam heads), and still others Mirroring won't work correctly at all (down becomes up etc).

    Worth checking which Engine it's for first.
  • Eric Chadwick
    Options
    Offline / Send Message
    Very good point.

    Some of the details are covered in this Nvidia paper, incl. both artist-friendly pics and some of the code that's needed to fix it...
    http://developer.nvidia.com/object/gdc_tspacereal.html
  • poopinmymouth
    Options
    Offline / Send Message
    poopinmymouth polycounter lvl 19
    Actually there are three levels of Normal map mirroring capability in an engine.

    1 level) No mirroring whatsoever. Everything has to be unique.

    2 level) perfectly symetrical mirroring. You have to divide the entire model down the center, and everything is just flipped over to the other side.

    3 level) Creative mirroring. The best solution but hardest for programmers to implement. Will take into account the W direction of the UV's, and do a calculation for each time it changes so that you can mirror in the same way we have been doing on color maps only.

    Apparently level 2 is all most programmers have/been able to get working so far, but many engines are bringing level 3 online now, as the artists demand it. 8-)
  • KDR_11k
    Options
    Offline / Send Message
    KDR_11k polycounter lvl 18
    Doom 3 can mirror and overlap as you please. Also, those face seams don't have to happen:
    ingame_front2.jpg

    The whole model is mirrored but the center seam isn't very obvious (it's visible on the back of the neck but nowhere else).
  • Eric Chadwick
    Options
    Offline / Send Message
    Thanks Poop. We've been working on #3, but had to put it aside for the time being to get other things going. The artists here are really itching to get that in.

    KDR, that's cool. Have you figured out why seams appear on the default Doom III models?
  • CrazyButcher
    Options
    Offline / Send Message
    CrazyButcher polycounter lvl 18
    hm doesnt melody do this "creative mirroring" automatically ?

    I thought nv's meshmender lib was exactly for the "automatic" splitting of vertices when they are mirrored uvs and such ?

    #3 is a preprocessing step, you create "unique" vertices for the "border line" of a uv chunk by duplicating, cause those are the critical ones. as I wanted to have this in my own engine too, I hope that nv lib would take over the work ?
  • Floyd
    Options
    Offline / Send Message
    Floyd polycounter lvl 18
    For my firts normalmapped model, I also mirrored half of the model. In the 3dsmax6 viewport it had a seam. So I painted a small strip of light blue(127,127,255) along the border.
    Found this solution here: http://www.monitorstudios.com/bcloward/tutorials_normal_maps12.html
    The seams were gone in 3dsmax, so I guess it should work in other engines also.
  • Eric Chadwick
    Options
    Offline / Send Message
    CrazyButcher, I've been told Meshmender solves the basics of method 3, so it should be helpful. As I understand it the trick is in transforming those texel normals into unified world-space, which I guess can be tricky if the artist is mirroring along an arbitrary axis. Plus there are rotated UVs to work out too, but I hear meshmender solves this. I dunno, I'm no coder. smile.gif

    We have an additional set of needs for our surfaces in the way they're able to blend between shaders, UV sets, normals (smoothing groups), bone weights, etc., so we're working on a custom solution for massaging the directions of the incoming light vectors. Which will give us not only normal map tastiness, but also some other interesting surface effects. Almost there! I can just taste it... crazy.gif

    Floyd, I guess that solution works OK, as long as you're cool with your surface being totally smooth along the seam. Isn't that what you get? I think it kind of defeats the model if it has defined musculature or bunching cloth or other cross-wise creases/folds.
  • KDR_11k
    Options
    Offline / Send Message
    KDR_11k polycounter lvl 18
    Eric: Hm, I just noticed she does have mirroring seams but they are barely noticeable. It's as if the vertices along the UV seams get unwelded. A reason for the obvious mirroring seams on the default models might be that they simply deleted the other half of the model for the renderbump instead of killing its UV coords (which is what I did).
  • Bronco
    Options
    Offline / Send Message
    Bronco polycounter lvl 18
    hey guys

    I also have a question about normal mapping which isn't worth opening yet another topic about,I hope Dio doesn't mind smile.gif.

    This maybe a simple prob but as its my first attempt at this new stuff I have no idea how to solve my problem.

    basically I have my high/low models I have mapped the low poly model and generated the Normal Map using ATi's map gnerator and max tools (im using max 6 btw).... the normal map is generated and looks fine when i open it up in PS.
    But when I then look at it on the model in the ATi viewer that comes with the ATI map generator the UV co-ordinates on the low poly model have gone all over the place. Any reason why this is happening?

    Thanks in advance,theres hope for me yet wink.gif

    john
  • KDR_11k
    Options
    Offline / Send Message
    KDR_11k polycounter lvl 18
    Have you tried throwing it at Doom 3? Perhaps the ATi viewer just sucks. Just remember, Doom 3 and the ATi normalmapper have different ideas of how a normalmap should look, you'll have tons of weird edges on an ATi generated map (and Doom 3 renders normalmaps much faster anyway).
  • Eric Chadwick
    Options
    Offline / Send Message
    I'd also check the UV layout in the ATI normal map against the UV layout you fed it. I think ATI has an option to auto-UV the model, which might have been on in your case?

    KDR_11k, good thinking, the Doom III models do look like they might have deleted the mirrored tris... But in your model there's still a seam anyway? Sorry if this is an obvious qeustion, but did you add a 4-pixel skirt around your UV chunks? Maybe it's just an id optimization instead.
  • KDR_11k
    Options
    Offline / Send Message
    KDR_11k polycounter lvl 18
    Nope, it looks like unwelded verts, not wrong normals. Not even really unwelded, the normals around there seem to be pretty near still but not exact. I have extended the area, that's not the cause. I've tried painting those areas with neutral normals (i.e. 127,127,255) but that didn't help.

    shot00023.pngshot00022.png
  • Bronco
    Options
    Offline / Send Message
    Bronco polycounter lvl 18
    thanks for the advise guys

    I got there...sucsess!!! I feel I have achived something. It seemed there was a prob with the UVs,got past that somehow after some trial and error.

    ill do an image dump and some point in P&P of my latest stuffe....just some simple things hehe smile.gif

    John
  • Badname
    Options
    Offline / Send Message
    Badname polycounter lvl 18
    What i wonder is how to paint part ofyour normal map after you have generated it from a highpoly model :O
Sign In or Register to comment.