Skinned MeshParts are live!

Skinned MeshParts are live!


We are pleased to announce the introduction of skinned MeshParts. Previously the appearance of characters and objects were represented by rigid parts. Now, the surface of those parts can be continuous making the mesh smoother, and more realistic looking.

What does this look like?

The avatar on the right is a traditional rigid R15 Model. The avatar on the left is made up of 15 skinned MeshParts in the exact same R15 configuration - the main difference being the meshIds of the MeshParts. Notice how there are no gaps at the elbows, shoulders and knees. Also, notice how there is no longer intersection between the lower torso and the legs.

Here are some examples:

Developer Starboard Studios was able to use skinned MeshParts together with the new upcoming surface appearance feature to create amazing visuals:

Skinned MeshParts can also make for some interesting squash and stretch animations:

This character can be seen in one of the first places to use skinned MeshParts, Frogge:

How do I make these skinned MeshParts?

Make sure you have a Studio build 0.452 or higher.
You can use any 3D modeling tool that supports linear skinning, and that can export information to the .fbx file format. FBX version 2014/2015 is known to work well. We support between 1 to 4 joint influences per vertex. Make sure you have the option to export skin weights set in the modeling tool.

How do I import these into Roblox Studio?

Currently, only the AvatarImporter will import skinned meshes. If there is skinning data with the mesh the engine will import it. MeshIds generated by importing skinned meshes can be used wherever MeshIds are used. However, we only support skinning with MeshParts.

1.When using the first three R15 import options, joints and geometry will get renamed as per the R15 spec.
2.The ‘Custom’ option can be used for non-R15/Rthro Models such as trees, birds, dragons, etc.
3.The triangle limits for the Avatar Importer are increased from a rig limit of 10k to 50k, and an individual mesh limit of 5k to 10k. That means each MeshPart mesh can not exceed 10k tris, and all the mesh in one import can not exceed 50k tris.

What controls which MeshParts smoothly join together?

If MeshParts are connected with Motor6Ds, Welds, BallSocketConstraints, HingeConstraints or WeldConstraint, and they are under the same Model instance, then the mesh will join when the meshes share joint names.

Can I make skinned accessories to work with rigid R15 parts?

Yes, as long as the rigid parts are part of a Humanoid Model. The accessory mesh needs to be skinned to joints named as per the R15 body parts. Eg. LeftUpperArm joint is where the left shoulder is. This is the same as the current convention for importing R15 Models.

How can Parts control the joints of a skinned MeshPart?

If a MeshPart has a joint in its skinned mesh with the same name as the MeshPart, then that joint is driven by that MeshPart.

Do you support Special Meshes/FileMeshes?

No, only MeshParts. Also, we are working on making R15 heads a MeshPart.

Can I control the joints of the mesh without MeshParts?

Yes, there is a new Instance type, Bone. These are created on import for any joint that does not have a matching named MeshPart. These are ideal for adding visual finesse such as rotating eyes or moving fingers.
Be careful as the movement of Bones does not affect Collision or Physics. If you need other Parts to follow the motion of the Bones, you can use the Lua API (linked below) to read a Bone’s TransformedWorldCFrame on RunService.Heartbeat.

Bones can be animated by playing back an animation through an Animator or Humanoid, or directly through the instance’s Lua API by changing Bone.Transform. See:

They are backwards compatible with existing animations, such as those for R15 parts, provided the Bone names match the animation’s Part names.

Is there a way to visualize Bones?

Yes, you can enable show constraint details:

Note: the Bones will only appear in the non-animated position. This helps to pick them, and to show the bind pose of the joints. It is planned for a later update to show the animated bones and their connections but through a different option in the debug rendering menu.

How do I make or import Animations?

Inside Roblox Studio, you can use the AnimationEditor to animate the MeshParts or Bones.

You can use the AnimationEditor import menu to import an animation in .fbx format:

Or, since the runtime animation format did not change you can use your existing animation creation path.

How do I make content compatible with existing R15 animations?

S15 : R15 compatible,15 separate MeshParts that skin together.
Build the character as you would for R15 but skin the mesh to the joints in the authoring package. Use the ‘Rthro’, ‘Rthro Slender’ or ‘R15’ import setting. This will create a Humanoid based character that is backwards compatible with R15.
See S15_Lola_IPose.fbx as an example.

S1 : R15 compatible, 1 MeshPart.
Make sure you have the standard 15 joints named as per R15, except ‘HumanoidRootNode’ should be named ‘HumandoidRootPart’. Skin these to a single mesh. Use the ‘Custom’ import setting. This will create a Model that can be used to play current catalog R15 animations but on a single mesh.

I already imported some skinned meshes using the AvatarEvolution Beta Build, will these still work?

Yes, but only if you load the place into Studio and save it out again. This will update the MeshParts to the latest format. You may also need to temporarily add a Humanoid to get the mesh to show skinned.

