Changelog
[2.9.0] - 09.04.2026
Added
- Skinned mesh bounds debug visualization system.
Changed
- Fully rewrote the animation layer application loop for both CPU and GPU animation engines. The goal was to achieve strong conformity with
Unity Mecanimbehavior across different layer types (Override, Additive), particularly in how avatar masks are applied.
Fixed
- Unity 6.6 alpha compatibility related to
SparseUploaderusage. - Incorrect avatar mask application to the root bone when root motion is enabled.
- Incorrect computation of skinned mesh renderer local bounds during baking when the renderer has a non-identity local pose.
[2.8.0] - 08.02.2026
Added
- VFX skinned mesh sampling sample scene.
Fixed
- Null reference exception in
ComputeBufferToolsTest. - Compile errors caused by
EntityGuidtype changes introduced in Unity 6000.5 alpha. - Compile errors in
Character Controllersample caused byIAspectremoval in Unity 6000.5 alpha. - Potential out-of-bounds array access when using nested rigs (an animated rig as a child of another rig).
- Incorrect GPU attachment transform when rig root is not a hierarchy root.
- GPU attachment misbehavior when switching animator types from CPU → GPU → CPU.
[2.7.2] - 09.01.2026
Fixed
- Improper disabling of CPU animation code when GPU-animated entities were used exclusively.
RigDefinitionComponentlookup was not properly passed intoUpdateSkinnedMeshBoundsJob.
[2.7.1] - 04.01.2026
Fixed
- LOD components were added incorrectly during prefab baking.
- Non-uniform scale was handled incorrectly for meshes that act as GPU attachments.
[2.7.0] - 01.01.2026
Added
- Skinned mesh renderers can be split into multiple independent skinned meshes, one per source material. Use the
SkinnedMeshSplitOnSubmeshEntitiesAuthoringcomponent on the authoring skinned mesh renderer to enable this functionality.
Changed
- The
ComputeFrameSkinnedMeshWorkloadSizesJobjob was made multithreaded, leading to better thread utilization and improved performance. - Internal structures were simplified by replacing some hash maps with entity components. This simplifies the code and provides small performance improvements.
- Animator override animation final blobs were previously created each frame. They are now cached.
- The
GetInstanceIdfunction has been replaced withGetEntityIdforUnity 6000.4+due to former's deprecation. - The minimum supported versions of the Entities and Entities.Graphics packages are now v1.4.3 and v1.4.16, respectively.
Fixed
- A null reference exception during incorrect
HumanBodyPartOverrideAuthoringhandling in the authoring code. - Obsolete code that was accidentally left in when the
RUKHANKA_ENABLE_DEFORMATION_MOTION_VECTORSscript symbol was defined. - An incorrectly declared
SkinMatrixGPU buffer type. This fixes potential skinned mesh corruption (particularly on integrated AMD GPUs with older drivers).
[2.6.0] - 08.12.2025
Added
- Human bone type can be overridden by using
HumanBodyPartOverrideAuthoringon authoring skeleton boneGameObjects. RootMotionVelocityComponentnow includes frame delta position and delta rotation fields.
Changed
- The minimum supported versions of the
EntitiesandEntities.Graphicspackages are now v1.2.4. - Support for the
Entities.Graphicsdeformation system has been dropped. TheRUKHANKA_NO_DEFORMATION_SYSTEMscript symbol no longer exists. - Skinned mesh baking has been reworked. No additional render entities are created for each authoring skinned mesh. This change closely resembles
Entities.Graphicsmesh render baking with theENABLE_MESH_RENDERER_SUBMESH_DATA_SHARINGscript symbol defined. The new approach greatly simplifies skinned mesh entity handling and its material-override manipulation code. AnimatedSkinnedMeshComponenthas been renamed toSkinnedMeshRendererComponentto better reflect its purpose.
Fixed
- Incorrect handling of transition interruptions in the
ScriptedAnimator.CrossFadefunction. GenericDropdownMenu.DropdownAPI deprecation warning in Unity 6000.3+.- Incorrect scale application in GPU bone-attachment handling code.
[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.
[1.9.2] - 04.11.2024
Fixed
- Improperly handled
Disabledentities. - Improper handling of controller zero length states.
[1.9.1] - 09.10.2024
Added
- Documentation for
ScriptedAnimator.PlayAnimatorStatefunction. GetStateIndexInControllerLayerfunction that can be used to find the state ID forScriptedAnimator.PlayAnimatorStateAPI.
Changed
- Making
CopyBufferandClearBuffercompute kernels with smaller thread group size (128) to be able to work on low level-mobile GPUs. Large data sizes are handled via multiple dispatches. - The
Skinningcompute kernel now has variations with different workgroup sizes. The correct one is selected depending on hardware capabilities in runtime.
Fixed
- Skinned mesh to rig remap table cache can run out of capacity.
- Incorrect additive layers weight calculation.
- Incorrect blend shape deformation when both skinning and blend shapes are used together.
- Inverse kinematic targets positions were calculated from entity
LocalTransformcomponents. This leads to one frame position lag for targets that are children of animated bones. Now the actual position is taken from the animation stream in this case. - Indexing animation layers were wrong, if some layers had zero weights.
[1.9.0] - 03.09.2024
Added
- Rukhanka Deformation (skinning) System.
ScriptedAnimatoranimator state playback API.
Changed
- Several fixes and improvements were made to the
TwoBoneIKalgorithm. - Skinned mesh blob inspector window with additional data.
Fixed
- Blob assets loaded from the cache were incorrectly registered in the blob database, leading to duplication of blob assets and memory leaks.
- Incorrect Euler to quaternion conversion rotation order.
- Mistakenly removed manual bone stripping mask processing.
EntityCommandBufferobsoleteEntityQueryCaptureMode.AtRecordusage.
[1.8.1] - 31.07.2024
Added
ResetTriggerAPI forAnimatorParametersAspect.
Fixed
- Corrupted animation blob data after scene reload.
- Unknown symbol
FixedStringNamein AnimatorStateQuery documentation page - Baked animation events have an uninitialized
nameHashmember variable.
[1.8.0] - 24.06.2024
Added
- Blend shape support.
- Blend shape sample scene.
ScriptedAnimatorblend tree (1D, and all types of 2D) API.
Fixed
- The
AmplifyShaderEditordeformation node is now disabled correctly during authoringGameObjectrendering. - Blob cache invalid file characters handling.
- Animation baker persistent memory leaks.
[1.7.1] - 07.06.2024
Fixed
- Fixed compilation errors during standalone builds creation.
[1.7.0] - 06.06.2024
Fixed
- Individual trigger reset for each animator controller layer.
Added
- Ability to work without baked
Animator. - Baking code rewritten from scratch. With a cleaner and more straightforward approach baking code becomes faster and uses less memory.
- Blob Inspector dialog to review baked blob assets.
- Blob Cache. Opened subscenes baking times are significantly improved.
Animator Override Controlleranimations now can be switched in runtime.Avatar Maskcan be toggled in runtime.Scripted Animatorsample scene.
Changed
Avatar Masksample scene with runtime mask toggling control.Animator Override Controllersample scene with runtime animation toggling control.