①减面:对场景模型减面优化是最多见的优化操做。主要是去掉对模型造型没有影响的面,用尽量少的面数表达清楚模型的结构和造型。好比:物件非关节点及物件背面、内部不会看见的面删掉。 工具
②合并模型:合并同一小范围内的非交互类的静态小物件,同时合并小物件的贴图。这样能够减小DRAW CALL的数量。如,一组不一样大小的小草,一组大小形状不一样的石头,一个书架和上面放置的不少书籍等。把这些小物件合并成一个object,贴图也合成成一张贴图。高端手机平台上draw call通常控制在300左右。测试
③LOD:建筑和复杂的物件用LOD模型和远处剔除来减小同屏面数。地形的LOD系统也能够对地形的面数作很大的优化。优化
④模型的重复利用:相同的多个物件在unity内复制使用,复制的多个物体在引擎计算上算一个物体。但也不可复制太多个,太多会对内存带来很大压力。相同的物件太多,建议把几个合并成一组作为一个Object,多作几组,再进行复制。参考②。动画
⑤地形优化:若是是用unity自带的地形工具制做的地形,能够用T4M插件转化成T4M格式地形,设置一个顶点值转化后能够对地形优化不少。T4M也能够设置lod模型。spa
以我作过的一个测试为例:优化前,地形是1000*1000的。就是(1000-1)*(1000-1)=998001(面),将近100万面。转化顶点值设为100,转化后的面为19602,才近2万面。插件
①贴图大小:在移动设备上的贴图最大要控制在1024和512大小,可少许使用2048大小的贴图,以102四、512大小贴图为主。设计
②重复贴图的使用:大面积相同材质使用1-3种贴图交替重复覆盖,经过光影变化打破贴图的重复感。3d
③ 小物件的贴图合并,上文有讲,单个物体的贴图最好是一张,最多不易超过3张。相同贴图的材质球统一。htm
④ 少用透明贴图,能不用就不要用。透明贴图很是消耗GPU资源。blog
⑤支持Mipmap, Mipmap 会增长游戏包体的大小和占用必定量的内存,但在游戏中Mipmap的渲染能够减小显存带宽,下降渲染压力,随着相机的推远贴图会随之切换成低像素的体贴,从而节省资源开支。过的Mipmap使用会对内存形成很大压力,所以建议只对大物件设置Mipmap。
(unity会根据相机距离由近到远生成8张像素逐渐下降的贴图,这里只截取了5张,从左往右依次是原图至Mipmap生成的低像素贴图)
⑥小场景能够用PBR材质,用PBR材质就必定要用实时灯光才有效果。大场景避免使用PBR材质,大场景尽量用烘焙光影来达到光照效果。烘焙的场景模型就不要用法线贴图了,贴了也没效果,还占空间资源。
⑦贴图压缩,对贴图进行PVRT(Ios)或是ETC(Android)格式的压缩能够减小大量内存消耗。
⑧建议场景的材质能够用substance材质系统转成.sbsar 格式材质。 Substance材质能够大大压缩贴图数据的大小但不损失贴图质量。
以下图所示:33.8MB的.tga格式贴图制做成.Sbsar格式材质以后只有3.8MB。
一、灯光的数量:室外开放式大场景建议只用一盏平行光。室内场景可适当多一点,室内环境能够用reflection probe来增强反射效果。
二、场景烘焙:大场景和比较复杂的室内场景要避免实时灯光的使用。利用UNITY的烘焙系统把光影烘焙成贴图来实现光影效果。烘培贴图自己是一个浩大的工程,大场景的烘培能够选择性的去烘焙。UNITY里自动分UV功能很差控制,因此通常在max\Maya里分好第2套UV,也能够直接在max\Maya里烘焙好lightmap导入到unity里。
UNITY提供了混合模式灯光,因此咱们能够用混合灯光来实现LIGHTMAP与实时灯光结合。既:一个大场景中,大件如建筑、地形占据画面较大的物件烘焙lightmap,小物件繁多,占据画面的面积很小能够不用烘焙,把灯光设置为mixed模式。
①摄像机上少用镜头效果,有选择性的使用。
②特殊的Shader慎用。
③美术资源的优化能够从最先设定场景的时候就开始考虑。如ARPG游戏的关卡根据状况能用管道式的场景就避免设定成全开放式的室外场景。
(这是仙剑奇侠传5的场景和地图,根据剧情须要着重制做路径两边的场景,其余地方利用障碍遮挡,使玩家不能过去,就能够归纳简化交代一下。)
④在陆地上玩为主的游戏就避免设计飞到空中的设计。在近空俯视场景很是耗资源。
⑤开放式大场景中从设计上就要避免有过多的可破坏性物件,场景中可交互的点要清晰,避免大而全的设计,要注意取舍。
(这也是仙剑奇侠传的一个小镇场景,可交互的点很清晰,其余建筑NPC交互就可简化制做或者不作交互。)
我作过的一个场景优化测试的数据以下:
优化前:
一、这个场景使用UNITY自带地形,上面有大量的植被草地,30多栋废弃建筑,地上和建筑上有繁多的植被野草、废纸、酒瓶、石块等,横竖大小10条街道左右,街上有大量路灯、路牌、油桶等细节。
二、场景自己用了LOD系统。
三、整体面数在200多万。小物件在15000多个。
在PC上跑起来帧数只有40多帧,在835芯片手机上画面严重卡顿,跳帧严重。
优化方案:
一、把地形用T4M插件转化成T4M格式,大规模减小远处树木植被。优化下来提升了5帧左右。
二、街道上的小物件删减和合并,原场景中界面上小物件过多,路灯过密,作了适当删减,对小范围内的小物件模型进行模型和贴图的合并。大概提升7帧左右
三、透明贴图的减小,原场景是废墟,因此建筑上用了大量的透明题图作藤蔓,对渲染消耗太大,进行适度删减,大概删掉一半,提升10帧左右。
四、对建筑,街道和大地形、大物件进行了lightmap烘焙。小物件用灯花的混合模式实时照明。大概提升30帧左右
五、减小原场景中的镜头特效。原场景中镜头特效用了7个,关掉了Antialiasing As Post Effect、Vignetting、SSAO三个镜头效果,这三个特效对画面影响较小,大概提升了10帧左右。
最终优化后面数为70多万面。FPS为100帧左右。
总结:
美术场景资源的优化主要从模型、贴图、灯光、特效等方面去着手,对应的是提升CPU、GPU、内存等硬件的使用效率。优化的细节还有不少,好比场景特效可尽可能用动画去实现,避免过多的粒子特效,场景的碰撞体单独用建模去作不要用unity默认的碰撞体等等。一个游戏的后期优化是多方面的,包括场景、角色、动做、特效、音效、动画、AI及程序运算等等,场景上能多优化一点,就能够给其余资源让出一点空间。