SpecialMesh'ing an Accessory

Howdy, developers!

Today I come to you seeking… well, wisdom, I guess. I spent all day today trying to write up a function to take all of your accessories and turn them into parts with special meshes inside. I thought this would make things easier on me because my game is meant to allow players to translate, rotate, scale, retexture, and recolor their accessories. The biggest draw for me here is that VertexColor is a property of SpecialMesh, allowing players to freely apply color filters over accessory textures so they don’t have to do a ton of extra work to make, upload, and apply their own custom texture. With hats that are already in that configuration, scaling is a simple matter of taking their input and multiplying it by the ‘original’ scale of the SpecialMesh.

image
depicted above: the original MeshPart necklace is scaled just fine, but the SpecialMesh duplicate seems to have slightly altered dimensions. It’s slightly thinner than the real accessory when set to 1,1,1. Setting the SpecialMesh to 1.15,1,1 seems to set them on the exact same scale, however I doubt multiplying the X by 1.15 works on every MeshPart accessory on Roblox.

This is a problem with MeshPart accessories, however. With those, VertexColor doesn’t exist so that entire feature is gone. But when trying to add that feature by converting MeshPart accessories to Part + SpecialMesh accessories, I encountered an issue.

The biggest issue seems to be that SpecialMesh scaling doesn’t work the same way as MeshPart scaling at all. In fact, scaling a SpecialMesh of the exact same MeshId as a MeshPart in at least some scenarios seems to produce entirely different mesh shapes. The AccessoryWeld is easy enough to convert/scale, welds don’t change.

TL;DR - Is it possible to convert MeshPart accessories into Part + SpecialMesh configurations? Currently, it seems like this may not be possible because of limitations on mesh weirdness, but I would love to be proven wrong on this one. That VertexColor feature of SpecialMeshes is very nice.

4 Likes

Bumping this, since it’s not possible to change the Id of a MeshPart via script. This is fine for most applications, but it ruins outfit saving.

You can create a MeshPart using InsertService:CreateMeshPartAsync()

For those of you stuck waiting on a fix for this, I spoke with a Roblox staff member and they said this isn’t something they’re going to address.

They also said however that there’s a work-around, but it’s imperfect. If you use HumanoidDescription, you can load in any accessory ID and it comes in as a MeshPart, automatically scaled. HumanoidDescription will overwrite your character’s settings however, so your best approach would be to 1: apply the HumanoidDescription to a dummy with the exact same dimensions as your character, 2: take the new meshpart accessory from the dummy and put it on your player

1 Like