Home Technical Talk

xNormal hard-surface problem (seams on separated shells)

Hi

I'm having problems generating a proper normal map using xNormal.
I've read the stuff in the wiki on normal maps but couldn't solve the issue with the info provided there.

I really feel like a loser now beause the thing is that I'm not a newbie or an amateur. I've worked in the business
of game development for over a year (+3 years of school) and there was a time when I never had any of these problems but
could generate great looking normal maps anytime using xNormal.
So I'm extremely embarassed here. I never thought that working 1+ year with lowpoly graphics (studio making browser-based
games / mobile games) would be so devastating.

Here's the problem:
http://img37.imageshack.us/img37/9397/problemkq.jpg

I created a cube (lowpoly model), cloned it and beveled the edges (highpoly model).
The UV shells are entirely separated with plenty of padding in between, and all edges are hard on my lowpoly and I'm using
the default settings in xNormal - outputting the render on a 1024 map. Not using any external cage.

Questions:
-Why am I getting those seams?
-Do you really have to separate all UV shells on a hardsurface mesh where the angle is big (45 deg and up)? If I remember this correctly, I think I've done normal map renders in the past where I didn't separate each and every single shell but instead kept
them sewed together. Seemed to work well as long as the mesh never turned around more than 180 deg in world space (such as a cube
with with it's top, bottom and behind faces removed).

I'm working on a mesh that has a lot of 90-deg turns and it just seems awfully uneccessary to keep every single side separate on the UV layout (more shells equals more stuff for the engine to compute after all?!)

Replies

  • jogshy
    Options
    Offline / Send Message
    jogshy polycounter lvl 17
    Try with a welded cage.
  • m4dcow
    Options
    Offline / Send Message
    m4dcow interpolator
    You are using an explicit projection here, for xNormal, what you want to do is check use cage on the low poly, which will make xNormal do an averaged projection.

    I put hard edges where there is an angle close to 90 degrees, or where there is a logical seam in real life. If you have a hard edge on your model you will also want a UV split or you will get a seam because the map can't accomodate the sudden change in the geometry surface normal.

    For your model with lots of 90 degree turns, if you have a completley synced workflow, you may be able to get away with not splitiing alot of those shells, but your normal map will do alot of the heavy lifting (have more gradients in the bake) and there is more chance for it to be messed up.
  • Xentei
    Options
    Offline / Send Message
    Thanks guys. A cage seems to be the solution here.
    I checked the "You're making me hard" -thread and it sure helped a lot.
    I'm still confused about when to keep your shells separated and when not too.
    Ignoring the fact that the latter increases the vertex count in-game, I do prefer to sew my shells together because that means more UV space > bigger shells > higher texel density > better looking texture. What I'm trying to say is that I understand the pros and cons of both workflows but I don't fully understand when to use which one.

    I dunno, maybe I need to read that thread again :/
  • kdm3d
    Options
    Offline / Send Message
    normalseams.jpg

    Did a quick mockup, does this help?
Sign In or Register to comment.