Carbon Fiber panels
Since carbon fiber has a visible weave pattern, and I want to keep that pattern continuous across each panel (just like on real production cars), I had to unwrap everything accordingly. I can’t stack the front side of a panel on top of the back side, even if they perfectly match, because it would break the weave direction. However, because I want the pattern to have a V-shape, I can mirror one side onto the other. That introduces another challenge: the symmetry becomes easily noticeable. Taking all of this into account, the unwrapping ended up requiring around 12 UDIMs, which might be acceptable for a large production, but I still have to render this car on my own PC, so I need to find a more efficient solution.
I’ve splitted all carbon parts into 3 groups:
- Exterior parts
- Carbon tub
- Interior parts
So, the most effective way to solve this is by using trim sheets. This approach fixes all of the problems above: it allows me to create V-shaped weave patterns by mirroring UV islands along the X-axis, lets me texture as many objects as I need using a single texture set, and allows me to use the Mirror modifier with a UV offset so the texture itself isn’t mirrored.
Here’s the albedo for the carbon fiber trim sheet I created. I simply exported a 2x2m plane into Substance Painter, since it fits perfectly at 2048 px/m in a 4K texture. Notice that the weave pattern is angled in only one direction. That’s intentional, because I create the other side of the V-pattern simply by mirroring the UV island:
And here’s UV aligned to this texture to perfectly match weave pattern. Ignore UV mess you see here and what it takes so much space, because I’ve visually splitted every object into it’s own tile for usability purposes and it doesn’t really matter, since it uses only one repeating texture.
However, there are still a few downsides.
The first issue is that all edge damage is gone, which is a shame. Technically, it could be brought back: I would just need to add a thin strip to the trim sheet, align the panel edges to it, place seams more frequently, and match the weave pattern more precisely. Showing seams here just so everybody understands what’s going on.
The second issue is the hand painted normal map. I’m not sure how well it’s going to work because, ideally, it should be aligned to the world space orientation of the object being textured. Since the same trim sheet is reused across many different objects, UV seams could become quite noticeable due to the way tangent-space normals are calculated on different UV islands. I’ll need to figure out a solution for that.
The third issue is that the trim sheet is split into two sections: the lower half contains scratches for exterior parts, while the upper half is mostly clean for interior parts. However, some interior objects, like the bucket seats, occupy almost the entire tile. As a result, the bottoms of the seats inherit scratches they don’t really need. One possible solution would be to split the seat UV island in half, but aligning the weave pattern on such curved geometry is a pain, and it’s not something anyone is likely to notice anyway, so I can ignore it for now. Also notice the repeating green rike brush on the lefts seat and the left side of a dashboard. In this case it doesn’t really matter, because seat gonna have cushion in that place, but generally I try to avoid so obvious repetition where it matters.
Here’s detailed examples of aligned weave pattern for V-shape I talked about despite UV-seam and using only one texture. Notice how it blends together very well and even scratches here blend smoothly. And even underneath the pattern still matches(except scratches, but it easily can be fixed in this case)
However, there is still cases(usually in the corners) there is just no way to match it, because texture comes from all different angles and directions. And in this case it’s totally fine, simply because you can find cases like this in real world. It’s pretty much the same exact issue they dealing with.
Here’s couple general shots:
In conclusion, by using just one trim sheet, I’ve textured:
- the entire carbon tub (5 UDIM tiles otherwise)
- the exterior carbon panels (4 UDIM tiles)
- the interior carbon panels and two bucket seats (roughly 2 UDIM tiles)
Considering how much texture memory and loading time this saves, I think it was definitely worth it 