unity3d导入模型时会遇到很多问题,今天我们今天主要来说其中的一种unity导入模型比例问题。
一、比例问题的产生原因简而言之:在默认情况下U3D系统的一个单位(1unit)等于1米,而在3dsmax中默认的单位是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;另一种是在3dsmax导出的时候按照unity的单位导出。下面分别进行介绍:
(1)在unity中进行调整模型由3dsmax按照inch的系统单位导出成FBX格式的文件,导出的模型一个单位代表一个inch。unity每个单位代表1米,而unity导入FBX模型是以厘米为最小单位的,因此需要对模型进行一定比例的放大操作。放大比例应该设为多少呢?先做一个实验:
在max中创建一个1*1的plane,并把参数设置成:
导出fbx文件时注意把单位设置成厘米(cm):
将fbx文件导入unity后,把Insepector面板里的Scale Factor设为1,即放大100倍。下图左侧是一个1*1的terrain(一平方米),右侧就是放大100倍后的plane。可以看出来plane的边长大概是terrain的2.5倍,也就是2.5米左右。可以来计算一下:max中一个1inch * 1inch的plane,其实也就是2.54cm * 2.54cm ——> 以cm为单位导出成fbx文件 ——> 导入unity后放大100倍,变成2.54米 * 2.54米(2.54个单位)的plane。看来这个流程应该是正确的。
总结——在unity中调整放大比例:
1、如果模型以厘米为单位从max中导出,则导入unity放大100倍可以得到想要的结果。
2、如果模型以inch为单位(默认情况下)从max中导出,则导入unity后需放大254倍。1inch * 2.54 –> 2.54cm –> 乘以100倍得到结果PS:unity的模型放大有两种方法:一种方法是修改FBXImporter中的Scale Factor数值(上文提到的Insepector面板里的Scale Factor,其值默认为0.01),将Scale Factor的数值恢复为1,但这样做据说会占用模型资源,比较消耗物理缓存;另一种方法是从Hierarchy中选中待修改物品,使用Scale同时放大x,y,z各100倍,这种设置据说耗费的资源比较少,同时还能通过使用脚本来进行这个放大操作,十分方便。
在max中进行调整就是要对模型进行整体缩放,这里有两种方法。
1、第一种方法:在max中选中模型后按R键或者在左上部的工具栏按钮可以进行缩放,还可以在右下角找到,进行缩放。但这种方法不会改变模型本身的绝对大小,只是改了一个缩放因子,因此不推荐使用。2、 第二种方法是等比例缩放:全选模型 –》点右上角的工具面板 -》点击“更多”
-》点击“重缩放世界单位”
-》点击右边的按钮
-》按照图中的比例选择“场景”然后点击确定
完成模型的整体放大。
放大比例是1:100,max导出时要放大100倍。(注意导出FBX文件时“单位”要选择厘米)
三、比例问题总结
unity中默认的unit scale和3dsmax的默认scale是不一致的,因此在unity中使用max制作或导出的model时一定要注意比例问题。
下图是一个128个单位(inch)的cliff,图中白色的方块是unity中一个4*4的terrain。128个单位的inch等于128*0.0254=3.2512米,从图中可以看出比例应该是正确的。