Home Technical Talk

how do you get rid of uv seams?

christopheduron
polycounter lvl 2
Offline / Send Message
christopheduron polycounter lvl 2
Hello polypeople,

I have created several high poly models and i've retopod them so they have an acceptable polycount. When it comes to creating UVs for these low poly models i seem to be having problems with visible seams in my end result. I've looked up a lot of guides and asked many a forum, but so far nobody really managed to solve my problems.

I think it's easiest to explain by using an example.

I've created this concrete barrier. I didn't use a cage to bake it, so the 90° angles on the model aren't going to be perfect. If i had used a cage though i would say these UVs are pretty much perfect since there are almost no visible seams to it. Yet most people tell me i should completely change my UV layout for better results. The biggest problem in the example below is that the sides of the barrier have really weird lighting results that i can't get rid off even though they're flat.
https://www.artstation.com/artwork/0zxYV
image

The second example with 'cleaner' UVs ends up adding visible seams to my model. As you can see in artstation where the concrete is broken, it adds a hard line between the broken and non-broken concrete. I really want to know how i can hide these seams.
And again i'm stuck with really weird lighting on the sides of the barrier.
https://www.artstation.com/artwork/WPNK3
image
image

If it helps, i could share the low/high poly .obj files so you can do it yourself and educate me in the process.

