AnimToTexture in Unreal Engine

AnimToTexture plugin was released with Unreal Engine 5 City Sample project and since UE 5.1 it's native part of the Unreal Engine plugins.

The purpose of AnimToTexture plugin

AnimTotexture plugin allows to create animated Static meshes that look and behave like Skeletal meshes. This is important especially in the sense of performance optimization, as unlike of static meshes, calculating and rendering animations for skeletal meshes is extremely performance heavy.

What does AnimTotexture plugin do?

AnimTotexture plugin basically takes a skeletal mesh, an equivalent static mesh, and a list of sequences and generates the textures with the weighting information, as well as the bone rotation and translation, and also prepares the material to be able to reproduce it.

Enabling AnimTotexture plugin

To enable AnimToTexture plugin In Unreal Engine 5.1 and above, go to EditPlugins, and on All Plugins list search for "AnimToTexture". Enable the found plugin and restart Unral Engine. After the relaunch, the AnimToTexture plugin content is located at All/Engine/Plugins/AnimtToTexture.

AnimTotexture plugin content

BP_AnimToTexture Editor Utility Widget shows an example of using AnimationToTexture node for creating Static Mesh with VertexAnimation and BoneAnimation. All it does is that it runs following function sequence on UtilityWidget Event Run.

  • Vertex Animation
  • Bone Animation

As you can see, both methods differs by used DataAsset file and attached Material Instances. Actually, both Material Instances are quite identical, used separatelly in this case only to avoid overwriting as both methods (VertexAnimation and BoneAnimation) are processed at once. ..so long story short, the only difference is in configuration declared in the AnimTotexture DataAsset file.

In conclusion, as clear, if we would run the BP_AnimToTexture Editor Utility Widget attached in the plugin, there would be 2 main outputs - Static mesh with Bone Animation (SM_Mannequin_BoneAnimation) and with Vertex Animation (SM_Mannequin_VertexAnimation). By default, they are already a part of the plugin content. The same way may be used for any other Meshes.

AnimToTexture helpers plugin

AnimToTexture helpers plugin is a Utility Widget build above AnimToTexture plugin. The plugin is available for download at AnimToTextureHelpers Github Page and explained in its Forum introduction and on the video below:

  • Fix of mentioned issue in the video: the “choppy” animations is coming from the texture format R8G8B8A8 instead of FloatRGBA. It can be resolved by ensuring that there's 16bit texture precision selected and the Force Power of Two option checked.
  • In UE 5.2 and above, there's missing Param names node that results in an error.

Anim To Texture DataAsset

Through to the AnimTotexture Data Asset, there's possible to configurate data for AnimTotexture plugin. There's possible to fill whole characters as well as their parts, as of example of loafers below:

Controlling AnimToTexture animations in runtime

Schema

  • AnimToTexture VAT definition

    DataAsset file of AnimToTextureDataAsset type

    The file links to baked static mesh and keeps animation data for it, see the image below

  • MaterialLayer controlling animation

    As ISM is static, all movements are driven through a material, see a sample of ML_BoneAnimation at the image below

    Take into notice following material parameters:
    • FrameOffset - refers to frame on which the animation starts (Anim Start from VAT) -> For running animation with index 2, set FrameOffset = 588
    • NumFrames - refers to length of animation (Num Framesfrom VAT)
  • Switching between animations in runtime

    Setting ISM Vertex animation properties is possible through class UMaterialInstanceDynamic

    UMaterialInstanceDynamic* DynamicMaterial = MeshComponent->CreateAndSetMaterialInstanceDynamic(0);
    if (DynamicMaterial)
    {
        DynamicMaterial->SetScalarParameterValue(FName("FrameOffset"), DesiredFrameOffset);
        DynamicMaterial->SetScalarParameterValue(FName("NumFrames"), DesiredNumFrames);
    
        DynamicMaterial->SetScalarParameterValue(FName("Playrate"), 1.0f);
        DynamicMaterial->SetScalarParameterValue(FName("bLooping"), 1.0f);  // enable bLooping
    	// ...
    }

Notes

  • In Unreal Engine 5.3, AnimToTexture plugin has only Content folder, but it does not contain Source forlder with C++ source code.