Workflow is everything. What you're doing now is probably the best case if going back and reworking is not an option. Just know that if you ever end up releasing on Marketplace for Xbox, this is all stuff you will really want to consider because the Xbox is ruthless when it comes to optimization. More so the Series S and Cloud Gaming.
I think the biggest thing I have learned is that you really have to think about optimization from the start, meaning all the way down to how you build and texture a model. Some models might be able to be done in a similar way to this dock I did a while back:
View attachment 92861
I have 12 dock models that all use the same 2K texture sheet, and the texel density is still very good.
The trick is thinking of the parts that would make up the 12 variations as modular.
View attachment 92863
As you can see, out of 12 model variations, I only have a few core parts that I actually pack onto the texture sheet. Then the dock variations get built from these parts.
The tie-off railings are raised into the air so that they don't cast any Ambient Occlusion on the tops of the dock pieces when I go to bake and paint it in Substance Painter. That's because for several of the variations, I didn't want to have the railings. Kind of like how I don't want to have tires on some either.
If I were to build all 12 docks to how I want them and pack all of the pieces to a texture sheet, I would end up with at least a 4K texture sheet, and my models would still have much lower texel density than what they do with my 2K sheet now.
So, if you have something that is going to be reused multiple times in the same model, if you can get away with it, only pack it on the texture sheet once and just duplicate it where you need it on the model later on. Obviously you still need to consider how things will bake when you go to paint, but if the model part is going to bake the same way, it's worth doing to save some space on the texture sheet.
You also may notice that the tire is not on the dock texture sheet. That's because it's reused from a stand-alone model, which uses it's own 1K texture set. So, since I already have that model, and I'm just going to stick it on the side of the dock multiple times, it doesn't make sense for me to pack it to the dock texture sheet. That would be OK if I were only using it for the dock, but it's just a waste of space since I already use the same tire model as a stand-alone.
Now, that is another set of textures being called by the dock model, however I can also get rid of this texture memory in my LODs. Eventually you won't be able to see the detail of the tires in one of the LODs, and at that point the material just gets swapped to Vertex paint that matches the color of the tire. So, the dock texture is still loaded, but now the tire textures get unloaded. Eventually, the same will happen for the dock textures so that at a distance the model is not using any texture memory - just vertex paint with a single material.
Obviously this doesn't benefit every situation, but it can be useful for some situations where you are doing a lot of similar models.
Another tip: you can also expand on this method by using vertex paint for color variations. I can go back to the tire for this example.
View attachment 92864View attachment 92865
I have multiple variations of my tire, but they all use the exact same mesh, no matter if they are stacked or a different color. Traditionally, if you wanted different colors, you would just pack all of these tires to a texture sheet and do it all in paint. Or if you were a bit smarter about it, you would just unwrap one tire and have a different albedo texture for each color, but share the Comp and Normal. However, you can go a step further:
In my example, (in Substance) I just painted the base color of my tire white, but kept the roughness and such for the rubber material, and then put any grunge I wanted on top of that, like usual. That gives you an Albedo texture that looks like the above. The comp and normal export the same as they would if I had just painted the tire red in Substance. The only difference is just setting that base albedo color to white instead of using the natural rubber texture. Then in Blender you just go into vertex paint mode and paint (fill) the mesh with whatever color you want it to be.
It wont display correctly in Blender (see the dock photo), but it will come out looking like the above shot when it is rendered in the sim.
With this method, I use the same Material, Albedo, COMP, and Normal texture for each tire. So, I don't need extra albedo textures for each color variation. The texel density stays high since you only have one tire UV on the sheet, and in tern you can use a lower resolution texture or fewer individual textures for the exact same result. Just a little bit more effort, of course.
Doing little stuff like this can really help control bloat when it comes to smaller items. Hopefully I didn't go to far down the rabbit hole with these tips. I just figured it might help to demonstrate a few methods I have been using lately to do things cheaply (performance wise), even if it's not something you might be able to dabble with until your next project. It's also getting late and my brain is going more and more to mush, so hopefully my words just make sense in general... lol
I have a hard time explaining this stuff sometimes, because you really just have to adapt your workflow to the situation while trying to keep everything balanced out. Like, you don't want too much of anything. Use the least amount of materials and textures as possible to do the job, but also sometimes more materials and textures are to your benefit if it means not using a 4K and having an overall lower file size for that model's textures.
Eventually I wouldn't mind doing a video on tiling textures, but since I just tried it for the first time, I'm still messing around with what all works best for me. It's pretty straight forward though. You just use smaller texture(s) that can tile and map your UVs to it. Then scale them up until you get the texel density that you want. Obviously the higher you go, the more you might notice a repeating pattern, but that's where the grunge in the detail texture comes in to help break it up a bit. Just getting the detail texture to blend well can be a challenge sometimes.