Unity3D导入3DMax模型缩放单位问题深入分析

“Unity3D导入3DMax制作的模型存在100倍缩放比例”,各Unity3D开发者基本都听过吧。

  1. 怎么保证3DMax中制作的1m导入Unity3D后还是1m?
  2. 为什么会存在100倍缩放问题?

怎么保证3DMax中制作的1m导入Unity3D后还是1m?

3DMax单位设置

英文版
MAX单位设置_en.jpg

中文版
MAX单位设置_zh.jpg

按如上单位设置后,每个格子是0.1m的大小。要制作一个1m的模型得占10个格子,如下为一个边长1m的盒子:
MAX盒子单位示例.jpg

通过以上设置后,3DMax里制作的1m导入Unity3D也是1m,继续分析原因

为什么会存在100倍缩放问题?

解释这个问题前,先明白几个概念

3DMax“显示单位”和“系统单位”有什么关系

显示单位:决定3DMax主面板显示时使用的尺寸单位,下面是分别设置为“厘米”和“米”时的情况
MAX显示单位_cm.jpg
MAX显示单位_m.jpg
数值暂不用关心,看数值后面的单位cm和m,这就是显示单位的设置

系统单位:与“显示单位”一起决定,最终存储时记录的单位值(暂且叫“存储单位”吧)。
存储单位=显示单位/系统单位
做个1m的box:显示单位设置为1m时,系统单位为1m 存储单位为1,系统单位为1cm 存储单位为100
做个1cm的box:显示单位设置为1cm时,系统单位为1cm 存储单位为1,系统单位为0.1mm 存储单位为100
做个1m的box:显示单位设置为1cm时,系统单位为1cm 存储单位为100,系统单位为0.1mm 存储单位为10000

“显示单位”和“系统单位”对Unity3D的导入有何影响?

上面所说“存储单位”最终会记录到模型文件,Unity3D导入时将按“1存储单位=1m”的比例显示模型,举两组数据:

显示单位1m,系统单位1m,存储单位1,Unity3D中显示0.01m
显示单位1m,系统单位1cm,存储单位100,Unity3D中显示1m

不是说“1存储单位=1m”吗,怎么缩小了100倍?
看下Unity3D导入模型的默认设置
Unity导入模型Scale值.jpg

缩放因子为0.01,导入Unity3D的模型默认情况下会被缩小100倍。
要使3DMax导出的模型在导入Unity3D时默认1m=1m,关键得让模型中记录的“存储单位”=100。
比如这几种方式都能得到存储单位为100的模型:

  1. 显示单位1m,系统单位1cm,制作一个1m的模型
  2. 显示单位1cm,系统单位0.1mm,制作一个1cm的模型
  3. 显示单位1cm,系统单位1cm,制作一个1m的模型

只要符合以下公式(模型尺寸/显示单位)*(显示单位/系统单位)=100,化简一下为 模型尺寸/系统单位=100
但要达到“3DMax中创建一个1m的模型导入Unity3D也是1m”的要求,那么模型尺寸=1m 已经固定,代入公式得 系统单位=1cm。所以3DMax里系统单位要设置为cm,显示单位怎么设置都无所谓。

结论

要保证“3DMax中创建一个1m的模型导入Unity3D也是1m”,只需要把3DMax中系统单位设置为cm

PS

真不明白为什么Unity3D要把模型导入默认缩放因子设置为0.01。
不过有以上公式这些都不是问题,如果Scale Factor = 1只需要保证模型记录的存储单位为1,即“模型尺寸/系统单位=1”->“1m/系统单位=1”->系统单位=m

敲了这么多感觉有点啰嗦,如果感觉不明白,欢迎回复讨论^_^

转载请注明:兜里-Unity3D导入3DMax模型缩放单位问题深入分析

标签:unity3d, 游戏开发, 3dmax

