Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Godot 4.7 animation profile

Use this page for godot / revision 1 / 4.7 / resource-importer-scene. The frozen profile accepts glTF JSON, GLB, and FBX. That is AnimSmith's evidence boundary, not a complete list of formats Godot can import.

What Godot expects

Godot's scene importer turns a source scene into Godot nodes and resources. Its advanced settings can slice animation timelines, optimize tracks, save animations externally, and configure subresources. Retargeting 3D skeletons depends on a BoneMap, compatible hierarchy, and aligned rest poses; matching bone names alone is not enough.

Godot documents a right-handed, Y-up, metre-oriented 3D convention. Its nodes/root_scale defaults to 1.0; nodes/apply_root_scale decides whether that value is applied into descendants, meshes, animations, and bones or left on the root node. AnimSmith revision 1 does not model either setting or predict the resulting imported hierarchy.

AnimSmith checks and thresholds

All ordinary checks remain engine-neutral. The most relevant are:

Check idExact default boundaryGodot-facing use
rest-world-scaleselected node factor 1.0 ± 0.0001 inclusiveFinds inherited scale before choosing root_scale/apply_root_scale.
scale-keyscomponent range greater than 1e-4Finds scale animation that can complicate retargeting.
non-uniform-scalerelative spread greater than 1e-4Flags a hierarchy/physics/attachment risk.
constant-nonunit-scaleunit deviation greater than 1e-4; off by defaultEnforce a project policy against retained scale channels.
bind-posemean first-frame/rest deviation greater than 45°Surfaces a likely rest-pose mismatch before BoneMap retargeting.
frozen-bonerequired bone rotation never exceeds 1°Finds wrongly mapped or static required roles.
loop-closure0.01 m and 1.0°Checks a declared source loop before Godot slicing/optimization.

engine-addressability is Bevy-only. Godot has no engine-specific prediction check in V1.

The measured parent/rest-world/bind domains come from #267, while #268 owns the selected-node finding. The #155 advice contract refuses rather than inventing Godot settings. Static placement baking #224 and the skinned rest/bind design #269 solve different transform problems.

Configure the profile

[engine]
profile = "godot"
profile_revision = 1
engine_version = "4.7"
importer = "resource-importer-scene"

[runtime_nodes]
selectors = ["weapon_socket", "ik_*_target"]

[checks.rest-world-scale]
expected_uniform_scale = 1.0
uniform_scale_tolerance = 0.0001

Godot revision 1 has no setting descriptors. Any engine setting is rejected, and generate import-advice emits profile_settings_unmodeled. Configure timeline slices, root scale, animation optimization, external animation files, BoneMap, and root-motion behavior in Godot or the source DCC.

Revision 2 import advice

The exact revision-2 advice tuple is godot / 2 / 4.7 / resource-importer-scene. It accepts only glTF JSON and GLB for this document-level projection. The closed document setting vocabulary is:

[engine]
profile = "godot"
profile_revision = 2
engine_version = "4.7"
importer = "resource-importer-scene"

[engine.settings]
animation_fps = 30       # positive integer; 1..120
animation_trimming = false

animation_fps defaults to the verified profile value 30 when omitted and animation_trimming defaults to false; explicit values retain their explicit_config origin in the advice. The JSON prediction projects exactly animation/fps and animation/trimming under the godot_params projection kind in urn:animsmith:schema:engine-import-advice:2. It does not emit root scale, optimization, external-animation, BoneMap, timeline-slice, or runtime playback conclusions. Values are proposed importer parameters derived from same-load evidence, not a Godot import execution or certification.

Common failures and fixes

SymptomEvidence to inspectCorrect owner
Imported character has the wrong sizesource units, rest-world-scale, Godot root_scale and apply_root_scaleFix DCC units or set the importer deliberately; avoid stacked compensation.
Socket, IK target, or collision anchor is offsetselected-node ancestry and affine classRepair the hierarchy or canonicalize a supported rest/bind scale; verify after import.
Retarget pose twists or limbs driftrequired-bones, bind-pose, first-frame and hierarchy evidenceAlign rest pose/BoneMap in Godot or DCC.
One long source timeline is not usable as clipssource take inventory and intended cutsDefine slices in Advanced Import Settings or author separate clips in the DCC.
Loop pops after optimizationloop closure and velocity checksRepair the cut/source curves, then verify the imported optimized animation.

Scale and unit workflow

Godot's 3D introduction states that 3D uses metres and recommends authoring at the correct scale because post-import scaling can create precision problems. Keep three decisions separate:

  • Whole-file unit correction changes every represented length and is supported by scale whole-document only for self-contained glTF/GLB.
  • Skinned rest/bind reparameterization preserves world geometry while removing one declared compensating hierarchy scale; glTF/GLB and the narrow FBX-to-GLB path are supported.
  • nodes/root_scale is a Godot importer choice. AnimSmith does not emit it.

An inherited bone scale multiplies descendant sockets, attachments, IK and collision anchors, animation translations, and root-motion distance no matter which layer introduced the compensation.

Static transform baking fixes only supported unskinned placement. It cannot repair a Skeleton3D/BoneMap contract. After any source rewrite, retest attachments, IK, collision shapes, retarget pose, root motion, animation slices, and runtime playback in Godot. See Scaling safely.