前言

相信在游戏中,模型相当于游戏必要的元素,例如游戏的一个人物角色,我们可以称它为一个模型,今天学习一下导入 Unity 3d 模型,我们应该注意哪些细节!当然我们知道常用的模型都可以通过 Maya/3D Max 等三维动画软件制作的。

正文

官方学习文档:https://docs.unity3d.com/Manual/FBXImporter-Model.html

  1. 模型自身规范:
    1.0 所有的模型在原点创建,没有具体的特定要求下,需要以物体对象中心为轴心;
    1.1 模型面数:移动端( 300-1500 个多边形达到比较好的效果) PC端( 1500-4000 比较适宜)正常的单个物体最好控制在 1000 面以下,所有的物体面数不超过20000 个三角面;
    1.2 模型大小:模型文件做到最大的优化,对于看不到的面,我们可以采用直接删除,合并断开的点,移除孤立的点;
    1.3 模型命名:命名最好做到规范化,模型在给绑定之前必须做一次重置变换;
    1.4 模型复制:如果物体可以复制的话,就尽量复制;例如一个 500 面的物体,烘培好之后复制出去 50 个,那么他所消耗资源基本和一个物体消耗的资源基本是一样;
    1.5 模型单位:在建模型之前设定好单位,在 Unity3d 中用到的单位设置必须要一样,模型和模型之间的比例要正确,和程序导入的单位要一致,如果到程序中单位需要缩放也尽可能统一调整缩放比例,统一单位为米;
  2. 模型导入中的规范:
    2.0 模型使用的材质,首先在 3d Max 和 Maya 中,不是所有的材质在 Unity3d 中都可以支持使用,只有 Standard(标准材质)和 Multi/Sub-Object(多维/子物体材质)被 Unity3d 软件所支持。
    2.1 模型贴图格式和尺寸:常用的图片格式是 .tga 和 .png (带透明通道) 、不带通道为 .jpg ,贴图的尺寸最好为 2 的 N 次方,最大的贴图尺寸不能超过 1024X1024 ,当然特定的要求,尺寸可以根据具体的需求而定。
    2.2 模型贴图其他注意点:
         2.2.0 贴图命名不要有中文字命名,并且不能有重名;  
         2.2.1 材质命名和物体名称最好保持一致,易于整理,材质球的父子层级的命名尽可能一致;  
         2.2.2 同种贴图可以使用同一个材质球;  
         2.2.3 带Alpha 通道贴图图片格式最好为 tga 和 png 格式,在命名可以加 _al 加以区分;  
         2.2.4 模型需要通过通道处理时,在制作通道纹理,最好将透明部分改成模型的主色,这样渲染可以使有效边缘部分大颜色正确,通道纹理在程序渲染占用的资源同尺寸大普通纹理要多,通道命名也最好以 _al 结尾;  
    
    2.3 Unity资源导入:对于游戏中资源导入可以导入图片,网格等,Project 面板右键( Import New Asset )。
         2.3.0 图片设置:  
               TextureType:贴图类型。  
               AlphafromGrayscal :使用灰度创建 Alpha,当需要unity为贴图创建一条 alpha 通道,使用它转换得到的灰度值来渲染透明度,可以开启它。  
               WrapMode:所谓的包裹模式,决定贴图会无限次平铺还是只绘制一次。Repeat 就是重复平铺。Clamp 会让贴图的边缘拉升并在改变大小时候填满任何缝隙。  
               FilterMode:所谓的图像过滤模式,在拉伸时候对贴图过滤,比如 [Point] 点过滤,在很近看贴图时候,可能感觉不均。Bilinear 它会时近看贴图显得模糊。Trilinear 它会在不同 mipmap 层次之间模糊。  
               AnisoLevel:设置各项异性过滤器的级别,同属的可以理解为当你从一个比较陡的角度来看,贴图现实的可以有多细腻,渲染的等级越高,越占内存。想要确定贴图页面会占用多大内存,可以长X宽,再乘以他的位深度 [bpp,每像素位数] ,如果贴图包含 mipmap ,还需要扩大 1.33 倍。  
         2.3.1 网格设置:
               网格就是那些 Maya ,C4D,3DSMAX,C3D,LW 等软件导出的文件。比如导入一个 .fbx 文件。选中后,在Inspector面板中,我们能看到下面的属性:  
               ScaleFactor:缩放系数,使用这个属性在导入资源后设置其大小,调整资源在场景现实过大,或者过小的问题。  
               MeshCompression:网格压缩的比例( Off,Low,Medium,High )不可否认,压缩时可以节约内存的。  
               OptimizeMesh:为提高 GPU 性能记录网格顶点和索引。  
               GenerateColliders:是否在场景中让网格对象具有碰状体表现,通俗的说就是实心的,不可以穿体而过。  
               SwapUVs:交换 UV ,当你导入一个网格对象时候,着色器可能会使用错误的 UV 通道,如果发现资源异常(比如带光照图时候),可以选中这个复选框。  
               Generate Lightmap UVs:为UV2生成光照贴图。  
               Normals&Tangents:该项设置计算法线切线  
               Normals:计算法线,import 表示使用导入的网格法线,Calculate 表示从新计算网格法线。  
               Tangents:计算切线,import 表示使用导入的网格切线,Calculate 表示从新计算切线。  
               Smoothing angle:法线平滑角度,告诉引擎在角度值为多少时候把一个边缘视为硬边缘。  
               Split Tangents:是否分离切线,如果模型在场景渲染后现实 UV 缝隙,要开启它。  
               Materials:  
                     Import Materials:是否导入材质,默认选中。  
                     Material Naming:材质名字生成模式。  
                     Material Search:材质搜索方案。  
    
  3. 模型在制作软件中具体设置:
    3.0 贴图烘培设置:在进行Completemap 烘培方式,贴图通道和物体 UV 坐标通道必须为1 通道。
    3.1 lightingMap 烘培设置时,和 completemap 设置有些不同,贴图通道和物体 UV 坐标必须为 3 通道,烘培时灯光的阴影方式为 adv.raytraced 高级光线跟踪阴影,背景色要改白色,可以避免黑边的情况,主要物件的贴图 UV 必须手动展开;
    3.2 模型绑定及动画
         3.2.0 骨骼必须为 IK 、CAT、BIP 三类,Unity 不认虚拟动画,单个物体骨骼数量不超过 60 个;  
         3.2.1 动画帧率、帧数的控制,一般情况下每秒 10 帧,一个动画尽量控制 1 秒内完成;  
    
    3.3 模型导出
         3.3.0 将烘培材质改为标准材质球,通道为 1 ,自发光 100% ;  
         3.3.1 合并顶点,删除多余的材质球(不重要贴图缩小);  
         3.3.2 物体名称、材质球名、贴图名保持一致;  
         3.3.3 按要求导出的 .fbx (检查是否要按组导出,导出 fbx 后,再重新导入 3D Max/Maya 中动画是否正确)  
    

参考链接:
Unity3D 实用技巧 - 快速学会模型合理导入 Unity3D 引擎
Unity3D 模型导入的注意事项


to be continued…