Home Technical Talk

Low Resolution Normal Map Issues

Hey guys,

I've been working on some assets for a mobile/iPhone game and have been having some fun(!) issues with my normal map bakes. Due to the low resolution nature of the geometry I'm working on I either get problems with the normals averaging or getting seams. I've been really tempted to just paint out the issues in photoshop but thats lame and I wanted to pick your guy's brains and see if I could get some advice on getting better bakes. :)

My meshes:
endStone_meshes.jpg

So, I baked onto my original low resolution mesh and got all kinds of nastyness. "Aha!" I said, and proceeded to add some control edges to get rid of it. On my next bake I found more nastyness, only in seam form this time.

endStone_normalComparison.jpg

At that point I figured the seamage was due to the corners of my mesh being about 90 degress. I beveled the edges and found the results to be the same. This was the part I found really confusing, even with more geometry added and the edges beveled I still got these seam issues.

I know there must be some way of getting better bakes, but after days of baking and tweaking and rebaking I figured I'd try and get some help. :/

So what do you guys think? Suggestions?

Replies

  • Joshua Stubbles
    Options
    Offline / Send Message
    Joshua Stubbles polycounter lvl 19
    This has been talked about a lot on the forums and wiki, I'm sure you could have found a solution by searching.

    One way around this is to use smoothing groups on the different sides and break the UV's off by smoothing groups. It's more of a pain to texture and creates more runtime verts, but the seams on your maps will go away even though your geometry is low res.
  • tristamus
    Options
    Offline / Send Message
    tristamus polycounter lvl 9
    I don't see the seams you're talking about..?
  • EarthQuake
    Options
    Offline / Send Message
    Its pointless to look at the normal map in photoshop and try to "see what is wrong with it", if you've got errors previewing the map on the mesh that is another issue.

    You have to understand the the point of a normal map is to replace the mesh normals on a per-pixel basis, with that in mind, the image of the normal map bake makes perfect sense.

    Painting out the "errors" would only make things worse.
  • Snader
    Options
    Offline / Send Message
    Snader polycounter lvl 15
    I'm not seeing any issues with these textures. Have you even tried rendering the lowpoly + normals in a realtime environment?
  • NordicNinja
    Options
    Offline / Send Message
    Heh...yep looks like I pretty much kicked myself in the ass on this one. :poly122:

    Basically, because the original map didn't come out like I'd expected I assumed something was fishy and didn't throw it on the mesh to look at it (ow...my pride). So all the previewing and fussing about with my different meshes was just making it worse and I was trying to make the worse better with more tweaking.

    Looked at the original map in Unity and in marmoset and sure enough the shading was how I expected it to be. Lesson learned I suppose, always preview your maps *on* the mesh. :)
  • NordicNinja
    Options
    Offline / Send Message
    hmm, looks like I may not be as thick as I had originally thought. It turns out I am getting shading errors as well, they just weren't very noticeable on that column. OK, so at the risk of making myself look like a dumbass a second time, let me try this again. :)

    OK, so different mesh this time. This one shows the errors more clearly, plus I have some in engine shots as well (yay).

    So...here are my meshes. First one is the straight up low resolution, second one is with control edges add along the two edges that needed them the most (farthest distance apart), and the third is the mesh where I added control edges along almost every edge.

    headStone_topo.jpg

    Here are the normal map bakes from those meshes. You can see the first two have a gradation due to the normals getting averaged across the large polygon faces (right?).

    headStone_maps.jpg

    And here are the shading errors I'm getting with said normal maps. These are in Marmoset but I get the same deal in Unity. The top meshes are just using the image based lighting. The lower has a point light right above each mesh, AKA the third model is shading correctly.

    headStone_shadingErrors.jpg

    What I gather from these is that I'm getting this gradation in the normal map because the normals are getting averaged across too far of a distance right? So I add the control edges in there to kill it, and it does. Now my problem is that in my last bake with the control edges I get these seams/pinches/creases along the edges. This makes them look like this, which I find undesirable. As I should right? Doesn't look very good.

    headStone_badEdge.jpg

    Back to my original question. I can currently think of two ways to fix em.

    1) Do an exploded bake with a UV seam at every hard edge. This would get rid of the edge strangeness but would take more time and almost double the vert count as most of them would double up due to the breaks in the UVs.

    2) Do some photoshop work to paint out the edge areas with the default normal color. This would be faster then #1 but I find it to be bad practice plus if I have to bake them out again I'd have to redo the work ect.

    So...is there any better way of doing it? Neither option is very enticing and I just wanted to know if there's something I'm missing or if everybody just goes with one of those two options. Thanks! :thumbup:
  • cryrid
    Options
    Offline / Send Message
    cryrid interpolator
    Don't do option 2. EQ already covered that one.

    Would splitting the UVs among the hard edges add significantly more verts than the extra control loops you've added? This part of the wiki might be relevant.

    Also, is your normal map inverted in those pics? The edges seem... extra edgy.
  • cw
    Options
    Offline / Send Message
    cw polycounter lvl 17
    This has been covered quite a few times already, have a dig around the boards for other more thorough explanations.

    If you split smoothing groups, you must splt UVs and ailow a bit of padding. This is just a tangent space normal map rule of sorts.

    If you have just 1 smoothing group, even on a basic box, you unwrap however you want and as long as your baker and engine are synced up tangent-space wise, it will work wth good results. A few 'support edges' will reduce the gradients on the normal map, making it a bit more usable for LOD meshes or suchlike, and maybe alleviating some problems in certain engines.

    Give it a try with 1 smoothing group, and if you are working through this in 3dsmax, pick up the 3pointshader, it has a better sync with 3dsmax viewport with the quality mode option they provide.

    good luck!
  • NordicNinja
    Options
    Offline / Send Message
    cryrid - Yeah, in these kind of cases it seems like it would be better just to break my UVs and do it that way.

    cw - Thanks for the explanation, these are going into Unity so I'll need to do some research and see if there's anything we can do to get the tangent space to jive better.

    I didn't mean to come off as someone who doesnt read documentation, I've read the wiki and searched :thumbup:. I guess I just figured there must be some other way, turns out I was looking for something that's not there. :\

    I appreciate the help guys.
Sign In or Register to comment.