Blender导出关键帧至Unreal Engine旋转不匹配问题求助
Blender旋转数据导出到UE5不匹配的解决方案
核心差异说明
Blender用右手坐标系,Z轴向上,向前方向是-Y;UE5是左手坐标系,Z轴向上,向前是X轴,这是旋转效果不符的根本原因,单纯翻转轴没用,得对应调整旋转数据的映射和顺序。
具体解决方法
1. 欧拉角的正确转换
- 不能只简单翻转坐标系,要调整轴映射+旋转顺序:
- Blender的欧拉角(X,Y,Z)对应UE5的(-X, Y, -Z),同时Blender默认旋转顺序是ZYX,UE5默认是XYZ,导出和加载时要统一旋转顺序
- Blender导出时的处理代码示例:
import math import mathutils # 获取物体世界空间欧拉角 euler = obj.rotation_euler # 转换为UE5兼容的角度值(转弧度,同时翻转X、Z轴) ue_x = math.radians(-math.degrees(euler.x)) ue_y = math.radians(math.degrees(euler.y)) ue_z = math.radians(-math.degrees(euler.z)) # 导出时记录旋转顺序为XYZ - UE加载时,用
Make Rotator节点输入转换后的X/Y/Z值,确保旋转顺序设为XYZ。
2. 四元数转换方案
- 四元数直接导出会因为左右手坐标系差异反向,转换规则如下:
- Blender四元数(w,x,y,z)转UE5四元数:
(w, -x, y, -z) - Blender导出代码示例:
quat = obj.rotation_quaternion ue_quat = (quat.w, -quat.x, quat.y, -quat.z) - UE中用
Make Quat节点创建四元数,再转成Rotator应用到物体上。
- Blender四元数(w,x,y,z)转UE5四元数:
3. 世界矩阵完整转换
- 用世界矩阵的话,要先做坐标系转换:
import mathutils # 构建Blender转UE的坐标系转换矩阵(翻转X、Z轴) convert_mat = mathutils.Matrix([ [-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1] ]) # 转换世界矩阵 ue_world_mat = convert_mat @ obj.matrix_world # 提取旋转四元数 ue_rot_quat = ue_world_mat.to_quaternion()- UE中可直接从转换后的矩阵提取旋转,或者将矩阵应用到物体Transform。
导出前必做检查
- Blender里应用所有变换后,确认模型原点在中心,避免旋转偏移
- 导出世界空间的旋转数据,别用局部空间,否则UE要额外处理父物体变换
- UE导入模型时,在导入设置里把
Transform > Rotation设为0,0,0,避免自动添加旋转偏移
内容的提问来源于stack exchange,提问作者Subham
相关产品推荐
相关产品推荐

