Changelog
[2.5.2] - 26.11.2025
Added
- Support for skinned meshes with multiple duplicated bone names. This allows proper animation of skinned meshes created with various mesh-merge tools (particularly the
Synty® Sidekick Character Creatortool).
Changed
- In-place skinning is now enabled by default.
Fixed
- Animation culling was being ignored during blend shape computation.
- Fixed incorrect motion ID computation for looped blend tree cases.
[2.5.1] - 09.11.2025
Added
- The
Crowdscene hasDespawnbutton now.
Fixed
- A 1D blend tree parameter with a value greater than the defined maximum caused incorrect mesh scaling.
- Animation events were emitted incorrectly during rapid controller state changes.
- The
Animation Wayback Machinecould record duplicate events or skip animation events due to differences between the sampling and simulation system rates. - Fixed incorrect hierarchy traversal in dynamic bone chains during baking.
[2.5.0] - 01.11.2025
Added
- Animation Wayback Machine.
- Third person character controller sample.
Changed
AnimatorParameterAspectandAnimatorStateQueryAspectno longer implementIAspectinterface due to its deprecation. Refer to the migration process for further details.
Fixed
- The blend tree computation code no longer outputs zero-weighted animations.
- Corrected motion submission in 1D blend tree for blend values greater than blend tree's maximum.
- Resolved code generation errors when using
RUKHANKA_WITH_NETCODE.
[2.4.0] - 05.10.2025
Added
- Animator controller transition interruption support.
- Animator controller layer sync feature.
[2.3.0] - 07.09.2025
Added
- Dynamic bone chain procedural animation algorithm.
- Procedural animations sample scene.
- Animation events support for GPU-animated entities.
- Animation culling support for orthographic camera type.
Fixed
AnimationStream.SetWorldPositionAPI not working incorrectly.- Incorrect calculation of layer weights when an animation state had an empty motion.
- Animation events emitted incorrectly for animations introduced in the current processing frame.
Amplify Shader Editordeformation node worked incorrectly.- Error in GPU animator Euler-to-quaternion rotation conversion code.
- Memory leak during simultaneous rig-to-skinned mesh remap table creation.
- Incorrect rendering of skinned mesh without defined root bone.
- Properly handle disabled GPU-animated entities.
- Incorrect "Enable Motion Vectors" help URL in project settings.
- "Attempt to draw with missing binding" warning and missed GPU attachments in Edit mode.
- Incorrect handling of negative motion time for non-looped animations.
- Incorrect handling of negative motion time in root motion processing code.
- Incorrect layer weight calculation in user curve processing code.
Changed
- GPU attachments can now be standalone baked objects.
- Compute shaders are now DXC compiler–compatible, fixing shader compilation errors on Xbox.
- Reworked "single deformation compute dispatch" approach: compute shader now uses a constant
numthreadsattribute, improving compatibility with mobile platforms. - Removal dependency on
ENABLE_DOTS_DEFORMATION_MOTION_VECTORSscript compilation symbol.
[2.2.1] - 03.05.2025
Added
- Weight dependent tip node rotation for
TwoBoneIKalgorithm.
Fixed
- Incorrect thumb finger humanoid bone name.
- Missing blend shape data buffer bindings in shader for in-place skinning.
- Incorrect handling of non-uniform scaling in skinning shaders.
- Out-of-bounds graphics buffer access in the skinning shader, which caused rendering errors on some Android platforms with Vulkan.
- Switched skinned mesh bone weights buffer update scheme from the
SetDataAPI toSparseUploader. The former caused incorrect data clear during partial uploads on MacOS and missing meshes as result.
[2.2.0] - 06.04.2025
Added
- Configuration settings dialog.
- New skinning shader subgraphs for
Unity Shader Graph,Amplify Shader Editor, andBetter Shaders. - Dual quaternion skinning support.
- Half-precision deformation data.
- In-place skinning.
- Multi-submesh GPU attachment meshes support.
- New
RootMotionVelocityComponentfor custom root motion handling. New configurable root motion mode inRigDefinitionAuthoring.
Changed
- Deprecation message about default
Entities.Graphicsdeformation shader usage. Its support will be removed in next Rukhanka release.
Fixed
- The rig optimization mask had incorrect bone order.
- Properly ignore missing animation tracks during animation weight calculation.
- Internal new skinned mesh hash map capacity was increased to prevent "Hash map is full" exceptions during big number different meshes instantiation.
- Missed
AvatarMaskbaking code inAnimationAssetSetBaker. - Incorrectly working
AnimationStream.SetWorldRotationAPI. - Update skinned mesh render bounds code worked incorrectly.
[2.1.0] - 26.02.2025
Added
SkinnedMeshRenderEntitycomponent buffer. This buffer holds references to all baked render entities for particular skinned mesh. This buffer helps simplify material overrides and runtime mesh addition/removal manipulation.- Rig bone count optimization mask.
- "Better Shaders" shader building tool node for making deformation-compatible shaders.
- Runtime animator layer speed ability.
- Runtime skinned mesh replacement sample.
Changed
- Improved Blob Inspector dialog UI.
Debug.DrawerHDRP/URP shaders merged into one for both SRPs. This removes shader compilation warnings about incompatible SRP.
Fixed
- Incorrect behavior of GPU animation engine when animated entity is disabled (via
Disabledcomponent). - The deformation system wrong update order which led to one frame missing mesh for renderers with the configured LOD group.
- Incorrect keyframe index check for two-frame tracks in GPU animator.
- Deformed meshes with blend shapes are not properly counted during the internal buffers resize operation of the deformation system. This could lead to the "Hash map is full" runtime exceptions.
- The middle joint drift of the
TwoBoneIKalgorithm if no animation is playing for the rig. - Incorrect absolute entity pose computation of IK targets that are non-root entities.
- Incorrect humanoid bone mapping for toe bones.
[2.0.0] - 25.12.2024
Added
-
Innovative GPU animation engine. Full-featured animation processing routines implemented on GPU using compute shaders.
-
ScriptedAnimator.CrossFadeAPI which mimics Unity'sAnimator.CrossFade. -
The additive reference pose frame was always taken from the current animation. A separate pose frame was needed for advanced blending scenarios. This ability was added to the animation clip blob and baker.
Changed
- The avatar mask representation was changed to bitmask. This lowers memory usage and speeds bone masking during animation processing.
- Animation blob asset structure refactoring. Tracks are stored in a more uniform way now. This leads to a simpler and performant sampling code.
- Perfect hash table reworked. Lookups are much more performant now.
MaterialOverridespropagation from authoring skinned mesh entity to all sub-mesh entities.- Additive and loop pose calculations require first and/or last animation frame sampling. Previously this was done by sampling with keyframe search (generic approach). Now, special direct first and last frame sampling functions were added, speeding up the entire computation loop.
Fixed
- Incorrect blob asset registration that comes from multiple scenes.
- Incorrect additive animation layer weight calculation.
- Properly handle
Disabledanimated entities and skinned mesh entities. - Preventing infinite values in animator controller state times.
- Headless and unsupported configurations improperly disable GPU-related systems.
Entities.Graphicsdeformation system treats deformed mesh index 0 as an invalid index. Valid indices started from 1. Rukhanka's deformation system uses 0 based index, which breaks motion vector functionality for the first deformed entity in the world.- Memory leak during blend shape copying in the deformation system.
- Blend shape incorrect vertex count calculation during GPU upload.