Skinned MeshPart Studio Beta

Skinned MeshPart Studio Beta


Update: This Studio Beta has been re-enabled. Several known issues have been fixed.
Please report new issues in the comments.



Developers,

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.

How do I get started?

Make sure you have a Studio build 0.445 or higher, and have enabled the beta feature:

How do I make these skinned MeshParts?

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 support skinning only with MeshParts.
Note when using the first three R15 import options, joints and geometry will get renamed as per the R15 spec.
The ‘Custom’ option can be used for non-R15/Rthro Models such as trees, birds, dragons, etc.

Note: the triangle limits for this Beta are increased from a rig limit of 10k to 50k and an individual mesh limit of 5k to 10k.

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 provided that 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?

There are two ways this can happen:

  1. If a MeshPart has a joint in its skinned mesh with the same name as the part, then that joint is driven by that MeshPart.
  2. If a Part is in a Humanoid rig, and has a RigAttachment under it, then that Part and RigAttachment offset will drive the mesh joint with the same name as the Part.

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. Be careful as the movement of Bones does not affect Collision or Physics. These are ideal for adding visual finesse such as rotating eyes or moving fingers.

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:
https://developer.roblox.com/en-us/api-reference/class/Bone

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.

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.


Known issues that will be fixed in future updates

  • For skinned mesh to function correctly there has to be a Humanoid under the MeshPart parent’s Model. Without the Humanoid the mesh may not be skinned.
  • MeshParts without a textureId, and a SurfaceAppearance, will have incorrect UV mapping.
    The workaround is to put any texture id on the MeshPart.
    The SurfaceAppearance will override that texture, so you will not see it - but it will prevent the distortion.
  • 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.
  • 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”.
  • There is an issue with culling of skinned meshes - they disappear at odd camera angles. At fix is being worked on.

Gotchas - things to be aware of

  • .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 anims in the .fbx file.
  • Humanoid root movement is scaled based on HipHeight. You can disable this with the AutomaticScalingEnabled property of Humanoid.
  • Skinned mesh deformation does not affect physics - it’s purely visual. Collision geometry is not affected.
483 Likes

This is an extremely cool feature, I look forward to seeing what comes next.

56 Likes

I’ve been waiting for this. Let the games begin!

34 Likes

This is a really cool feature and will help out. Now we can evolve meshes!

18 Likes

This will change roblox for the better! I can’t wait to see all the other things that come from mesh deformation. I’m glad roblox is finally making these changes. Can’t wait to play around with this!

19 Likes

It’s not that I don’t think this is a cool feature, but as many before me have said, this isn’t what the developer community has been asking for. For the past few years Roblox has been continuely trying to catch up to other game engines like Unity and Unreal when it’s really unnecessary. I think we would all appreciate if you mainly focused on what we ask for.

53 Likes

Have been looking forward to this, this will definitely expand the possibilities in Roblox!
Thank you, dearly.

17 Likes

Will the thread be updated when this is fixed? This seems like a pretty significant issue that could make it hard (or at least inconvenient) to use skinned MeshParts in the meantime.

19 Likes

This is a pretty cool update from Roblox. I look forward to the rest!

14 Likes

At the moment the custom avatar importer has a tri limit of 10K, while Avatar Evolution did not. Is it going to stay this way?

12 Likes

Coolness, but I have to test it. Reskinning meshes has been a pain but an enjoyable pain. So here’s my question. If I purchase a character in the catalog and I reskin it and use it in a game, are there going to be any copyright issues? Do I have to give credit to someone or can I just implement it without future headaches? I mean I did purchase it. Same with weapons and other items in the catalog. Sorry if this isn’t the right thread, but I need to know what I can do. P.S. this is still maaad basic, but an upgrade. Throw in the ability to change the colors of images with hue/saturation/lightness and we’re g2g. Less programs is better but again this is a pre test response.

15 Likes

Yes, this post will be updated, and fixing this is a high priority.

18 Likes

In Animation Editor, will we be able to select joints by clicking on them directly, or will it remain the same where you need to click on the joint’s name?

12 Likes

Are there any plans to support scaling bones in addition to movement/rotation?

24 Likes

@The_Aliens, The AvatarEvolution Beta Build increased both rig and mesh limits to 50k, from 10k and 5k respectively. This Studio Beta increases the rig limit to 50k and the individual mesh limit to 10k. If the Studio Beta goes well, I expect those limits to remain.

12 Likes

Does this means that now we can have a kind of “Model Rig” for GFX? Like the rigs used in Blender for smoother joints?

8 Likes

So by rig limit of 50k, does this mean I need to separate the joints on my meshed characters if one single mesh exceeds the 10k limit even if it has an armature attached?

8 Likes

Will this be coming to the normal R15 characters to make for example the upper arm and lower arm connect together smoothly?

10 Likes

I know it’s easier said than done, but something we need to see with mesh deformation is Shape Keys, they play a huge role in facial features and even for equipping armor on these skinned rigs to avoid clipping from the skin and the clothes

Is there any chance we may see Shape Keys along with mesh deformation? I want to make character faces a lot more expressive with them instead of having to use decals or textures.

10 Likes

@The_Aliens, the rig limit means the total tris for a single import. If there is a mesh with more than 10k tries it will need to be broken into separate meshes.

8 Likes