You can do exactly what you're doing and it's just fine. The technique called "Trim sheets" is a general description of how to build and texture geometry. It's not a hard set of rules. It's a way to save texture space and organize the construction of game assets.
Here's a blog post I wrote about how I used trim sheets on a game I worked on recently:
But I still cant figure out how to map that high lighted part. The area where I suppose to place my UV on it is just barely visible. should I increase the angle on those borders? like this ?
If I do this, its ok to have it back straight down in my low poly mesh after ? Or the shading will be wrong ?
No it's not great to have the lowpoly UV squashed like that. What you want to do is flatten out that bit. If you're baking the texture from a hipoly then you need to make a bake mesh that wraps around that bit. Here's a diagram:
try and be more clear with your problem, it's difficult to understand what you're trying to solve.
you're drawing arrows on your screenshots and saying you've highlighted something. what's confusing about that is in your screenshots there is selected geometry that's being "highlighted" with a border from your software.
from what you've shared, it's unclear to me what your lowpoly is and what your highpoly is. assigning contrasting colors to them for a screenshot would be helpful. explaining each image you share will help us better understand what to look for in it.
being clear will benefit you the most in cases like these.
my guess is you're confused about how rays are cast from a low poly's normal vector to capture the surface of a highpoly model to generate a normal map. when you had asked if you were supposed to increase the angle of a 90 degree corner, and adjusted both the high and low poly meshes, it led me to believe this was the case.
You either could have a hard edge /split vertex normals along those UV seams and split UV islands/stripes accordingly or do what your blue arrow shows , having a single UV island and vertex normals all set up for example and parallel to each other so all the shading would come form the normal map exclusively. The geometry is not necessarily should be flat , just vertex normals same as on a flat geometry.
You can bake to a (tiling) lowpoly mesh matching the highpolys shape. Then construct your elements from that tiling mesh. This is probably along the lines of what sprunghut wrote.
If you choose to bake trims to a plane, make sure the highpoly geometry reads well when projected (90 degree corners or overhangs won't show). When creating meshes with complex profile shapes they can be broken up into multiple UV strips + hard edges. Consider simply modeling curved profile shapes into the geometry.
I think it's important to understand that the shading of the final asset (normal map applied) is only matching the highpolys shading, if its mesh shading matches the shading of the lowpoly mesh the normal map was baked with. Oh well, I think that's what gnoop just wrote :D
If your project consists of rooms/interiors and on top you use ue5/nanite, you could consider just modelling the trims and map UVs to strips.
@killnpc Hey! You are right, you made me realize that I made a terrible explanation of my problem.
I'am using a Blender plugin called GrabDoc, that allows me to easily bake high poly mesh to a plane. Then, I'll take the low poly mesh and map its UVs on this trim sheet.
This is my trim sheet so far:
So, my issue is when I have 90 degree angles, just like you said. I found out that even if I decrease the angle a bit, its really difficult to correct place the UV over it, it is very thin and the shading will probably be wrong.
I'm very familiar with baking cages, but that is not the way I want to go. I'm not trying to bake high poly directly over a low poly mesh. But thanks anyway to pointing me to those articles. So, just to clarify my question, how should I place these pieces on a trim sheet so I can UV map my low poly mesh on it latter.
In this view, you can see that I scaled those edges outwards a bit. The results were satisfactory, it was easier to map the low poly over it. But after reading what you guys said, this is definitely the wrong solution, right ?
@gnoop what you are saying is what @Fabi_G demonstrated on his example A? (btw, thanks a lot for that @Fabi_G) Make the vertex normals on my low poly mesh pointing straight upwards and let the normal map do its stuff ? Should I do this for every geometry that I use this trim sheet on ? like this ?
Well, I guess not, I sent it to UE5 and the shading is all wrong..
Half left is using geometry normals + normal map, and half right is all vertex normal pointing forward + normal map. =/
Guys, I really appreciate the patience with me going trough this. One thing that still isn't very clear for me, is about splitting the edges and make those hard, Option C on @Fabi_G examples, maybe I need to mess with it a little bit so I can see for myself how it works.
Since you're using a grab doc you're only capturing the normal detail on a single axis and those edges are only a few pixels wide:
You would need to flare those faces out in order for the grab doc you capture the info:
This may cause undesired lighting results on those faces if your game mesh is using 90 degree angles, though, so you would probably be better off unwrapping the piece and baking it with the angles you want and then you could just add it to your trim sheet in photoshop.
So if I understand all of this correctly. I can also make this angles on a different trim (like @Fabi_G demonstrated in the example C) and then map my low poly on it using hard edges. Is that right ?
yes, it's Fabi_G's example A . You need to relax you hi-poly source a bit with no 90 deg corners . The way the projection would show you a few pixels of sides at least.
As of Unreal render be sure Unreal uses your edited vertex normals and not recalculate them back to default positions . I don't use Unreal but recall it needs a checkbox somewhere to import fbx with custom vertex normals intact. That's probably a case in your example.
if a surface have an extreme angle to your edited vertex normal it does make a bit less accurate effect since the normal texture is 8 bit only usually but typically it all goes just fine. You can also increase a contrast of normal channels to compensate "relaxed " source.
If you use Blender check normal map with Evee viewport render. If it works there should work in Unreal too ( considering Blender uses inverted green channel}
That flat looking /parallel normals approach has one more huge advantage . You could kill all the extra profile geometry in a next lod and it gives you no shading glitch at all when the lod is switching . It's basically same as Dx11 tessellation/displacement but much more efficient. You can set the switch distance very close to camera because of that.
Only if you do not compensate stretched UVs tho. I guess it comes down to, how close can you get and is a little stretching due to a straight planar projection acceptable or not.
I usually recommend mapping the perpendicular faces to somewhere else on the sheet for your higher lods to get around that issue.
You sacrifice some pixel perfect nuance at edges still but you're not restricted in terms of the shape of your high lods and the fact you can drop 90% of your geometry 10m from the camera without seeing any specular popping is a godsend.
its worth pointing out that this technique is not restricted to planar surfaces - projecting normals from low lods up to high works in the same way on many types of asset
Replies
You can do exactly what you're doing and it's just fine. The technique called "Trim sheets" is a general description of how to build and texture geometry. It's not a hard set of rules. It's a way to save texture space and organize the construction of game assets.
Here's a blog post I wrote about how I used trim sheets on a game I worked on recently:
https://www.artstation.com/blogs/dankeating/goBq/trim-textures-used-in-the-outer-worlds-peril-on-gorgon
As you can see I am not using trim sheets on flat geometry
Hey Thanks a lot for replying back!
But I still cant figure out how to map that high lighted part. The area where I suppose to place my UV on it is just barely visible. should I increase the angle on those borders? like this ?
If I do this, its ok to have it back straight down in my low poly mesh after ? Or the shading will be wrong ?
No it's not great to have the lowpoly UV squashed like that. What you want to do is flatten out that bit. If you're baking the texture from a hipoly then you need to make a bake mesh that wraps around that bit. Here's a diagram:
Hey man, I really appreciate your help, but i'm feeling really stupid. I'm not getting what you are saying.
My high poly mesh needs to be flatten a bit ? And then my low poly mesh will follow that, and after I UV map it, I scale the borders back in ?
hey GlowingPotato,
try and be more clear with your problem, it's difficult to understand what you're trying to solve.
you're drawing arrows on your screenshots and saying you've highlighted something. what's confusing about that is in your screenshots there is selected geometry that's being "highlighted" with a border from your software.
from what you've shared, it's unclear to me what your lowpoly is and what your highpoly is. assigning contrasting colors to them for a screenshot would be helpful. explaining each image you share will help us better understand what to look for in it.
being clear will benefit you the most in cases like these.
my guess is you're confused about how rays are cast from a low poly's normal vector to capture the surface of a highpoly model to generate a normal map. when you had asked if you were supposed to increase the angle of a 90 degree corner, and adjusted both the high and low poly meshes, it led me to believe this was the case.
if so, this polycount wiki article about projection cages might help. part 3 of this tutorial from the wiki covers why you'd increase an angle on a face for normal map generation.
You either could have a hard edge /split vertex normals along those UV seams and split UV islands/stripes accordingly or do what your blue arrow shows , having a single UV island and vertex normals all set up for example and parallel to each other so all the shading would come form the normal map exclusively. The geometry is not necessarily should be flat , just vertex normals same as on a flat geometry.
You can bake to a (tiling) lowpoly mesh matching the highpolys shape. Then construct your elements from that tiling mesh. This is probably along the lines of what sprunghut wrote.
If you choose to bake trims to a plane, make sure the highpoly geometry reads well when projected (90 degree corners or overhangs won't show). When creating meshes with complex profile shapes they can be broken up into multiple UV strips + hard edges. Consider simply modeling curved profile shapes into the geometry.
I think it's important to understand that the shading of the final asset (normal map applied) is only matching the highpolys shading, if its mesh shading matches the shading of the lowpoly mesh the normal map was baked with. Oh well, I think that's what gnoop just wrote :D
If your project consists of rooms/interiors and on top you use ue5/nanite, you could consider just modelling the trims and map UVs to strips.
Here is an example showing some options:
@killnpc Hey! You are right, you made me realize that I made a terrible explanation of my problem.
I'am using a Blender plugin called GrabDoc, that allows me to easily bake high poly mesh to a plane. Then, I'll take the low poly mesh and map its UVs on this trim sheet.
This is my trim sheet so far:
So, my issue is when I have 90 degree angles, just like you said. I found out that even if I decrease the angle a bit, its really difficult to correct place the UV over it, it is very thin and the shading will probably be wrong.
I'm very familiar with baking cages, but that is not the way I want to go. I'm not trying to bake high poly directly over a low poly mesh. But thanks anyway to pointing me to those articles. So, just to clarify my question, how should I place these pieces on a trim sheet so I can UV map my low poly mesh on it latter.
In this view, you can see that I scaled those edges outwards a bit. The results were satisfactory, it was easier to map the low poly over it. But after reading what you guys said, this is definitely the wrong solution, right ?
@gnoop what you are saying is what @Fabi_G demonstrated on his example A? (btw, thanks a lot for that @Fabi_G) Make the vertex normals on my low poly mesh pointing straight upwards and let the normal map do its stuff ? Should I do this for every geometry that I use this trim sheet on ? like this ?
Well, I guess not, I sent it to UE5 and the shading is all wrong..
Half left is using geometry normals + normal map, and half right is all vertex normal pointing forward + normal map. =/
Guys, I really appreciate the patience with me going trough this. One thing that still isn't very clear for me, is about splitting the edges and make those hard, Option C on @Fabi_G examples, maybe I need to mess with it a little bit so I can see for myself how it works.
Since you're using a grab doc you're only capturing the normal detail on a single axis and those edges are only a few pixels wide:
You would need to flare those faces out in order for the grab doc you capture the info:
This may cause undesired lighting results on those faces if your game mesh is using 90 degree angles, though, so you would probably be better off unwrapping the piece and baking it with the angles you want and then you could just add it to your trim sheet in photoshop.
Thanks for your input on this @Bolovorix
So if I understand all of this correctly. I can also make this angles on a different trim (like @Fabi_G demonstrated in the example C) and then map my low poly on it using hard edges. Is that right ?
Yeah. And using sprunghunt's trim texture as an example you would just position your shells the way you want them:
@GlowingPotato Hm interesting, did you check "Flip Green Channel" for the normal map inside of unreal?
yes, it's Fabi_G's example A . You need to relax you hi-poly source a bit with no 90 deg corners . The way the projection would show you a few pixels of sides at least.
As of Unreal render be sure Unreal uses your edited vertex normals and not recalculate them back to default positions . I don't use Unreal but recall it needs a checkbox somewhere to import fbx with custom vertex normals intact. That's probably a case in your example.
if a surface have an extreme angle to your edited vertex normal it does make a bit less accurate effect since the normal texture is 8 bit only usually but typically it all goes just fine. You can also increase a contrast of normal channels to compensate "relaxed " source.
If you use Blender check normal map with Evee viewport render. If it works there should work in Unreal too ( considering Blender uses inverted green channel}
Oh no.
Blender uses OpenGL Normal map format correct ?
in GrabDoc I have the option to flip the green channel.
I totally forgot about this.
I will test this and post the results.
@Fabi_G thanks for pointing the normal map issue to me.
Shading looks good now.
I Still have lots of questions about trim sheets, but I guess I just need to experiment more with it.
I really appreciate all the help your guys are providing. What an awesome community.
That flat looking /parallel normals approach has one more huge advantage . You could kill all the extra profile geometry in a next lod and it gives you no shading glitch at all when the lod is switching . It's basically same as Dx11 tessellation/displacement but much more efficient. You can set the switch distance very close to camera because of that.
Only if you do not compensate stretched UVs tho. I guess it comes down to, how close can you get and is a little stretching due to a straight planar projection acceptable or not.
Woahh, thanks for sharing this information. I didn't realize that.
You guys are awesome.
I usually recommend mapping the perpendicular faces to somewhere else on the sheet for your higher lods to get around that issue.
You sacrifice some pixel perfect nuance at edges still but you're not restricted in terms of the shape of your high lods and the fact you can drop 90% of your geometry 10m from the camera without seeing any specular popping is a godsend.
its worth pointing out that this technique is not restricted to planar surfaces - projecting normals from low lods up to high works in the same way on many types of asset