3dmax用FBX格式把模型导出并导入unity时需要注意的问题。

目录

一、角度问题

1.问题研究

2.解决方案操作

二、轴心位置问题

三、结论


一、角度问题

参考:【3dsmax】导入Unity3D需要注意的轴问题

1.问题研究

先创建一个Demo场景,能辨认出朝向的。

3dmax导入unity问题

3dmax导入unity问题

放入unity里面结果

3dmax导入unity问题

3dmax导入unity问题

模型对象角度是(0,0,0)的,子物体对象角度是(-90,0,0)的,不行。

需要注意的是,前面导出的高级设置轴转换,无论是Y向上还是Z向上结果是一样的。

------------------------------------------

加个顶级分组再导出

3dmax导入unity问题

这种情况就变成模型对象(根对象)是(-90,0,0),子物体是(0,0,0)了。

3dmax导入unity问题

多加几层分组也是一样的:

1.在没有顶级分组的情况下,导入Unity中,根物体的角度是(0,0,0),第一级子物体(或分组)的角度是(-90,0,0),后续子物体(或分组)的角度是(0,0,0)

3dmax导入unity问题

3dmax导入unity问题

2.在有顶级分组的情况下,根物体角度是(-90,0,0),下面的子物体角度都是(0,0,0)

3dmax导入unity问题

3dmax导入unity问题

2.解决方案操作

旋转轴:在3dmax中选中物体,切换到层次,仅影响轴。

在没有顶级分组情况下:

3dmax导入unity问题

红色的轴是X轴,绿色的是Y轴,蓝色的是Z轴,默认是Z轴向上的。

进入旋转操作,注意要选中角度捕捉,设置90度。

3dmax导入unity问题

旋转90°

3dmax导入unity问题

注意,这时虽然看起来全选了,实际上选择就只有顶级的4个分组和物体,旋转的也是这4个的轴。导入Unity中,后上面的4个对于与第2级物体了,是(0,0,0)的,而第3级变成了(-90,0,0),4级则还是(0,0,0)了。

3dmax导入unity问题

就算按ctr+a,或者全部框选,看起来像选中所有的物体,旋转所有物体的轴。

3dmax导入unity问题

3dmax导入unity问题

再导出FBX导入Unity,发现还是有些是(-90,0,0)。

3dmax导入unity问题

正确操作是,先全选,然后选择按递归方式打开,然后再全选(这样才能选中全部物体),再旋转轴。

3dmax导入unity问题

3dmax导入unity问题

导出到Unity中后,所有的层级的物体都是(0,0,0)了。

---------------------------------------------------------------------------

在有顶级分组的情况下,假如旋转顶级分组本身的轴,导入Unity中则会是2级物体是(-90,0,0),其他都是(0,0,0)

3dmax导入unity问题

3dmax导入unity问题

正确操作还是和上面一样,要选择按递归方式打开,再旋转全部轴。

二、轴心位置问题

上面的问题也算是轴心的角度问题,这里讨论轴心位置问题。

1.1个物体

创建一个小球,坐标设置成(0,0,0)

3dmax导入unity问题

导入unity中,结果,坐标也是(0,0,0)。

修改物体坐标,再次导入unity中,物体有个初始坐标了,拖出来到Hierarchy里面,会有个坐标在物体上,但是修改物体坐标为(0,0,0),模型能够显示在unity的原点位置,这种情况问题不大。

3dmax导入unity问题

大部分模型拿来放到unity中也不是用它自己的初始化位置,而是会给他一个位置(无论手动添加到场景中还是代码设置)。

-------------------------------------

接下来要修改轴的位置了。

在上面的基础上,在unity中,创建一个子物体,坐标是(0,0,0),这个子物体的位置就和3dmax导入的模型重合在一起的。

3dmax导入unity问题

3dmax中修改轴的位置,移动到物体外面。

3dmax导入unity问题

导入uinty,能看到轴心在小球物体外面了,而且P5这个对象有坐标。

3dmax导入unity问题

这个坐标到底是什么呢?

3dmax导入unity问题

可以看到这个代表unity原点的点,在3dmax的小球的里面,小球的位置是在(0,0,0)没错的,但是P5这个对象的坐标则是(0,0,-6)的。