Replies

  • Eric Chadwick
    Options
    Offline / Send Message
    What software are you baking with, and what software are you viewing with? These two programs need to be synched to solve seams.

    http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Synched_Workflow
  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    I'm usually baking with substance painter or xnormal. I suppose being able to view it with marmoset toolbag is fairly important for portfolio work. Other than that i'm trying to get my models into cryengine.
  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    I figured out why the sides were giving me strange shading. When exporting the .obj files out of 3dsmax i selected a preset 'Zbrush' which didn't export my smoothing groups i believe.

    I also managed to get rid of most of the seams. My best guess is that my low poly topology has to be optimized so i can blend in the smoothing groups better.

    If i could ask a quick question about synching two programs to solve seams. I read the guides you linked, but i'm having trouble understanding parts of it. What would i have to more or less if i made a high poly in zbrush, exported the high/low poly files as .obj files and baked normal maps with xnormal. If i then wanted to place these in both marmoset toolbad and cryengine, would i have to do anything specific to synch the workflow?
  • musashidan
    Options
    Offline / Send Message
    musashidan high dynamic range

    A synced workflow means that both the baking and destination software are using the same tangent basis. In the case of xnormal, UE4, and substance for instance, mikktspace.

    It means worrying about UV splits/smoothing groups isn't really an issue, and eliminates the usual problems that arise from baking to non-synced.

    TB2 has a mikkt option, I believe, but I don't know about Cryengine.


  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    I've exported my model with the normal map to a few different programs and i'm getting varried results. Any clue how i'm supposed to fix these? I suppose it has to do with different programs not being synched with eachother, but i honestly have no clue how to start to fix this.

    The following normal map has been baked in Xnormal with a cage.
    http://i63.tinypic.com/142699u.jpg

    Cryengine:

    Substance Painter:

    Marmoset TB2:

  • musashidan
    Options
    Offline / Send Message
    musashidan high dynamic range


    (for the life of me i can't figure out how to link pictures instead of links... In my first posts i did this by copying pics i made on a different forum. This shouldn't be hard so if someone could educate me... :p)

    I was having the same problem until I figured out that you can direct copy the image link from imgur and paste it to the url space in the image file dropdown at the top of your post.

    As for your problem, check this thread here where I show a simple breakdown of a synced workflow;

    http://polycount.com/discussion/comment/2400914#Comment_2400914


  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    Thanks a lot, i'll study this when i get home.
  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    It's not really comforting to see the OP's last post ending with him flipping his desk heh...

    Anyway, i've done similar tests like him and sometimes i get better results than normal. But when i change the program to view the model + normal map in the results are usually worse. So since everyone keeps asking me if i synched the workflow or whatever i have no clue. And even though i received some links with information on it it still doesn't make sense to me.

    Could you try to explain what this synching and tangent basis mumbo jumbo is somehow?
  • musashidan
    Options
    Offline / Send Message
    musashidan high dynamic range
    If you read my posts/breakdown on the other thread I linked it should be clearer. There are some simplified explanations of what syncing means.
  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    I followed your steps being...
    in 3dsmax:
    -give everything the same smoothing group
    -export as an fbx with only smoothing groups, triangulate and preserve edge orientation selected
    in SP:
    -upon importing select 'compute tangent space per fragment'
    -bake your normal map in SP (not much is specified here, i just kept the default settings while adjusting the max frontal and rear distance a little. Default being where 'relative to bounding box', 'average normals' and 'ignore backfacing' is selected.)

    My results:
    -the seams seem to be mostly dissapeared which is a very good start! However if you look at the right side there is a lot of funny stuff going on. (i remade my lowpoly cause i was desperate and i suppose this could have something to do with it)


    -Yikes!



    I want to fit my end result in Cryengine however, but i'll forget about that step for now until i'm able to bake normals like an absolute boss in substance painter. What do you think the issue is right now? My lowpoly? Take a look :)https://www.artstation.com/artwork/oxaDq

    Using this method and since apparently both 3dsmax and substance painter are using mikktspace. Does this mean that i can use this model + normal map in any program that also uses mikktspace and getting the same result? (i have no clue what mikktspace is still, googling doesn't really help me either)
  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    I took my old low-poly model tried it with that one and the result were almost perfect. Re-did it again with a cage and i was happy with the results. I'll see what happens if i export it to cryengine now.
  • musashidan
    Options
    Offline / Send Message
    musashidan high dynamic range
    Yes, if you are getting good bake results then any other program using mikktspace should be identical if the bi-tangents/normals are imported correctly.

    mikktspace is just the name give to this particular tangent basis algorithm. Thankfully most software that deals in normal maps seem to be adopting it. This is good news as it eliminates a lot of the old issues with trying to get similar results in different software with NMs.
  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    Yes, if you are getting good bake results then any other program using mikktspace should be identical if the bi-tangents/normals are imported correctly.
    I've never worked with unreal before, but since it's using mikktspace aswel, my normal map should work in there. However, how would i go about to export my model from 3dsmax? Because the tangents etc have been computed in substance painter so i suppose my actual .fbx file that i'd somehow put into unreal doesn't have the corrent bi-tangents/normals since it's from 3ds-mas with binormals/tangents disabled.
  • musashidan
    Options
    Offline / Send Message
    musashidan high dynamic range
    Everything should work just fine in UE4 from Max with the same .fbx settings. All you have to do is specify 'normals'(which will be on by default in UE4) upon .fbx import. This will automatically sync the workflow from Painter because[just like Painter] UE4 will compute the tangents/bi-normals.
  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    So tangents/bi-normals are 'baked' in the model file and not in the normal map? So if i had baked the normalmap in SP without checking the option 'compute tangent space per fragment' the normalmap file itself would be exactly the same, but it would show with seams since the model itself doesn't have the correct tangents/bi-normals to work properly with the generated normalmap?

    And what do you mean with specifying 'normals'? Do you mean checking the option 'Tangents and Binormals' when exporting an .fxb file in 3dsmax?
  • Mark Dygert
    Options
    Offline / Send Message

    -export as an fbx with only smoothing groups, triangulate and preserve edge orientation selected
    in SP:
    You shouldn't rely on FBX to triangulate your mesh on export, certain versions of FBX will flip faces or not actually triangulate properly. Instead add a "turn to poly" modifier to your stack and set the number of sides to 3. This will force all of the tri's to stay how they should be. Then you can remove the modifier and you have your nicely quad'ed mesh back the way it was.

    This might not be your issue, but it might be one thing throwing it off if everything else is working as it should.
  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    I currently managed to export my concrete barrier both in substance painter and cryengine without any visible seams! However the method i used to create a normal map for cryengine was pretty complicated.

    I'm still looking after the right knowledge and thinking process of what normal mapping is exactly so that when i have to create one for a different object or in a different rendering program i just know what to do. I believe i know what steps i have to follow to get a decent normal map inside SP and Cryengine, but i don't really understand most of them sadly. :c
  • Eric Chadwick
    Options
    Offline / Send Message
    This might help. It looks like a lot, but it simplifies in practice. http://wiki.polycount.com/wiki/Texture_Baking
  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    I'll give it a read, thanks.
  • musashidan
    Options
    Offline / Send Message
    musashidan high dynamic range
    So tangents/bi-normals are 'baked' in the model file and not in the normal map? So if i had baked the normalmap in SP without checking the option 'compute tangent space per fragment' the normalmap file itself would be exactly the same, but it would show with seams since the model itself doesn't have the correct tangents/bi-normals to work properly with the generated normalmap?

    And what do you mean with specifying 'normals'? Do you mean checking the option 'Tangents and Binormals' when exporting an .fxb file in 3dsmax?
    Yes, the T/Bi-N are exported with the .fbx file. A normal map with a single-smoothing group will look a lot different than one with UV/SG splits. The former will have much more extreme gradients as it has to compensate for the continuity of the SGs. So because the baker and the destination are using identical tangent basis it just works because the T/Bi-N are calculated identically upon import by either the baker or the destination. But it will not be synced if the T/Bi-N are calculated upon export from Max/Maya. I'm sure somebody else can explain it a lot better than me. :)

    By 'specifying normals' in UE4, I mean there is an option upon .fbx import to 'Import Normal Method' - choose 'Import Normals' This tells UE to import the T/Bi-N from the .fbx, and that's why it's important to UNCHECK that option upon .fbx export - because UE will calculate them itself in the same way SP does when the 'compute tangent space per fragment' option is checked.

    I know it seems a bit confusing, but it really isn't. A synced workflow avoids so many of the pitfalls associated with the more traditional method of normal map creation.
  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    Hey, i'm working on a new object and i'm having a bit of a problem baking it when using a cage. If i bake the normal map in SP without a cage using Musashidan's method it comes out with almost no visible uv seams. When i use the same method while also using a cage i get this result:

    You might be asking yourself: "what in the hell did you do with your UV unwrap bro?" Well, since i'm trying to find out how to bake like a boss, it shouldn't really matter howmany uv splits i use!

    So i know i didn't upload a picture of the normal without baking with a cage, but take it from me it looked great! (in SP at least)
    Why does my normal start to look like a world space normal when i use a cage? The baking process looked just fine when i used the cage in Xnormal.
  • rexus
    Options
    Offline / Send Message
    rexus polycounter lvl 16
    the triangulating  all the the mesh then exporting then i experienced the error you are having when the meshes weren't  exactly  the same and dont use the substance  normal export 
  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    I have triangulated the lowpoly using the 'turn to poly' modifier in 3dsmax. I then created a cage out of this using the projection modifier and exporting it. It works perfectly for Xnormal, but doesn't for SP for some reason. So the topology of the LP should be exactly the same as the cage.

    What do you mean exactly with "don't use the substance normal export"? I exported out of 3dsmax as an .fbx and uncheccked bi-normals/tangents and on importing into SP i checked the 'compute tangents' option which if i understand correctly should be the right way to do it.
  • christopheduron
    Options
    Offline / Send Message
    christopheduron polycounter lvl 2
    Hmmm... problem is solved. All i did was bake it a few more times and suddenly it turned out amazing.

    Thanks for all the help everyone! (especially musashidan :))
  • musashidan
    Options
    Offline / Send Message
    musashidan high dynamic range
    Hmmm... problem is solved. All i did was bake it a few more times and suddenly it turned out amazing.

    Thanks for all the help everyone! (especially musashidan :))
    Ah....the wonderful world of Normal map baking...:)

    Great stuff. Glad it worked out for you in the end mate.
Sign In or Register to comment.