Known issues that will be fixed in future updates:

  • When making changes to the mesh within a rig in script - eg. adding parts, changing textures or changing translucency, the rig may flicker back to the bind pose for a frame.
  • When importing animation using the AnimationEditor joint names are renamed as per the R15 spec. as there is no option to import as Custom, and this may prevent Bones from animating if they were imported as Custom in the AvatarImporter. Until this is addressed, joints in Custom skinned meshes should not contain the following suffixes: “_joint”, “_jnt”, “_jo”, “_jn”, “_jt”, “_locator”, “_loc”, “_lc”, “_lr”, “_lctr”, “_bone”, “_bnd”, “_bind”, “_bn”, “_bd” - or you can use this plugin:
    to import a custom animation.
  • When manually changing the meshId property of MeshParts in Studio, when going from rigid to skinned it’s possible for the mesh to get in a state where it’s no longer skinned. The work around is to add a Humanoid under the MeshPart’s parent Model. Once the mesh is showing skinned again, you can delete the Humanoid.
  • When importing a rig where Parts match to joints, the Parts will all be connected to the root Part not their correct parent Part in the joint chain. The workaround is to recreate the correct connections in Studio. This will be fixed in a future update.
  • When scaling parts with Bones under them using the Studio scale widget, the Bone translations do not move, and the mesh will appear stretched or squashed. This can be corrected by manually moving the Bones, or running the script here: Bone scaling script. Or, scale on export instead. [ Update: this appears fixed with the latest dragger. ]
  • If all the skinned MeshParts in a Model are hidden the whole Model becomes hidden. You can workaround this by setting transparency to 0.999. A fix is coming.
  • Using the Custom option of the AvatarImporter does not create attachments for mesh named “…Att”. In most cases you can use the R15 options instead. It will be fixed shortly.
  • It has been reported that skiined MeshParts are sometimes not rendering correctly in ViewPort frames.

Gotchas - things to be aware of:

  • Skinned mesh deformation does not affect physics - it’s purely visual; collision geometry is not affected.
  • Humanoid root movement is scaled based on HipHeight. You can disable this with the AutomaticScalingEnabled property of Humanoid.
  • .fbx files can contain multiple animations, and the importer only reads the first one. If you are not seeing the animation you expect check there are not multiple animations in the .fbx file.
  • The Custom option of the AvatarImporter no longer changes mesh names by removing “_Geo”, or skipping the first joint in the hierarchy. The was done to support a wider range of custom imports.

7 posts were split to a new topic: Feedback - Like Instead of Reply

Is there an alternative to using C0/C1 manipulation for features such as head tracking?

As of currently my game’s rigs rely heavily on altering the C0 of the neck and tail.


Nice, I can’t wait to see how games make use of this feature. (✪‿✪)ノ

Could this be made non-visual in the future? Could the geometry will collideable in a later update? Although this is mainly for fine-tuned details, certain games need the accurate collision that bones can’t currently provide.

Don’t take this the wrong way though. This is very cool.


Ooh! I heard about this weeks ago and this looks really cool! :o
Can’t wait to see how they turn out in games! :smiley:


Nice skinned meshes now I can make custom characters and use skinned meshes to make them more better or use it on a sword


Yess this will open so many doors of possibilities!! Can’t wait to see what everyone cooks up!

@CloneTrooper1019 has made a rather interesting (to say the least) demo of this:


Does this mean that we can rig a mesh in blender without chopping its joints


I have been waiting for this update for some time. Excited to see it finally arrive. The level of quality found in Roblox games is sure to reach new heights and push the platform to a more competitive standard with the existing games industry.

Awesome job to the team who made it possible! :clap:


Yes, you’ll be able to do that


A good update, although, I can’t quite grasp where this would be if someone were to import it to the toolbox Models or meshes or as an animation…


When can we see catalog body parts being updated to support skinning?


OooO The frog took my eyes away and put it on the new feature, Now i can’t wait to import this in my creations.


Does this actually means NEW games right now will utilize skinned meshes?! Ooh this is so exciting and a big step for game developers!


Every day it seems more and more likely that Roblox plans to phase out SpecialMeshes. If this is the case, there are many use cases for SpecialMeshes that are not addressed by MeshParts, so here’s a quick rundown and reminder that UNTIL THESE ARE ADDRESSED, PLEASE KEEP SPECIALMESHES!
*SpecialMeshes can represent models smaller than 0.05 studs and larger than 2048 studs.
*Resizing baseparts is an EXTREMELY expensive operation, so for animating a mesh that requires visual size changes, modifying the Scale property of a SpecialMesh is far more optimal than modifying the Size property of a Meshpart.
*SpecialMeshes can have their vertexcolor shifted (this overrides per-vertex vertex color with one uniform vertex color which is pretty annoying, kinda wish we could have both per-vertex and per-model coloring…)
*Decal and Texture mapping behavior on SpecialMeshes maps the textures to the mesh’s UVs, whereas in MeshParts the texture is mapped to a cube projection. In many cases the UV behavior of decals for SpecialMeshes is preferable, this allows for layered texturing and various effects.

[on this list of items, 3 of them are critical to my projects and if these features are lost, I would have to cut features. I probably missed many more cases of SpecialMeshes being uniquely useful, so feel free to add]


I’m cool with this update as long as this isn’t Roblox’s chance to force Rthro or other non R6/R15 chars on people, because it actually looks really good for games like Frogge and bird animations.


This is a great update. I feel like Roblox is progressing even more to embrace more complex and beautiful games.


Love it, glad to see more changes coming to the platform. I am gonna try using these, excited!
Thanks Roblox!


This is the best update I’ve seen so far :heart_eyes: : I hope many future games will choose boned characters over the standard r6/r15 rigs.


@vMalware Animations can be blended/weighted. Eg. tail left / tail right ?