假如把P5的坐标设置为(0,0,0)的话,小球就不在(0,0,0)上了。

创建一个(0,0,0)相对坐标的子物体,

子物体会出现在轴心位置

3dmax导入unity问题

结论:一个物体,在unity里面的坐标值指的是轴心的坐标。

注意,其实在unity里面点击物体看到的坐标轴不一定就是模型的轴心,这里是1个物体,情况简单。

多个物体时,Unity会自动算一个轴心显示的,一般是几个模型的中心,这个显示轴心不一定就是模型的轴心。而相对坐标(0,0,0)的子物体则一定就是轴心的位置。

2.2个物体

3dmax导入unity问题

导入unity中

3dmax导入unity问题

在unity中看到的和3dmax中一样的。

假如我把Sphere001的坐标从修改为(0,0,0),改成(0,10,0)。

3dmax导入unity问题

导入unity中也是一样的

3dmax导入unity问题

但是,这种情况其实是有问题的

用小球看不出来,假如我创建一个大楼。

随便建,不用考虑大楼在世界坐标中的位置。

3dmax导入unity问题

导入unity后

3dmax导入unity问题

大楼就偏了。

为什么说偏了呢?因为轴心偏了。问题和前面一个物体是手动把轴心拖出来是一样的。

3dmax导入unity问题

这里明明P6坐标是(0,0,0),大楼就是不在(0,0,0),不在下面正方形(假设是广场)的中心。

这个大楼不是整个世界,是一个大场景中的一部分,比如一个广场上的某一座大楼。Unity中的整个场景不会是全部用一个max文件创建的,会有多个max文件,多个人员,创建一个世界中的不同部分,然后合并组织成一个完整的场景的。

比如大楼原本计划在unity场景的(0,0,0)的,上面的导出模型的情况下,根本没有方便的操作去把大楼模型放到(0,0,0)的,因为它的轴心在模型的外面。

3dmax导出的模型的轴心必须在模型的中心,才能在场景组织时和其他模型能配合起来。

如何操作:3dmax中创建包含全部模型的顶层组,并把该组坐标设置为(0,0,0)。

3dmax导入unity问题

3dmax导入unity问题

unity中好使用了。

--------------------------------

这里其实还有的小问题,大楼跑到地下去了。

在3dmax中把组的轴心拖到地板中心

3dmax导入unity问题

进入unity中,则模型P8,拖动出来就有个初始坐标了(0,-3.4,0)。

3dmax导入unity问题

把坐标改成(0,0,0),则:

3dmax导入unity问题

所以我们要求的模型轴心有两种:物体中心或者底面中心。

两种都可以,设备一般要求物体中心,大楼等建筑物体中心和地面中心都行,大楼等物体中心的情况下,代码上也是能统一处理的。

---------------------------------------------------------------------

其实这里就不是一定要把顶层组设置(0,0,0)了,和最前面的一个物体的情况一样。大不了有个初始坐标,使用是设置一下坐标就好了。

没有顶层组的情况下,3dmax导出的模型的轴心是原来3dmax中的世界坐标的(0,0,0)的位置。有顶层组的情况下,顶层组作为一个物体考虑,模型的轴心就是组的轴心,一般也就是组下面的模型的中心。

三、3dmax旋转缩放操作的影响

1.3dmax和unity的坐标单位

没有修改单位的情况下,默认m为单位。

3dmax导入unity问题

放到Unity中,结果能够和Unity里面的(1,1,1)大小的Cube重合

3dmax导入unity问题

把3dmax的单位改成mm,结果就是1000mm的立方体和Unity里面1个单位的立方体是重合的。

说明Unity里面的1个单位就是3dmax里面的1m。

2.旋转操作

3dmax导入unity问题

导入unity

3dmax导入unity问题3dmax导入unity问题

。。。。

3.缩放操作

四、结论

1.max文件导出前必须有一个顶层组,有且只有一个。

2.选择按递归方式打开,再旋转全部模型的轴的角度,旋转成Y轴(绿色)向上。

3.Unity里面的1个单位就是3dmax里面的1m

//todo:四、3dmax二次开发,下一篇博客吧

 

相关文章: