规定:以下将“位置角度大小”统一称为“坐标变换”。
系统版本:Windows 10 专业版 20H2
Blender 版本:2.91.0
Unity 版本:2019.4.2.f1 Personal
为 (0, 0, 0), (0, 0, 0), (1, 1, 1)。
Blender 中的模型
在新建场景自带的正方体(边长为 2m)的基础上,再添加一个经纬球,半径为 0.2m,将其坐标设为 (1, 1, 1),按 Ctrl + J 将二者合并为一个物体。由此我们得到一个不对称的物体,以便更明显地观察效果。此时正方体和球体的在 Blender 中的坐标变换均为“期望的”。
导出模型
文件 -> 导出 -> FBX,选择“网格”来过滤掉灯光和摄像机等。然后不做任何修改,命名为“test.fbx”,直接点“导出FBX”。
导入 Unity
将模型 FBX 文件放入 Assets\ 后加入场景。发现“test”的坐标变换是:(0, 0, 0), (-90, 0, 0), (100, 100, 100)。通过观察模型进一步发现,但实际角度显示错误,模型缩略图显示错误;其整体位置正确,尺寸正确。
对照其在 Blender 中的坐标变换,不难发现,模型直接导入 Unity,其位置不变,角度的 X 分量被旋转 -90,缩放被整体乘以 100。
实际上,模型之所以直接导入 Unity 后坐标变换发生变化,是因为 Blender 坐标系与 Unity 坐标系不同,而 Blender 欲使模型在直接进入 Unity 后与其在 Blender 内看似相同,在其坐标变换上作出了改变。
经测试,Blender 坐标系与 Unity 坐标系有如下对应关系(其中 +/- 代表正/负方向):
软件 | 轴 | 轴 | 轴 |
---|---|---|---|
Unity | X+ | Y+ | Z+ |
Blender | X- | Z+ | Y- |
故在 Blender 中建模时,应将 X- Y- 作为正方向,即新建文件后用鼠标中键将场景中自带的 Camera 旋转到左上角俯视的姿态(如下图),将此时的方向当做对准了的方向开始建模,才便于后续导入 Unity。我们姑且将这步称作“对准坐标系”。
此时模型中的小球位于左侧靠内,与刚刚在 Unity 中所见一致,由此证明,坐标系已经对准。在对准的坐标系中建模,才能保证模型的方向正确。对于之前未对准坐标系就建立的模型,可以考虑将其适当旋转以修复。
接下来纠正坐标变换,有下列解决方法,任选一种即可。但任何一种方法,都必须先进行“对准坐标系”。
在 Blender 中,假设存在一物体,其当前的坐标变换为:(0, 0, 0), (0, 0, 0), (1, 1, 1)。在物体模式下,按 N 键可见。现在要导出该物体。
保证物体导出前最终的坐标变换为:(0, 0, 0), (90, 0, 0), (0.01, 0.01, 0.01),如下图所示。
模型已经旋转并缩小。为了保证模型实际大小不变而仅纠正其坐标变换,还需要在编辑模式下反向调整,即模型整体缩小正转,但其顶点放大反转,以“抵消”在物体模式下的调整。
这就是在建模时或导出前进行调整的原理。实际上,最好是在建模过程中,就先将模型在物体模式下纠正好,再在编辑模式下建模,即可得到坐标变换正确的模型。最终导出 FBX 时,除了选择“网格”外,不做任何设置。
实际操作时可能遇到的问题
当物体的几何中心与 Blender 世界原点重合时,或物体的几何中心的位置并不重要时,“抵消”过程非常简单。结合本例来看,直接在编辑模式下放大物体 100 倍(快捷键:S 100 Enter),再使物体角度的 X 分量为 -90(快捷键: R X -90 Enter)。你的物体的坐标变换可能有所不同,进行相应的抵消操作即可。
当物体的几何中心与 Blender 世界原点不重合时,若直接按上述方法调整,则在编辑模式中,物体会绕着所选对象的质心旋转或缩放,而非绕物体模式中的几何中心旋转或缩放,这将导致物体偏心。结合下面例子操作解决该问题。
在 Blender 中,假设存在一物体 Cube,其当前的坐标变换为:(0, 0, 0), (0, 0, 180), (1, 1, 1)。物体具体形态如下图所示,现在要导出该物体。
在物体模式下,先将物体复制一份(Shift + D,LMB)Cube.001,将原物体 Cube 隐藏供对照。
再将 Cube.001 的坐标变换设为最终的 (0, 0, 0), (90, 0, 0), (0.01, 0.01, 0.01),此时物体已经发生 X 和 Z 向的旋转,并缩小到几乎不可见。
将 Cube.001 复制一份并缩放为 -1 倍(连续快捷键:Shift + D,LMB,S,-1,Enter),以构造一个与 Cube.001 关于物体模式世界原点对称的物体。
将两物体一起选中(若物体太小可在大纲视图中选中),一起进入编辑模式(Tab),全选(A),如下图所示。
现在开始进行“抵消”。结合本例,X 旋转 -90(R X -90 Enter),Z 旋转 -180(R Z -180 Enter),放大 100 倍(S 100 Enter)。
返回物体模式(Tab),删除 Cube.002,则 Cube.001 为最终模型,可供导出。为了验证,将 Cube 取消隐藏,发现 Cube.001 与 Cube 完全重合,如下图,可见操作成功。
正常建模,无需多余调整。在导出 FBX 时,除了选择“网格”外,勾选“应用变换”(Apply Transform),然后点“导出 FBX”。这样导出的模型也是正确的,在导入 Unity 后,其坐标变换是我们期望的。
但是,该选项是一个实验性(!Experimental!)选项,可能会引起某些骨架或动画问题,但仅导出静态模型时不会引起问题。另外,在 Blender 的更早版本(如 2.79、2.81 等)中也有该选项,可以正常导出静态模型。
如图所示。场景中的物体,坐标变换是我们期望的,且实际显示正确。但缩略图显示不正确,可能是 Unity 的 Bug 或故意为之。
https://www.cnblogs.com/parva/p/11312679.html