1 Audio导入设置检查与优化
根据平台选择合理的音频设置,原始音频资源尽量采用未压缩WAV格式
- 移动平台对音乐音效统一采用单通道设置(Force to Mono),并将音乐采样频率设置为22050Hz
- 移动平台大多数声音尽量采用Vorbis压缩设置,IOS平台或不打算循环的声音可以选择MP3格式,对于简短、常用的音效,可以采用解码速度快的ADPCM格式(PCM为未压缩格式)
- 音频片段加载类型说明
- 简短音效导入后小于200kb,采用Decompress on Load模式
- 对于复杂音效,大小大于200kb,长度超过5秒的音效采用Compressed In Memory模式
- 对于长度较长的音效或背景音乐则采用Streaming模式,虽然会有CPU额外开销,但节省内存并且加载不卡顿
- 当实现静音功能时,不要简单的将音量设置为0,应销毁音频(AudioSource)组件,将音频从内存中卸载。
2 Model导入设置检查与优化
**DCC中模型导出**
- Unity 支持多种标准和专有模型文件格式(DCC)。Unity 内部使用 .fbx 文件格式作为其导入链。最佳做法尽可能使用 .fbx 文件格式,并且不应在生产中使用专有文件格式。
- 优化原始导入模型文件,删除不需要的数据
- 统一单位
- 导出的网格必须是多边形拓扑网格,不能是贝塞尔曲线、样条曲线、NURBS、NURMS、细分曲面等
- 烘培Deformers,在导出之前,确保变形体被烘培到网格模型上,如骨骼形变烘培到蒙皮权重上
- 不建议模型使用到的纹理随模型导出
- 如果你需要导入blend shape normals,必须要指定光滑组smooth groups
- DCC导出面板设置, 不建议携带场景信息导出,如不建议导出摄像机、灯光、材质等信息,因为这些的信息与Unity内默认都不同。除非你自己为某DCC做过自定义导出插件。
Unity模型导入流程
- 原始模型文件对性能的影响点
- 最小化面数,不要使用微三角形,分布尽量均匀
- 合理的网络拓扑和平滑组
- 尽量少的使用材质个数
- 尽可能少的使用蒙皮网格
- 尽可能少的骨骼数量
- FK与IK节点没分离,IK节点没删除
- 模型优化
- 尽可能的将网格合并到一起,()
- 尽可能使用共享材质
- 不要使用网格碰撞体
- 不必要不要开启网格读写
- 使用合理的LOD级别
- Skin Weights受骨骼影响个过多
- 合理压缩网格
- 不需要rigs和BlendShapes尽量关闭
- 如果可能,禁用法线或切线
- 多套模型
项目中所有模型资源都不涉及动画,可以将Rig标签下的Animation Type设置为None,并关闭Animation标签下的Import Animations选项,设置Materials标签中的Material Creation Mode为None.
- 开启Project Settings——>Player——>Optimization下的Vertex Compression与Optimize Mesh Data选项
Texture基础概念介绍
#### 纹理类型
- **Default:**默认的纹理类型格式
- **Normal map:**法线贴图,可将颜色通道转换为适合实时法线贴图格式
- **Editor GUI and Legacy GUI:**在编辑器GUI控件上使用纹理请选择此类型
- **Sprite(2D and UI):**在2D游戏中使用的精灵(Sprite)或UGUI使用的纹理请选择此类型
- **Cursor:**鼠标光标自定义纹理类型
- **Cookie:**用于光照Cookie剪影类型的纹理
- **Lightmap:**光照贴图类型的纹理,编码格式取决于不同的平台
- **Single Channel:**如果原始图片文件只有一个通道,请选择此类型
#### 纹理大小
选择合适纹理大小应尽量遵循以下经验:
- 不同平台、不同硬件配置选择不同的纹理大小,Unity下可以采用bundle变体设置多套资源、通过Mipmap限制不同平台加载不同level层级的贴图。
- 根据纹理用途的不同选择不同的纹理加载方式,如流式纹理加载Texture Streaming、稀疏纹理Sparse Texture、虚拟纹理VirtualTexture等方式。
- 不能让美术人员通过增加纹理大小的方式增加细节,可以选择细节贴图DetailMap或增加高反差保留的方式。
- 在不降低视觉效果的情况下尽量减小贴图大小,最好的方式是纹理映射的每一个纹素的大小正好符合屏幕上显示像素的大小,如果纹理小了会造成欠采样,纹理显示模糊,如果纹理大了会造成过采样,纹理显示噪点。这一点做到完美平衡很难保障,可以充分利用Unity编辑器下SceneView->DrawMode->Mipmap来查看在游戏摄像机视角下哪些纹理过采样,哪些纹理欠采样,进而来调整纹理大小。
#### 纹理颜色空间
默认大多数图像处理工具都会使用sRGB颜色空间处理和导出纹理。但如果你的纹理不是用作颜色信息的话,那就不要使用sRGB空间,如金属度贴图、粗糙度贴图、高度图或者法线贴图等。一旦这些纹理使用sRGB空间会造成视觉表现错误。
#### 纹理压缩
纹理压缩是指图像压缩算法,保持贴图视觉质量的同时,尽量减小纹理数据的大小。默认情况下我们的纹理原始格式采用PNG或TGA这类通用文件格式,但与专用图像格式相比他们访问和采样速度都比较慢,无法通用GPU硬件加速,同时纹理数据量大,占用内存较高。所以在渲染中我们会采用一些硬件支持的纹理压缩格式,如ASTC 、ETC、ETC2、DXT等。
如下图为未压缩、ETC2、ASTC6x6三种格式文件大小对比,我们可以看到在质量相差不大的情况下ASTC6x6压缩下大小可以减少到接近未压缩的十分之一。
(/Users/haibowang/Downloads/MyProjects/Unity2022_SUNTAIL_Stylized_Fantasy_Village_Optimization/Documents/Pics/3.png)
#### 纹理图集
纹理图集是一系列小纹理图像的集合,
- 优点:
一是采用共同纹理图集的多个静态网格资源可以进行静态合批处理,减少DrawCall调用次数。
二是纹理图集可以减少碎纹理过多,因为他们打包在一个图集里,通过压缩可以更有效的利用压缩,降低纹理的内存成本和冗余数据。
- 缺点
美术需要合理规划模型,并且要求模型有相同的材质着色器,或需要制作通道图去区分不同材质。制作和修改成本较高。
#### 纹理过滤
- **Nearest Point Filtering:**临近点采样过滤最简单、计算量最小的纹理过滤形式,但在近距离观察时,纹理会呈现块状。
- **Bilinear Filtering:**双线性采样过滤会对临近纹素采样并插值化处理,对纹理像素进行着色。双线性过滤会让像素看上去平滑渐变,但近距离观察时,纹理会变得模糊。
- **Trilinear Filtering:**三线性过滤除与双线性过滤相同部分外,还增加了Mipmap等级之间的采样差值混合,用来平滑过度消除Mipmap之间的明显变化。
- **Anisotropic Filtering:**各向异性过滤可以改善纹理在倾斜角度下的视觉效果,跟适合用于地表纹理。
#### 纹理Mipmap
- Mipmap纹理
逐级减低分辨率来保存纹理副本。相当于生成了纹理LOD,渲染纹理时,将根据像素在屏幕中占据的纹理空间大小选择合适的Mipmap级别进行采样。
- 优点:
GPU不需要在远距离上对对象进行全分辨率纹理采样,因此可以提高纹理采样性能。
同时也解决了远距离下的过采样导致的噪点问题,提高的纹理渲染质量。
- 缺点:
由于Mipmap纹理要生成低分辨率副本,会造成额外的内存开销。
3 Texture导入设置检查与优化