Currently, Roblox doesn’t support the editing of texture maps of SurfaceAppearances in a live, running game. We are only limited to those which are set in Studio and published to the game.
Use Case:
This would be useful for any type of in-game UGC involving meshes or any case where you’d want to swap many textures on a mesh.
In our game, we allow players to upload custom liveries to their police cars. We get hundreds of these uploaded to the game every day. (Yes, our staff manually approves them on top of Roblox approval.) Currently, we’re limited to using Decals to apply said textures onto a car body mesh. There are obvious limitations with Decals- mainly the fact that we have to use a separate decal/image for each side of the mesh. Whereas a SurfaceAppearance supports UV wrapping a single image onto the mesh. UV maps would work much better when applying a livery to the curved and edges of a car. Decals often get stretched or cut off on the non-flat surfaces.
This could be useful for any range of applications where you’d want to change the texture of a mesh in-game. For example, a prop in the game catches on fire, we want to replace the default texture with a burned texture. Currently, you must have a duplicate of every mesh for each unique texture you want to use. Not only is this not ideal for the developer workflow and game setup, but this is very limiting in cases where you want the ability to swap between many different textures or even if you don’t know what textures it will use until the server is already running live.
Why cant we use the MeshPart.TextureID property? Two reasons: 1. It doesn’t support PBR maps and 2. We loose the ability to recolor the MeshPart (our textures have some transparent area, the mesh is recolorable by players in game).