AnimBank & InstancedSkinnedMeshComponent

Hello, I’d like to ask how we can better extend InstancedSkinnedMeshComponent, as well as what future plans there are for it.

1. How can the game thread provide a custom animation playback time?

2. How can animation blending be implemented?

3. I noticed that animation data is currently copied. When will it support accessing data via AnimBank and animation index? This would allow me to convert the AnimBank into a custom data table, such as a ChooserTable.

4.I have implemented some custom features, such as dynamically updating the InstancedTransform. However, I noticed that there are some blurry noise artifacts on the SkeletalMesh displayed on the screen, which looks like a character moving in one direction with a blur effect.

Hi, the instanced skinned mesh system is very much under early development and isn’t suitable for use at this moment. It’s effectively in a pre-experimental state. The idea is to eventually use it as the basis of a GPU-based instanced animation system that could be used for crowds, etc. It will leverage anim banks to provide the animation data, but I’m not sure whether something like Choosers will ever be supported with it. There’s no current timeline for when it’ll be in a more usable state, although it’s possible we’ll have more specifics around the 5.8 release.

Can you give me more context on what you’re trying to achieve using it?

Hi, just a quick follow up that the member of the dev team that owns the instanced skeletal mesh feature is out of office at the moment. Once he’s back, I’ll let him know about this thread and follow up.

Hello,

I am the primary engineer working on the ISKM system and am working on fleshing out the instanced skinned mesh implementation for 5.8. The exact set of planned features isn’t fully set in stone. Issue #1 is already addressed in UE5/Main with a new API to allocate unique animation tracks.

We have no current plans to implement animation blending for 5.8, but that may change in the future. The current goal is to match VAT feature parity.

For 3, I don’t actually understand the request. Chooser tables are not planned to be part of the AnimBank workflow. The idea is to use the new animation track API on an AnimBankDataInstance asset to allocate / deallocate tracks and assign either manual or autoplay animations to them, and then map those indices to the ISKM instance AnimationIndex. The new API supports either blueprints or code.

For 4, I have fixed the motion blur artifacts in UE5/Main. I added instance SetInstance{Previous}Transform methods which mirror ISM, and there was a bAlwaysHasVelocity flag on the primitive that was being reset when instance updates occurred.

  1. Just as you mentioned, I’m currently using it as a replacement for traditional VAT-based crowd animation, because it allows us to reduce many static texture maps and also gives us more runtime flexibility. For example, we can adapt one animation to different Skeletal Meshes.
  2. Since all my animations are stored in a ChooserTable, and the ChooserTable also caches the Index, I only need to cache the AnimBankDesc data in the ChooserTableColumn. This avoids having to reconfigure AnimBankData. I hope your team can take this into consideration.
  3. At the moment, I’ve already implemented part of the ISM extensions, and I’d like to discuss this with you. I can share some test results — the potential here is truly significant. I really hope your team takes this seriously.

Hello, is there any progress?

Thanks for your reply. I’m currently testing these features, but I still have some questions.

  1. VAT can achieve animation blending through material blending. The current ISKM functionality is really powerful—have you assessed the cost and expected timeline for implementing blending?
  2. I’ve noticed that pushing an AnimBank with hundreds of animations at once causes CPU stutters. How can I dynamically push only the required animation data to the GPU based on business needs? (I’ve implemented a dynamic AnimBank to add and remove BankItems on the fly, but this also leads to CPU stutters when MarkRenderDirty is called again.)
  3. Since the current AnimBank only samples data for identical SkinnedMeshes, is it feasible to use the same AnimBank data across different SkinnedMeshes?
  1. Animation blending will very likely not be considered for 5.8, though it will likely become prioritized eventually.
  2. The GPU path in 5.7 is very inefficient and uploads the full set of sequence data every frame. Again, it’s still very early in development and isn’t meant to be used yet in production. 5.8 will solve the performance stuttering issue and introduce more control into playing of anim bank tracks.
  3. Basic retargeting support is being looked into for 5.8, yes.