unity导入模型比例问题
在使用Unity 3D导入模型时,常常会遇到各种问题,本文将着重探讨其中的模型比例问题。
一、比例问题的产生原因
简而言之,默认情况下,Unity 3D系统的一个单位(1 unit)等同于1米,而在3ds Max中,默认单位是英寸(inch),这就导致了导入模型时出现比例问题。以下引用来自Unity官方论坛:
By default, the units in Unity are meters. So the default size for terrains is 1000m x 1000m, with a max height of 600m. You can change this in the Terrain->Set Resolution menu. The default settings for gravity, and audio dopplar also reflect the default 1 unit = 1m. This means that if you want to use the units as some other distance (eg, inches, feet, miles, or whatever), as well as importing models scaled to this new size, you'll also need to adjust the gravity and dopplar settings accordingly so that they produce sensible results for your new world scale.
了解了比例问题的成因后,接下来我们将探讨解决办法。
二、解决办法
解决模型比例问题主要有两个方向,一是在Unity中调整模型的缩放因子(Scale Factor),二是在3ds Max导出模型时按照Unity的单位进行导出。下面将分别详细介绍这两种方法。
(1)在Unity中进行调整
当模型从3ds Max以英寸为系统单位导出为FBX格式文件时,导出的模型一个单位代表一英寸。而Unity中每个单位代表1米,且Unity导入FBX模型是以厘米为最小单位的,所以需要对模型进行一定比例的放大操作。那么放大比例应该如何设置呢?我们通过一个实验来确定: 在3ds Max中创建一个1×1的平面(plane),并设置好相关参数。导出FBX文件时,要将单位设置为厘米(cm)。 将该FBX文件导入Unity后,把Inspector面板里的Scale Factor设为1,也就是将模型放大100倍。此时,在场景中,左侧是一个1×1的地形(terrain,面积为一平方米),右侧是放大100倍后的平面。可以观察到,平面的边长大约是地形边长的2.5倍,即约2.5米。我们来详细计算一下:在3ds Max中一个1英寸×1英寸的平面,实际尺寸为2.54厘米×2.54厘米;以厘米为单位导出为FBX文件,导入Unity并放大100倍后,就变成了2.54米×2.54米(2.54个单位)的平面。由此可见,这个操作流程是正确的。
下面总结在Unity中调整放大比例的规则:
- 如果模型以厘米为单位从3ds Max中导出,那么导入Unity后放大100倍可得到理想结果。
- 如果模型以英寸为单位(3ds Max默认情况)从3ds Max中导出,导入Unity后需放大254倍。计算过程为:1英寸×2.54 = 2.54厘米,再乘以100倍得到最终结果。
在Unity中放大模型有两种方法:
- 方法一:修改FBXImporter中的Scale Factor数值(即上文提到的Inspector面板里的Scale Factor,其默认值为0.01),将其恢复为1。不过,这种方法据说会占用模型资源,消耗较多的物理缓存。
- 方法二:从Hierarchy中选中待修改的模型,使用Scale同时将x、y、z轴各放大100倍。这种设置据说耗费的资源较少,而且还能通过编写脚本实现放大操作,十分便捷。
(2)在3ds Max中进行调整
在3ds Max中对模型进行整体缩放也有两种方法。
- 第一种方法:在3ds Max中选中模型后,按R键或者点击左上部工具栏的相应按钮可以进行缩放操作,也可以在右下角找到相关缩放选项进行操作。但这种方法只是改变了一个缩放因子,并不会改变模型本身的绝对大小,因此不建议使用。
- 第二种方法是等比例缩放:全选模型 -> 点击右上角的工具面板 -> 点击“更多” -> 点击“重缩放世界单位” -> 点击右边的按钮 -> 按照特定比例选择“场景”,然后点击确定,完成模型的整体放大。放大比例为1:100,即3ds Max导出时要将模型放大100倍(注意导出FBX文件时“单位”要选择厘米)。
三、比例问题总结
Unity中默认的单位比例(unit scale)和3ds Max的默认比例不一致,所以在Unity中使用3ds Max制作或导出的模型时,一定要格外注意比例问题。
例如,下图中有一个128个单位(英寸)的悬崖(cliff),图中白色方块是Unity中一个4×4的地形。128个单位的英寸换算成米为128×0.0254 = 3.2512米,从图中可以看出比例是正确的。