已有 17 条评论

  1. 坚果 坚果

    其实unity中没有所谓的单位,也没有显示单位名称,所以,如果把里面的unity中的1m换成为unity中的一个最小单位方格可能更好。今天也是测试了很久,你的后半段内容我一开始没看懂,后来通过我自己的测试后再看你的这样解释,我觉得说的还是很通的。另外unity5.0版本帮我们解决了关于max单位和unity单位的问题。以后只要在max中输入的单位为通用的(如cm、m、mm、km)的,只要显示的长度是1m,那么你导入后,默认显示的效果就是1个方格大小。当然,场景中模型的scale细数可能会有不同而已。

    1. Unity3D 5.x之前的确有很多“不方便”之处,比如单位、AssetBundle等,这些引擎本可以做的更智能。项目太忙,5.x还没做太多研究,多交流

  2. 新人 新人

    感谢

  3. 新手菜鸡 新手菜鸡

    做个1cm的box:显示单位设置为1cm时,系统单位为1cm 存储单位为1,系统单位为0.1mm 存储单位为100
    做个1m的box:显示单位设置为1cm时,系统单位为1cm 存储单位为100,系统单位为0.1mm 存储单位为10000

    请问这个地方是不是有点问题怎么显示单位和系统单位都是1cm不应该是上面一个是对的吗?下面那条是否为手误呢?
    显示单位1m,系统单位1cm,制作一个1m的模型
    显示单位1cm,系统单位0.1mm,制作一个1cm的模型
    显示单位1cm,系统单位1cm,制作一个1m的模型
    这个地方显示单位1cm,系统单位1cm,制作一个1m的模型这个地方制作出的制作出的模型是1m请问为什么呢

    1. 问题1:
      第一条做的1cm的box,第二条做的1m。差100倍,所以存储单位也是相差100倍。

      问题2:
      看公式 存储单位=显示单位/系统单位,要让导入Unity中的模型“存储单位”为100,那么做的模型大小应该是100倍显示单位(1cm/1cm * 100),即1m大小

      1. 新手菜鸡 新手菜鸡

        不好意思我刚刚接触模型这块不是很明白,第一个问题我是否可以理解为做个1cm的box:显示单位设置为1cm时,系统单位为1cm 存储单位为1,这个时候我做一个立方体给他的参数就是1cm、1cm、1cm,做个1m的box:显示单位设置为1cm时,系统单位为1cm 存储单位为100,这个时候我做一个立方体给他的参数就是100cm,100cm,100cm?

        1. 给他的“参数”是指什么?

          1. 新手菜鸡 新手菜鸡

            就是我在3dmax建模的时候选择完显示单位和系统单位都是1cm后我建立一个立方体设置边长为1cm,导出后倒入u3d再选择显示单位和系统单位为1m建立一个边长为1m的立方体,倒入u3d后完全一样。。。进去u3d后缩放比例都是1。所以我现在有点乱。。。因为之前也碰到过缩放比例是0.01的情况。。。我的u3d版本是5.4,如果可以的话能否加个QQ119889525请教一下。。。。

            1. 没错,这两种方式导出的模型是一样的效果。你的问题是什么?

          2. 新手菜鸡 新手菜鸡

            我的问题就是这两种为什么导出后放进u3d是一样的,而且缩放比例都是1?我之前的理解是这两个放进u3d的话应该缩放比例都是0.01然后都变小了。。。

      2. 新手菜鸡 新手菜鸡

        还有个问题请问你们3dmax模型导出是导出为fbx类型的那种方法吗?如果是的话,那么高级选项中的单位是选择自动还是设置为米?还是选择的直接另存为max类型的文件。我现在导出的缩放比例一直是1不管如何导出放进u3d都是1,也就是我之前说的不管单位是1cm还是1m放进u3d都变1m了

        1. 是fbx,可以手动改为0.01。至于为什么自动变成1,不太清楚,你把同一模型在别的机器上导入试试

          1. 新手菜鸡 新手菜鸡

            那请问我现在想做个1cm的模型怎么办?我现在做出的1单位模型不管是cm还是m放进u3d都是1m

            1. max中“系统单位”设置为cm,做一个1cm的模型。导入u3d后,scale factor改为0.01

  4. J J

    设置成厘米,在引擎里显示0.01,就是缩小了100倍。MAX里按米导出,在引擎里默认缩放显示1不好么,1比1不就是原始尺寸?
    右下角是栅格一格的大小,在捕捉里设置,只是栅格,的显示尺寸

    1. 也可以,但得重新设置导致引擎中的模型Scale Factor值

添加新评论