Home Technical Talk

Trim sheets. How to use them?

polycounter lvl 10
Offline / Send Message
Darth_Biomech polycounter lvl 10
As I was able to understand, today the industry standard (well, one of) is using trim sheets, that are texture with bunch elements that can be seamlessly tiled on the model. I think old plain regular tileable textures also considered a part of that technique, but I'm not sure...
But how do you work with them? Not in a technical sense "how do I model a stripe of polygons", but... well, philosophy, I guess? You have an abstract mincemeat of a texture without clear indication what part of it goes where, and you need to visualize ahead both what kind of trims you will need on the model, where to place them, and keep all that in mind during modelling to be able to see final result without any UVs done yet and... It just makes my head spin and I stumble blindly not sure on how to proceed. I mean yeah, placing simple linear trim stripes on edges of stuff is easy to keep in mind, but that's the most rudimentary application of that technique, right? It's adding the elements and detailing, or even constructing your whole workflow to texture just with trimsheets is where I begin feeling lost and outsmarted.

Replies

  • LaurentiuN
    Offline / Send Message
    LaurentiuN polycounter
    Maybe try to model some simple blockouts without details at least for doors, walls, floors, ceilings. And do a little texturing over them in photoshop, that way you will know what trimsheets to model. It`s easier than visualize everything in your head. That way you will have a consistent environment as well, you can change quickly colors and shapes. And yes you need to do some prep before starting modeling the trims. Hope this helps.
  • Mark Dygert
    You do it in phases and try to figure it out while you're pretty early on in the block-out/greyboxing/modeling phase. You do it with simple objects and simple unwraps with simple textures and get a general feel for how it will look when you take it to the next step. If you're working with brick, try to get a simple bond pattern in there and color the bricks so you get a sense of the repeating pattern. If you're working with corrugated metal, get a simple form of that pattern in there and see how it repeats. 

    I suggest hanging onto these maps because you can drop them in at any point in development and see which objects are using which part of what texture. Which is useful when you're strolling through a level and you see something odd.

    I've even gone as far as to create a material switch that toggles them on/off that way I can pinpoint a spot on the texture and see where else it pops up. Of course you don't ship that way and it helps to build in a filter that strains out those branches but that's a very different discussion for another thread.

    Trimsheets are mostly used for trim details but really can apply to anything that needs to tile in one direction. Normally each asset only uses a small piece of the tile and the UVs for other parts are offset so they use another tiny part of that rail. Stairs and trim are probably the easiest to think about, but really there are a lot of uses for trim sheets.

    Some examples:

    You WON'T texture ONLY with trim sheets, you can try, it might cover a lot, but like any rule when you take it to the extreme it tends to make things harder and look worse or only works within a narrow artistic aesthetic. So you have to balance out several techniques to make things work, all within whatever your technical constraints happen to be.

    Keep in mind how thing fit or work together, how they'll be loaded and use that efficiently. You might end up in a position with extra space and you might be tempted to slot in objects that might not belong with that set. While it might save you from creating another texture it might cause a situation where a mug or a window gets dropped into a scene and loads a giant texture file, only to use a tiny part of it. So keep things as sets and pieces, keep them organized and don't hodge podge your scenes together. This is especially important if you're working with level designers, especially if they're new to the industry. They tend to pull stuff in from all over just to fill out areas and before you know it they've killed the perf just by cluttering up an office.

    Sometimes it's more efficient to duplicate an asset and assign it to an already used trim sheet that has some empty space but belongs to the correct texture set. that way they aren't pulling in dozens of textures to prop that one office, they're pulling 1. Because its a new texture you can change it up a bit adding variety to the world.

    "I have empty space what do I do with it? I don't want to waste it" Just know that almost all games end up with some percentage of wasted space, it happens... you have to spill a few pixels to break a few eggs... or however that saying goes =P 
    Most of the time you can use that extra space to break up repeating patterns by moving some of the trim to another rail. Or invent new trim details for something with the empty space.

    Really all you're trying to do is texture a large number of details with as little textures as possible without giving away that its the same texture. Breaking up that repetition is important, you can do that a few different ways. Trim is just one of them, you still have other tools in the toolbox to help vanquish tiling details.

    Stuff like...

    Other Resources on the subject:
    http://wiki.polycount.com/wiki/Modular_environments
    https://mathsgame.art/projects/gJ04L8
    https://www.artstation.com/artwork/qA9gRD
    https://polycount.com/discussion/144838/ue4-modular-building-set-breakdown/p1
    https://cgsociety.org/news/article/3833/ue4-modular-environments-with-peter-nicolai
    https://www.gdcvault.com/play/1022324/The-Ultimate-Trim-Texturing-Techniques
    https://80.lv/articles/how-to-build-a-sci-fi-cockpit-for-a-game/
    https://docs.cryengine.com/display/SDKDOC2/Using+Decals+for+Destroyed+Structures
    https://polycount.com/discussion/160794/the-ultimate-trim-technique-from-sunset-overdrive
    http://technical-eden.blogspot.com/2011/12/beauty-of-tiling-trim-textures.html
    https://www.youtube.com/watch?v=IziIY674NAw


    Good luck and happy art'ing!
  • Darth_Biomech
    Offline / Send Message
    Darth_Biomech polycounter lvl 10
    Wow, thanks for such detailed answer.
  • toxicsludge77
    Offline / Send Message
    toxicsludge77 polycounter lvl 5

    If you haven't seen it yet, be sure to watch Tim Simpsons video about trims. Before watching it, I knew what they were but they didn't really 'click' in my head till @PixelMasher went over them.

    https://www.youtube.com/watch?v=IziIY674NAw

  • Marlo
    Offline / Send Message
    Marlo polycounter lvl 4
    Hello, I've seen every tutorial of Tim and they were realy good. Also I picked up a lot of threads in the forums and tried things out myself. So, a proof of concept for me was using a single cube. I quickly run into a problem where I haven't found an answer just yet. Using tileable trim sheets I can cover 2 beveled edges for one face - not 4. How can I cover a full cube with beveled edges from the normal map using a tileable trim sheet? 
  • Obscura
    Offline / Send Message
    Obscura grand marshal polycounter
    Can you post a picture please, because its not entirely clear what you mean.
  • Marlo
    Offline / Send Message
    Marlo polycounter lvl 4
    Obscura said:
    Can you post a picture please, because its not entirely clear what you mean.
    First of all we have a cube with a simple tileable trim sheet. Lets assume it was detailed.


    So you can see that at the sides it is looking "okay" but at the top and at the bottom there is no detail like at the left and right edges. That is what I meant. If you have 4 sides you can just cover 2 sides with a regular trim sheet.
     


    So at the moment I have no idea how I would fix this problem. More complex models assume much more knowledge. A PDF I've read: 
    https://www.gdcvault.com/play/1022324/The-Ultimate-Trim-Texturing-Techniques

    said that there is no excuse for having ugly low poly edges.
    So that is why I ask, how to avoid them in a simple problem like that?

    Also, how is it supposed to work with something like this:



    In the UV space you can see two examples. The left UV Island is the normal one (without stretching). The right one is the one needed for a vertical tileable trim sheet but the stretching is too much. Isn'it? At the moment I feel realy uncomfortable with this method and I have no idea how to do solve problems like that. Though I would love to make use of it because it sounds realy "fancy".
  • Eric Chadwick
    Just reuse the same strip of trim for each bevel. 
  • Marlo
    Offline / Send Message
    Marlo polycounter lvl 4
    Just reuse the same strip of trim for each bevel. 
    So you mean to add another Edge loop around close to the edge of the top and bottom to split the UV Islands? Wouldn't that be kinda unefficient just to texture something like a cube? Not to mention to how many loops it would be on a complex model?
  • Eric Chadwick
    Bevel the cube. Map each bevel quad to the same strip.
  • Marlo
    Offline / Send Message
    Marlo polycounter lvl 4
    Bevel the cube. Map each bevel quad to the same strip.
    But that is realy the only way of doing it, right? I mean you litterally HAVE to bevel it or actually create loops to split UV Islands?
    This is realy importent to know actually. Thanks for your answer!  =)

    For anyone who is reading this and also struggles with stretching:

    If you add bevels to your model and split the uv islands you can avoid stretching by scaling it to fit to the trim. This is at least how I understood it and I think this is correct.


  • Eric Chadwick
    Yep!

    Share your results.
  • Sage
    Offline / Send Message
    Sage polycounter lvl 19
    @MarioMarlo said:
    Just reuse the same strip of trim for each bevel. 
    So you mean to add another Edge loop around close to the edge of the top and bottom to split the UV Islands? Wouldn't that be kinda unefficient just to texture something like a cube? Not to mention to how many loops it would be on a complex model?
    Here is a video that show a way to tackle the corridor shape. You want to unwrap that shape so it's straight. So it's like a strip. If you add and edge loop in the middle, I believe the UV program you are using has a function that's called Straighten Shell. I'm not sure if you use Maya or not. Blender has something called follow active quads and in Max you can do it with a function called Unwrap Strip from Loop. 

    If those automated ways don't work you can do go old school, planar map position each face so it lines up in a strip, then align the edges so the pattern fits. Working with UVs back in 2000 was sooo much fun. :astonished:

    Here is a demo showing how I would tackle the corridor shape you showed...
    https://www.youtube.com/watch?v=VLtL6wagnG8&feature=youtu.be

    Malcom made a video that shows what I am talking about.
    https://www.youtube.com/watch?v=sCZpsqB8ouo&t=217s

    Mario keep in mind that where there is a change in smoothing groups (hard edge/ soft edge), uv splits, verts are created behind the scenes to get things to work. So if you make your bevels, uv seams, and uv splits line up you optimize the process.
  • Marlo
    Offline / Send Message
    Marlo polycounter lvl 4
    Sage said:
    @MarioMarlo said:
    Just reuse the same strip of trim for each bevel. 
    So you mean to add another Edge loop around close to the edge of the top and bottom to split the UV Islands? Wouldn't that be kinda unefficient just to texture something like a cube? Not to mention to how many loops it would be on a complex model?
    Here is a video that show a way to tackle the corridor shape. You want to unwrap that shape so it's straight. So it's like a strip. If you add and edge loop in the middle, I believe the UV program you are using has a function that's called Straighten Shell. I'm not sure if you use Maya or not. Blender has something called follow active quads and in Max you can do it with a function called Unwrap Strip from Loop. 

    If those automated ways don't work you can do go old school, planar map position each face so it lines up in a strip, then align the edges so the pattern fits. Working with UVs back in 2000 was sooo much fun. :astonished:

    Here is a demo showing how I would tackle the corridor shape you showed...
    https://www.youtube.com/watch?v=VLtL6wagnG8&feature=youtu.be

    Malcom made a video that shows what I am talking about.
    https://www.youtube.com/watch?v=sCZpsqB8ouo&t=217s

    Mario keep in mind that where there is a change in smoothing groups (hard edge/ soft edge), uv splits, verts are created behind the scenes to get things to work. So if you make your bevels, uv seams, and uv splits line up you optimize the process.

    First of all thank you for your work to help out! 
    So I made a video about it to answer what my "problem" is referred to the stretching. I am not sure if I have to add an edge loop in the middle because that program I use (RizomUV 2019) has a tool which is straighten the Islands itself. Shown in the video. As I understand there is no difference between our methods because I can spot some stretching in your video at the exact same spots where I have stretching. The video:

    https://www.youtube.com/watch?v=gn2g5C_8Os8&feature=youtu.be

    Sorry my mouse cursor is not shown. Though it's not that relevant.
  • Sage
    Offline / Send Message
    Sage polycounter lvl 19
    It depends on the texture.  I would look at the asset in your engine with all the textures applied and decide how it looks. If you add loops where it's stretching, that starts to fix the distortion. If I really want to get rid of the distortion you have to add seams, but adding more texture uv splits adds more verts, so doing it this way is pointless. The reason to unwrap the texture in strips is that it's easy to texture it, and even change textures provide you are using the same layout.

    This video shows how adding in loops can help fix the distortion. It's shown at the 3 min mark. This may or may not work.

    https://www.youtube.com/watch?v=P3GfCuRFPCM

    Its seems your tool does the same thing faster though...
  • Marlo
    Offline / Send Message
    Marlo polycounter lvl 4
    Okay, so that distortion is something I realy have to get used to it and keep in mind. Thats the thing which realy got me thinking because before I learned about trim sheets I always cared about stretching, probably a little too much. 

    I also think that the straighten tool in Rizom is doing the same thing you do in Maya if I am correct. It is faster but the downside of it is that you cannot manipulate the mesh in there. If you want to add edge loops you have to get it back to your 3d software. Exception is buying a bridge I guess. Though you can add your texture to Rizom and check how it looks afterall.  I am using Blender 2.8 by the way. 

    EDIT:

    Oh and by the way. I've read that you don't have to straighten everything. It just has to fit into the trim sheet and basically look good. Here is the PDF, realy helpful. Look at page 43.

    https://www.gdcvault.com/play/1022324/The-Ultimate-Trim-Texturing-Techniques

     


  • labeeb
    Offline / Send Message
    labeeb triangle
    ok its my first time building a modular environment and I just textured 12 props using single trim sheet and now im reading this thread, why is this approach not good and are there any cases where you can get away with it, here is the sheet:
  • icegodofhungary
    Offline / Send Message
    icegodofhungary interpolator
    Usually when I do mine, I use the tiling along U to add variety. There's nothing illegal about what you did. I just find it easier to have a tiling direction. Like if I'm doing a wall, I can slap my wall in the middle of the U direction, or push it to the edges and it still wraps around. Now I have gotten two uses out of it. You can still add cuts and sort of "fold" the UVs to create a similar effect though. I think maybe having it tile in one direction makes for faster UV work?
  • Christoffer_Sjöström
    Offline / Send Message
    Christoffer_Sjöström polycounter lvl 3
    I'll borrow this thread instead of making a new one. So...
    How do you do utilize trims with connecting edges, I have a hard time getting it to work.
    Say I want to make a connecting wall or as in my picture a brick. How would I approach this to make the seams go away?

    I've read and watched multiple videos on the subject, but don't seem to be able to do it myself, when I'm making my trim sheets. Is it something I need to think of when creating the trim it self or does it have to with the uvs?
    The thing I can't really understand is how one brick side should be able to connect with the other side as they would have both different edge wear. 

  • poopipe
    Offline / Send Message
    poopipe grand marshal polycounter
    Well, you've identified the main issue with this approach.
    That being that if the texture doesn't line up you're buggered

     Trim sheets are a great way to handle large bits of architecture or anything that can take advantage of 1dimensional  tiling but when you want to use them on a unique prop you will encounter a lot of restrictions. 
    Not to say it cant be done, it's just a pain in the arse.




  • Christoffer_Sjöström
    Offline / Send Message
    Christoffer_Sjöström polycounter lvl 3
    poopipe said:
    Well, you've identified the main issue with this approach.
    That being that if the texture doesn't line up you're buggered

     Trim sheets are a great way to handle large bits of architecture or anything that can take advantage of 1dimensional  tiling but when you want to use them on a unique prop you will encounter a lot of restrictions. 
    Not to say it cant be done, it's just a pain in the arse.





    Alright, so you're suggesting in a case like this to make a bunch of bricks that are mapped to blocks instead? But let's say I want to create a large block for an example, it would require to much resolution for being uniquely unwrapped and wouldn't have the necessary details with a tileable texture. Or would you go with tileable+edge decals then? Or maybe just unwrapped with detail textures? 

    I would love to come up with more examples than blocks really, but I guess I'll have to check when I get this problem another time aswell :)
  • icegodofhungary
    Offline / Send Message
    icegodofhungary interpolator
    I'll borrow this thread instead of making a new one. So...
    How do you do utilize trims with connecting edges, I have a hard time getting it to work.
    Say I want to make a connecting wall or as in my picture a brick. How would I approach this to make the seams go away?

    I've read and watched multiple videos on the subject, but don't seem to be able to do it myself, when I'm making my trim sheets. Is it something I need to think of when creating the trim it self or does it have to with the uvs?
    The thing I can't really understand is how one brick side should be able to connect with the other side as they would have both different edge wear. 


    Your problem there specifically is that there's a tiny little space between your bricks or whatever on your trim sheet. You're UVing right up to that line, which includes it on the model. The trick is to give yourself enough of a bevel on your bricks so that you don't go right up to the little dark space between bricks. And for your bevels to be as close to 45 degrees as possible. That way you don't see the spaces in between at all. You also want to make sure your color/albedo/diffuse is both fairly even in values and not extreme in color shifts. Having shading inserted into your colors will also break the illusion.

    So just don't go all the way to the spaces/seams between your bricks or strips and you'll get a much more convincing result.
  • poopipe
    Offline / Send Message
    poopipe grand marshal polycounter
    poopipe said:
    Well, you've identified the main issue with this approach.
    That being that if the texture doesn't line up you're buggered

     Trim sheets are a great way to handle large bits of architecture or anything that can take advantage of 1dimensional  tiling but when you want to use them on a unique prop you will encounter a lot of restrictions. 
    Not to say it cant be done, it's just a pain in the arse.





    Alright, so you're suggesting in a case like this to make a bunch of bricks that are mapped to blocks instead? But let's say I want to create a large block for an example, it would require to much resolution for being uniquely unwrapped and wouldn't have the necessary details with a tileable texture. Or would you go with tileable+edge decals then? Or maybe just unwrapped with detail textures? 

    I would love to come up with more examples than blocks really, but I guess I'll have to check when I get this problem another time aswell :)
    Yes, in short I'd probably make a set of bricks and map them uniquely for that use case

    As to the other part..

    On a recent title we used tileables for large (4m plus)  rocks. The rock shader uses the main tileable plus  a noisy, small tileable masked in by a curvature map  to cover UV seams and add some variation on the edges of the asset. 

    We chose that method because it worked and it's cheap - edge decals are comparatively expensive , a pain the arse to author and in this case unnecessary.

  • Christoffer_Sjöström
    Offline / Send Message
    Christoffer_Sjöström polycounter lvl 3
    I'll borrow this thread instead of making a new one. So...
    How do you do utilize trims with connecting edges, I have a hard time getting it to work.
    Say I want to make a connecting wall or as in my picture a brick. How would I approach this to make the seams go away?

    I've read and watched multiple videos on the subject, but don't seem to be able to do it myself, when I'm making my trim sheets. Is it something I need to think of when creating the trim it self or does it have to with the uvs?
    The thing I can't really understand is how one brick side should be able to connect with the other side as they would have both different edge wear. 


    Your problem there specifically is that there's a tiny little space between your bricks or whatever on your trim sheet. You're UVing right up to that line, which includes it on the model. The trick is to give yourself enough of a bevel on your bricks so that you don't go right up to the little dark space between bricks. And for your bevels to be as close to 45 degrees as possible. That way you don't see the spaces in between at all. You also want to make sure your color/albedo/diffuse is both fairly even in values and not extreme in color shifts. Having shading inserted into your colors will also break the illusion.

    So just don't go all the way to the spaces/seams between your bricks or strips and you'll get a much more convincing result.
    Right! I've read about this (in the ultimate trim pdf I think). How do you approach this method of using 45 degrees bevels? I mean 45 degrees makes for a pretty large cut and how do you combine it with the edge wear. Do you make the wear on the "inner edge" and leave the other area clean? That's the part I don't really get, would be super grateful for a clarfication on this area!

    poopipe said:
    poopipe said:
    Well, you've identified the main issue with this approach.
    That being that if the texture doesn't line up you're buggered

     Trim sheets are a great way to handle large bits of architecture or anything that can take advantage of 1dimensional  tiling but when you want to use them on a unique prop you will encounter a lot of restrictions. 
    Not to say it cant be done, it's just a pain in the arse.





    Alright, so you're suggesting in a case like this to make a bunch of bricks that are mapped to blocks instead? But let's say I want to create a large block for an example, it would require to much resolution for being uniquely unwrapped and wouldn't have the necessary details with a tileable texture. Or would you go with tileable+edge decals then? Or maybe just unwrapped with detail textures? 

    I would love to come up with more examples than blocks really, but I guess I'll have to check when I get this problem another time aswell :)
    Yes, in short I'd probably make a set of bricks and map them uniquely for that use case

    As to the other part..

    On a recent title we used tileables for large (4m plus)  rocks. The rock shader uses the main tileable plus  a noisy, small tileable masked in by a curvature map  to cover UV seams and add some variation on the edges of the asset. 

    We chose that method because it worked and it's cheap - edge decals are comparatively expensive , a pain the arse to author and in this case unnecessary.
    Thanks for the insight! Yeah that sounds smart, decals on such a organic asset sounds like a pain haha. Anyway, great tip!


  • icegodofhungary
    Offline / Send Message
    icegodofhungary interpolator
    >Do you make the wear on the "inner edge" and leave the other area clean? That's the part I don't really get, would be super grateful for a clarfication on this area!

    Yes, exactly. Speaking of TUTT, it is a very stylized technique. If you look at Tim Simpson's (PolygonAcademy) trim technique, it's more oriented towards realism.


  • jpeele
    Offline / Send Message
    jpeele polycounter lvl 2
    Darth, I was having the exact same dilemma yesterday. I was running up against the issue that all the Trim Sheet tutorials explain how to create a trimsheet and then how you can use the trim sheet to create assets. But I was looking for a process to create the assets first and the trim sheet second. This seemed more logical to me, because how would you know what you need on a trimsheet if you haven't built any models using it yet.

    So I thought about it and I came up with this process:
    The idea behind my process is that I'm working on all the trimsheets at the same time. Basically I started a block out,  then moved to medium poly to get a sense detail scale, from there I layout the  trimsheets and do a highpoly pass on the trim geometry. For the Multi-Material I have one for flat repeating texture, one for trim, one for repeating panels, lastly one for prop objects. (I'm using 2x2m with .5m overlap dither so I can overpaint in substance). After baking just do a quick intial pass in substance and bring the albedos back into you modeling program. Use that to set up your UV's using the same Multi-Mat from before. Then attach the UV'd blockout to the geom from step 3, export that (everything in green in the example). Open up the intial pass substance project and import your new combined model.

    Now you're all set up in substance painter with your 4 texture sets and your model and trim sheets. So now you can do a final pass, and the cool thing is you can paint directly on your model and be adjusting the trim sheets at the same time. In SP you can add more dirt passes and tweak your scratches.

    I hope this helps. It's a lot of steps but I think it is an easier process than setting up 3 separate trimsheets and trying to fit them together after. This is the first model I've tried using this process, but so far I'm pretty happy with the workflow.
  • Christoffer_Sjöström
    Offline / Send Message
    Christoffer_Sjöström polycounter lvl 3
    >Do you make the wear on the "inner edge" and leave the other area clean? That's the part I don't really get, would be super grateful for a clarfication on this area!

    Yes, exactly. Speaking of TUTT, it is a very stylized technique. If you look at Tim Simpson's (PolygonAcademy) trim technique, it's more oriented towards realism.


    Great! Yes, have watched his videos a couple of times haha, they are really great, but he never went through the 45 degree bevel part, which has been the missing piece of information I've needed! So thanks for the clarification!
  • Eric Chadwick
    You can also use multitexturing to blend wear detail along edges. Works great, using vertex color to blend trim sheets with tiled textures.

    Edit. Oops already mentioned by poopie. https://polycount.com/discussion/comment/2738124/#Comment_2738124
  • icegodofhungary
    Offline / Send Message
    icegodofhungary interpolator

    I agree, it's easier to figure out what you need first, then make your trims. There's a good video floating around about the texturing process in Wolfenstein II that touches on this. It's not specifically about trims, but you see how they planned out their trims. They sat down with concept art and reference photos and used pen/paper to draw out their trim sheets. They had a lot of texture restrictions there so they had to plan everything out and design stuff around their limitations.


    Personally, I like to plan my trims when I move from grayblock to place-holder meshes. One of the biggest issues with trims is the difference in texture density. So if you can think in terms of trim sheets while you model, you can better keep a consistent density. And I also find it helpful to build models in texture space, if that makes sense. Like If you're doing a 4m wall, you can model the proportions you want for the different parts of the wall like the moulding or baseboard, and then directly transfer that over to a plane. I color code my rough models with the proportions I like so I can know what part of the trim is going where. This way I know for sure what the texture density is on the model without having to think about it. The only thing to worry about at that point is how much of the screen it will take up and how close the player will get to it. If you think in this way hard enough, you can basically make everything out of trims. Although I would say it's probably more efficient and versatile to incorporate more tiling textures.

    Here's an old project from one of the environment challenges where I started working that way:







Sign In or Register to comment.