This page looks best with JavaScript enabled

Skeletal Meshes in the Engine: Pt. 1

 ·  ☕ 4 min read  ·  ✍️ Taylor

Overview

The UE5.5 Preview has new tools to enable an artist or rigging to set up a SkeletalMesh entirely within the editor: placing bones, painting skin weights, rigging, and animating. This series is going to be my first stab at taking an asset from start to finish.

I hope this can show other technial animators and TDs what is possible, as well as providing feedback for the team at Epic for future development.

Caveat

This is, as the name suggests, a preview of future engine features! Which means some things won’t work, some APIs won’t be fleshed out, and we’ll likely crash more than a few times. It comes with the territory.


Setup

We’re going to be setting up this incredible model from Laura Peltomäki, available here.

SM to SKM

In Progress

Bones

In Progress

Skinning

In Progress

Rigging

In Progress


Cool Stuff

  • Going seamlessly between laying bones, painting weights, moving bones, painting weights again – this is a huge iteration helper. You can technically do this in Maya but it’s annoying as hell every time.
  • Skinning is, IMO, the best native solution out there. You can paint weights with all the tools of Maya, and also set absolute weights just like 3DS Max. This is something I’ve wanted from Maya for a decade.
    • The only thing I really miss is ngSkinTools-style layers, opacity, blending, etc.
    • This mesh also contained no sub-meshes or shell meshes that required projection mapping.
  • Setting up a bipedal or quadripedal rig is very simple. Minutes to go from a skinned mesh to animating in Sequencer.
  • Complex behavior will take custom modules, but getting the basics out onto paper quickly is great.

Known issues

Bones

  • It’s currently not possible to modify a Skeleton with a USkeletonModifier while the SkeletalMeshEditor window is open. This leads to a crash.

    • I believe this is simply due to conflicting resources. SReferenceSkeletonTree is already bound to the RefSkel via its own USkeletonModifier.
  • If you create joints in the Editor Mode, Apply those changes, then later delete those joints, it removes them from the SkeletalMesh but not the underlying Skeleton

    • This makes sense, as SKMs are a layer on top of SKELs, but it still leads to an annoying iteration loop where, if you want a clean skeleton, you need to Create a new skeleton from the SKM, and then delete the original, dirty SKEL.
  • Mirroring bones currently has a drawback – if the side delineater is a prefix, it will not work properly. USkeletonModifier is hard-coded to only work on suffixes. (SkeletonModifier.cpp:1055)

    • This also means that if an enumerator ends the joint name (ie. JointName_L_01) it just won’t work.
    • I would love if this was simply a wildcard lookup.
  • When you add a new bone, the entire hierarchy un-collapses in the outliner. This is pretty annoying when the hierarchy is large/deep enough.

Skinning

  • Mirror skin weights requires you be in Mesh mode with weights selected. I would love if this could be done from Brush mode, using the selected joint’s influenced weights.
  • I had an ensure within MeshModelingToolsEditorOnlyExp\Private\SkeletalMesh\SkinWeightsPaintTool.cpp:161 and when I got back into Unreal all my skinweights were gone and the asset was saved. I was messing around with Weight Layers at the time, but I’m not sure exactly what I did. I had to start skinning all over again.
  • Painting weights in an orthographic view is a bit buggy – the paint brush doesn’t move smoothly over the surface but instead hitches.
  • I find myself missing a lasso marquee in Mesh mode. It would make grabbing a bunch of verts at weird angles much easier.

Modular Rigging

  • Setting up more complex behavior in the Modular Rigging workflow can be difficult without custom modules.
    • Twist constraint for limbs also isn’t available out-of-the-box. The Constraint module allows for rotational control, but only all-or-nothing.
  • There’s a display issue with my laptop’s resolution. Maybe this is just me? However, it makes most modules simply unusable for me, which is unfortunate. I will need to try on my workstation.
  • Creating a custom RigModule from scratch – how do? I have had to duplicate the native ones in order to create new ones.
Share on