unity3d导入3dmax模型pmx问题

Unity模型导入的若干问题 - FancyBit - 博客园
现代魔法修炼手札
原文链接:
发现unity3D-3.5版官方的AngryBots示例效果很震撼,就下了一个unity来玩玩。想把unity玩起来自然离不开model,面对3dsmax这些nb工具,作为一名服务器端程序员对此表示压力很大,无奈只能求助谷哥找一些model。
废了九牛二虎之力后把model从3dsmax导入unity,把模型drag到一个1*1的场景里,结果如下图......
在Hierarchy里有我导入的model,双击后可以看到(给我的Peon打了一个Point light^_^):
看来是model的scale太小了,为什么会太小了呢?3dsmax和unity的unit scale不一样?怎么设置才能达到想要的效果?本文将逐一解答这些问题。
一、比例问题的产生原因
简而言之:在默认情况下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倍,这种设置据说耗费的资源比较少,同时还能通过使用脚本来进行这个放大操作,十分方便。
(2)在3dsmax中进行调整
在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.2米,从图中可以看出比例应该是正确的。
四、Unity3d和3dMax美工部分总结
本小节的内容全部转载自参考文献[1]
3dsmax2010***插件,输出FBX的类型导入Unity3D中。默认情况下,3dsmax8可以和U3D软件直接融合,自动转换为FBX物体。
1.面数控制
在MAX软件中制作单一Game Object物体的面数不能超过65000个三角形,即32500个多边形Poly,如果超过这个数量的物体不会显示出来,这就需要我们合理分布多边形和模型数量。打开MAX场景,选择File/Properties/Summary Info可以打开文件属性记录。其中Faces可以看到每个物体的实际数量,模型面数要少,个体数量不能超过65000个Faces面。
有特殊效果的模型需要单独制作,物体命名要统一(SanLou_YanHuiTing_JingZi或者SanlouYanhuitingJingzi),但不能出现重复,否则整合模型会被覆盖,给后期工作造成不必要的麻烦。
2.建模控制
Unity3D软件支持Line渲染和编辑之后所产生的模型。大部分模型都依靠Polygon进行制作。在模型表面可以承认多出四边形的面,但不渲染交错的面。默认情况下,U3D引擎是不承认双面材质的,除非使用植物材质球Nature类型。所以在制作窗户、护栏等物体,如果想在两面都能看到模型,那需要制作出厚度,或者复制两个面翻转其中一个的Normal法线。
3.文件的放置
模型可以继承MAX的材质,但是文件的设置要按照以下形式进行放在项目的Assets文件夹内,新创建一个Object文件夹。并在其中创建Materials和Texture文件夹(分别自动存放材质球和贴图)。模型物体并列保存在Object文件夹内。这个规律模式不要打乱,否则会破坏整个系统逻辑。
4.材质数量控制
物体材质要赋予默认的标准材质standard,特殊材质需要特殊调节(玻璃,镜面等),透明材质需要给双面。如果一个物体给与一个材质球,那么Unity3D对于材质数量和贴图数量没有任何的限制。
如果一个物体给与多个材质球,我们需要用Multi/SubObject来实现,但是这种罗列的材质球的数量没有严格的控制,但尽量保持在10以内,过多的数量会导致一些错误。
如果不使用Multi/SubObject材质球,也可以选择一些面,然后给与一个材质球。这样系统会自动将其转换成Multi/SubObject材质。
综合而言Unity3D软件对于材质的兼容还是很好的。
5.物体的质感
Diffuse、Diffuse Bumped、Bumped Specular,这三种类型为常用类型,其中Bumped需要增加Normal法线贴图来实现凹凸。
这种材质为贴花材质,即相当于Mask类型,可以再Decal(RGBA)贴与一个带有Alpha通道的图像,形成和原图像相叠加的效果。
Diffuse Detail
这种材质可以创造出污迹和划痕的效果,即相当于Blend混合材质。
Reflective
其中各种类型可以创造出金属反射效果,需要增加Cubmap贴图。
Transparent
其中各种类型可以创造出透明的效果,需要增加具有Alpha的通道贴图。
注意:如果要做玻璃贴图,Alpha如果全是灰色或黑色(即要求全透明),那么Alpha就会失效,如果要全透明,材质Alpha其中必须至少有1像素为白色。
其中Soft Occlusion Leaves类型主要应用于片状的树叶材质。
6.关于复制
场景中的灯光布局,重复的模型物体都可以使用系统Prefab进行关联复制,这样可以改变一个参数的同时将所有关联物体属性改变。
7.山脉控制
在创建山脉之后,选择Terrain/Set Resolution可以设置山脉的大小和属性。
需要注意的是,默认情况下Terrain Width和Terrain Height为1000米。如果设置这个数值太小,那么绘制草的时候会产生偏移,因为草的尺寸必须减少到0.1的单位。
也就是说,山脉在处理0.1单位的时候会产生0.01的偏差,如果模型太小,这种偏差是显而易见的,所以建议用户不要让模型过小。
8.光晕控制
光晕又称为Lens Flare即灯光光效。可以选择一个GameObject物体给与Component/Rendering/Lens Flare,并在Flare中增加一个Standard Assets/Light Flares/50mm Zoom项目。这样在运行之后就会产生光晕。但有时候如果光晕太远太高却看不到。一种办法是将光晕离近,另一种办法是将所有摄影机Camera的Far clip plane的数值增加。
9.摄影机控制
如果场景中有多架摄影机,那么如何确定第一打开时间所显示的摄影机,就需要设置Camera属性中的Depth数值,数值越大的摄影机越优先显示。1、轴向偏转
MAX模型导入Unity3D后,X轴会自动偏转-90度。是因为Unity3D采用的是左手坐标系,而3DMax采用的是右手坐标系。无奈啊,这是很多游戏引擎跟Max结合后都会产生的问题。兼容性问题!!傻X啊MAX。这世界上绝大多数三维软件都TMD的是左手,你非要右手。。主流啊主流。。。
也就是说MAX进入Unity3D后,Z轴就会向上,而空间坐标是Y轴向上。别认为是什么小问题。。如果用程序控制物体指向时,麻烦就大了。妈逼。。
解决方案:把模型导3DS文件,再进Unity3D就不会有问题。而不是官方建议的FBX。FBX跟MAX没差。MAX有什么问题FBX同样有那问题。(FBX里的导出设置里的Z up或是Y up都没有意义)
2、单位问题(缩放因子问题)
Unity3D物理系统的单位是 米(M) 。也就是说Position X为1的话就是X方向移动1米。
情况A,MAX系统单位为米时,建一个长宽高各为5米的Box丢进Unity3D里变成了5厘米。
情况B,MAX系统单位为厘米时,建一个长宽高各为5厘米的Box丢进Unity3D里就是5厘米。
情况C,MAX系统单位为厘米时,建一个长宽高各为5米的Box丢进Unity3D里就是5米。
可以看出MAX单位为厘米时,Unity3D识别正确。。那为什么米就不对呢,难道做建筑用厘米去做?
经过大量的实验我发现了一个很操蛋的问题。
MAX的系统单位设置对于Unity3D而言一点意义都没有!!Unity3D根本就不理会MAX的单位,官方文档里称MAX文件可以使用文件单位,这是在放屁~~~
重新理解一下情况A、B、C就可以明白了。咱们撇去MAX系统单位不看。
A中,Box为5个单位,进入Unity3D后是0.05个单位,缩小了100倍。
B中,Box为5个单位,进入Unity3D后是0.05个单位,缩小了100倍。
C中,Box为500个单位,进入Unity3D后是5个单位,缩小了100倍。
说白了就是丢进Unity3D里就会缩小100倍,跟单位没什么关系。
为什么会缩小100倍呢?
因为MAX模型导入Unity3D时,导入设置里的缩放因子(Scale Factor)默认是0.01,缩小100倍。呃。。好吧。。。你赢了。。
既然MAX系统单位毫无意义,那就毫不犹豫的把导入设置里的使用文件单元(Use File Units)选项取消掉。
然后MAX建模里也不用使用特殊的系统单位了,导入时用缩放因子控制大小就行了。
建筑建模时,MAX单位视为米。导入时,缩放因子设为1。
角色建模时,MAX单位视为厘米。导入时,缩放因子设为0.01。
OK了。。。
阅读(...) 评论()Unity3D开发者常见问题20条&&转
1:天空盒有接缝怎么解决?
答:在贴图导入设置里设置Wrap Mode为"Clamp".
2:DDS格式怎么不显示?
答:Unity不支持DDS格式,Unity会将除DDS外的其他格式图片具有为DDS同样的优化.
3:Unity如何动态载入外部模型等文件?
答:可以使用AssetBundle:/support/documentation/ScriptReference/AssetBundle.html
4:脚本编辑器有语法提示吗?
答:有的,Win版使用Ctrl+I,Mac版使用Ctrl+&.
5:如何使用烘焙贴图(多重纹理)?
答:不要使用Shell贴图,直接将烘焙图赋予贴图的"自发光"通道之上.
6:怎么屏蔽Webplayer右键菜单?
7:为什么水面没有实时反射效果?
答:只有专业版才支持这种反射效果.
8:怎么做摄像机漫游动画?
答:Max正常制作摄像机漫游动画,倒到Unity中后,将Unity的Camea拖拽到Max导出的摄像机Gameobject物体之上,作为其子物体即可.
9:如何自定义Webplayer载入Logo及进度条?
10:GUI上怎么使用中文字?
答:导入任意中文字体,然后定义GUISkin字体为该字体即可.
11:购买一个授权可以***几台电脑?
答:可以***于2个系统之上比如一个Win版一个Mac版.
12:Max文件扔到Unity中怎么说导入失败?
答:下载最新版Fbx插件,用Max导出Fbx文件然后扔Unity中.
13:如何不让摄像头穿透模型,离模型近了就像模型露面了?
答:设置相机的Near clip plane,调小一点,但是不要给负数.
14:怎么用双面贴图?
答:Unity中可设置双面Shader,最简单有效的办法是直接做成双面的实体模型.
15:导入的Fbx模型尺寸小于Max中的尺寸?
答:在Unity中该文件的导入设置中设置缩放因子为1.
16:如何给相机添加Glow效果?
答:选中相机对象,在菜单中选中Component-Image
Effects-Glow赋予该组件即可(专业版才支持此特效)
17:怎么设置Webplayer默认尺寸?
答:到菜单Edit-Project Settings-Player中设置Default Web
Screen尺寸即可.
18:怎么设置可执行文件的启动Banner?
答:到菜单Edit-Project Settings-Player中设置Resolution Dialog
19:如何设置雾效?
答:到菜单Edit-Render Settings中开启Fog及设置Fog Color等即可.
20:如何设定默认Skybox天空盒?
答:到菜单Edit-Render Settings中设置Skybox Material即可.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

参考资料

 

随机推荐