Skip to content
← Back to Blog tutorials

Fix Blender armature scale before it breaks bones on import

By BitSoul3D6 min read122 views

Your Blender rig deforms, shrinks, or pulls away from its mesh the moment it lands in Unity, Godot, or Unreal Engine 5, even though everything looked correct in Blender's viewport. The cause is almost always one of three things: unapplied object-level scale on the armature, inconsistent bone roll axes, or non-uniform scale baked onto individual bones. Blender's viewport quietly compensates for all three. The glTF/GLB exporter does not; it writes the raw transform values, and every engine reads them literally. Fix the transform before you export and the rig imports clean, every time.

Fix Blender armature scale before it breaks bones on import

Why Blender's armature scale breaks

Why Blender's armature scale breaks — illustrated

Blender lets you move, rotate, and scale an object without touching its underlying mesh or bone data. The numbers live in the object's transform channels, and the viewport draws the compensated result. glTF doesn't work that way. The glTF-Blender-IO exporter, the kind of scaling bug tracked as issue 828 on the KhronosGroup GitHub, bakes whatever sits in those transform channels straight into the node hierarchy, because glTF nodes store scale as a literal per-node value, not a Blender-style display adjustment.

So if your armature object still shows a scale of 0.01 in the N-panel, common after importing CAD or photogrammetry reference at real-world centimeter scale and then modeling your character over it, that 0.01 travels into the GLB file on the armature node. Unity, Godot, and Unreal Engine 5 all apply it literally on import. The mesh, which usually does have its scale applied already, stays the size you expect. The skeleton doesn't. You end up with a normal-sized character and a skeleton that's either invisible, scaled down to a fraction of a millimeter, or enormous.

Fix the transform before exporting

Fix the transform before exporting — illustrated

In Object Mode, select the armature and every mesh parented to it, then run Object > Apply > All Transforms (Ctrl+A then All Transforms). This zeroes out location, rotation, and scale on the objects while keeping their visual position identical. The values that were compensating in the viewport get baked into the mesh and bone data instead, which is exactly where glTF expects them to live.

Two things trip people up here. Rigify control rigs need this applied to the generated rig, the object literally named rig, not the metarig, and it needs to happen before you pose or animate it. Applying transforms after animating can shift keyframes on bone chains that use inherited scale. If you've already animated, apply the transform, then re-check the first few frames of every animation before you re-export.

The other trap: Blender refuses to apply scale on a mesh that has shape keys, and throws an error instead of applying. Duplicate the mesh without shape keys, apply scale on the duplicate, then copy the resulting transform values onto the original, or bake the shape keys into a single mesh first if you don't need them as separate targets after export.

Bone roll and rest pose, the other two culprits

Scale isn't the only transform that Blender compensates for in the viewport and breaks on export.

Bone roll. Enter Edit Mode on the armature, select every bone (A), then run Armature > Roll > Recalculate Roll and pick a consistent axis, Global +Z Axis covers most humanoid rigs built standing upright. Inconsistent roll between bones is invisible in Blender's viewport, but it shows up immediately as twisted or sheared deformation once an engine's animation system evaluates the same bone against its own local axis convention.

Rest pose. If you posed the rig to check a silhouette or grab a screenshot and forgot to return it to rest, run Pose Mode > Pose > Apply > Apply Pose as Rest Pose before export. Otherwise the exported bind pose is whatever pose the rig happened to be sitting in, and every animation you play back in-engine deforms starting from the wrong pose.

Non-uniform scale on individual bones, a stylized limb scaled up on one axis only, is a separate problem with no clean one-click fix. glTF's node transforms can represent it, but combined with rotation on a parent bone it can shear the mesh in ways that read correctly in Blender's pose-space evaluation and wrong in an engine's. Where possible, build that shape into the mesh instead, with sculpting, a shrinkwrap modifier, or shape keys, rather than pushing it through bone scale.

What each engine shows you when it's still wrong

The specific failure tells you which of the three problems you're looking at.

EngineWhat you'll seeUsual cause
UnityModel imports at the wrong overall size, or the Scale Factor field in the model inspector shows an odd decimal like 0.01Unapplied object-level scale on the armature
GodotSkeleton3D imports fine, but the mesh detaches, twists, or wobbles away from the bones once it animatesInconsistent bone roll axis, or non-uniform bone scale
Unreal Engine 5Skeletal mesh looks right, but the separate Skeleton asset's bone gizmos are microscopic or huge next to the meshSame root-scale mismatch, more visible here because UE5 imports mesh and skeleton as separate assets

To batch this across a folder of old rigs instead of fixing them one at a time in the UI, Blender's Python console handles it in a few lines:

import bpy
for obj in bpy.context.selected_objects:
    bpy.context.view_layer.objects.active = obj
    bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)

Select every armature and mesh you want fixed first, then run it. It applies transforms across the whole selection in one pass instead of clicking through each rig individually.

Check it against a rig you didn't build

The fastest way to confirm the export settings are the problem and not your specific rig is to export something you know is already clean and compare. A catalog character like Wasteland Mercenary ships with transforms already applied, so if it imports correctly and your own rig doesn't, the problem is confirmed to be sitting in your file rather than your Unity, Godot, or UE5 import settings. BitSoul's Blender, Unity, Godot, and UE5 plugins pull catalog models in with this already handled, so this specific bug only shows up on rigs you've built or modified yourself. A free account's two monthly downloads cover evaluation; commercial use is included with paid memberships (pricing).

For export settings beyond the armature itself, Draco compression, material export, and UV handling, Blender 5's glTF export settings for game-ready GLB covers the rest of the export dialog. If the problem is specifically animation playback rather than the bind pose, why root motion rotates on the wrong axis in Godot 4.5 is the more targeted fix. And if Unity is where the broken scale is showing up, Unity 6's GLB import bugs with pink materials, scale, and normals covers the import-side settings that compound the same problem.

None of this means Blender is broken. Two systems, Blender's compensated viewport transforms and glTF's literal node transforms, disagree about what the stored numbers mean. Apply transforms before export, keep bone roll consistent, and the disagreement goes away.


This post is part of the Ultimate Guide to Free 3D Game Assets — BitSoul's complete reference for formats, texturing, rigging, optimization, and engine integration.


Build with real assets: grab the 98-model Character Pack on the BitSoul marketplace and drop them straight into your project.

Tags: characters

Skip the modeling — download it instead

A free BitSoul3D account gets you 2 GLB downloads every month for personal use plus 25 one-time AI Engine credits, no card required. PBR-textured GLB downloads with a full 3D preview before you buy, for Unreal, Unity, Godot or Blender — OBJ and 3D-printable STL come with any purchase or paid plan.

Browse 1,051 models — from $4.99 → or start free (2 downloads a month)