Skip to main content

Graft Bones

Splice another take's movement onto part of the skeleton - a baked Layered Blend Per Bone. The body keeps playing take A while the head, an arm, or the face plays take B. Output suffix: *_Grafted.

Use cases straight from the mocap trenches:

  • The run cycle is perfect but the head look is wrong - graft the head branch from a different take.
  • Same body performance, different attack - graft clavicle_r down from each attack take to build variants.
  • The shot is good but the facial expression isn't - graft the facial bone branch from a better take.

How it works​

  • Local bone space: the grafted branch rides on whatever the target's body is doing - exactly like the Layered Blend Per Bone node, but baked into a real asset that drops into montages and blendspaces.
  • Two frame windows: take source frames [from, to] and land them on target frames [from, to]. Different lengths (or frame rates) are fine - the source window is retimed to fit, with fractional-frame interpolation.
  • Seam blending: the graft fades in/out over Blend Frames at the target window's edges, so there's no pop where takes meet.

Graft Bones options - mode, skeleton filter, frame windows, branches

Options​

OptionMeaning
Same Skeleton OnlyFilters the picker to takes on the target's exact skeleton (default on) - retargeted libraries are full of same-named takes on other rigs. Uncheck to browse everything
Source AnimationThe take to graft from
Source Start / End FrameSource window (inclusive) - sliders capped to the source's length, auto-filled to the whole source when you pick one
Whole Clip Per TakeGraft across each target take's own full length - on by default when more than one take is selected (see below)
Target Start / End FrameWhere the graft lands (prefilled to the whole clip). Greyed out while Whole Clip Per Take is on
ModeReplace swaps the branches' motion for the source's; Add on top layers the source's sway/motion onto the target (see below)
BonesBranches to graft - each entry replaces the bone and everything beneath it
Blend FramesFade width at the window edges (default 5)
Create New AssetNew *_Grafted copy (default) or in-place rewrite

Root motion is never touched unless you explicitly include root in the bone list. Float curves, notifies, and sync markers stay the target's own.

Grafting a batch​

Select several takes and one graft lands on all of them. The frame fields describe the first take only, so a single window cannot serve a batch of takes with different lengths: a 30-frame window covers all of a 30-frame take and less than a third of a 100-frame one, which keeps its own motion for the rest.

Whole Clip Per Take resolves the window per take instead - each one is grafted from its first frame to its last. It is on by default for a multi-take selection and off for a single take; untick it to apply the explicit window to every take on purpose.

Cross-skeleton grafting​

The source doesn't have to live on the same skeleton asset - bones are matched by name. Uncheck Same Skeleton Only and any take whose branch bones share the target's names grafts fine (the usual case: the same rig imported twice, or takes retargeted onto a naming-compatible skeleton). Translations are scaled by the rigs' size ratio (measured from pelvis rest heights), so a bigger rig's offsets don't deform a smaller one - the result note reports the ratio. Add on top mode is the most robust cross-skeleton, since it transfers deviations rather than absolute pose.

Genuinely different rigs (other hierarchy or bone names - Mixamo vs MetaHuman) are a job for UE's IK Retargeter first; graft the retargeted result.

Bone tracks only

Grafting copies bone animation. MetaHuman faces are bone-driven (FACIAL_*), so the facial use case works; rigs whose faces run purely on float curves (ARKit-style) would need their curves copied separately.

Add on top (additive layering)​

In Add on top mode the source's motion doesn't replace the target's - the source's deviation from its own window-average pose is layered onto whatever the target is doing. The source's base pose stays out of it; only its movement transfers. Output suffix becomes *_Layered.

The two graft modes

  • Layer a breathing/sway idle onto a stiff aim pose
  • Add a flinch or shiver on top of any clip
  • Put subtle head bob from one take onto another's performance
Compose with Isolate and Smooth

Isolate Bones turns takes into clean single-purpose overlay sources; Graft splices them together; Smooth Bones with a frame window cleans any residual seam.

Scripting:

ok, err = unreal.TakeForgeLibrary.graft_bones(
target_seq, source_seq, ["neck_01"],
source_start_frame=30, source_end_frame=90,
target_start_frame=45, target_end_frame=105,
blend_frames=5.0, add_on_top=False)