http://www.jianshu.com/p/a357b1c18ddc
工欲善其事必先利其器。在Unity官网的Asset Store上有不少给力的资源插件,能帮助我们减少人力资源消耗的同时,更快更好地驾驭引擎。今天我们就从善用资源的角度,推荐两款Unity热门插件,并介绍其使用技巧。
Mesh Baker
我们在项目开发的时候经常会大量使用大规模的Mesh,导致Draw Call过高。而Mesh Baker扮演了网格烘焙器的角色,其工作原理是将网格和材质合并,从而降低渲染的Draw Call。
下面,我们就来谈谈使用方法:
Texture Packing
我们常常会遇到角色网格相似,但是纹理繁杂细碎的情况。这时我们需要把纹理合并在同一张图上。纹理拼合的操作面板如下图所示:选择不同的网格来拼合,Texture Baker自动分析其Shader,Size等属性,最后点击Bake Material Into Combined Material,即可完成拼合。
![](http://upload-images.jianshu.io/upload_images/2372757-2d6e8f69ba610907.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
Mesh Batching
在纹理拼合后已经形成为一张图片了,这时候我们需要进行Mesh拼合,即使用Mesh Baker来烘焙网格。在此,我们新建一个新的GameObject,点击Bake就把3个Mesh烘焙在一个Object上了。
![](http://upload-images.jianshu.io/upload_images/2372757-1a6baf35f13667f9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
同时,在进行了这两步之后,我们会发现Draw Call上的变化。
合并前
![](http://upload-images.jianshu.io/upload_images/2372757-897a9a315d99ce31.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
合并后
![](http://upload-images.jianshu.io/upload_images/2372757-b3cb16fb95c53718.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
不难发现,合并前12个Draw Call,合并后只有2个,从而在一定程度上降低渲染压力。
对Skinned Mesh进行拼合
Unity引擎无法原生支持蒙皮网格的Draw Call Batching,而Mesh Baker能将多个Skinned mesh合并。
![](http://upload-images.jianshu.io/upload_images/2372757-7af6f3c22ba35e05.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/2372757-721d90c372579955.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
经过合并后,人物的材质已经相同,所以我们能在上图中看到这些角色只产生了一个Draw Call。同理,即使再加入更多的角色也能合并成非常少的Draw Call,从而减少渲染耗时。
除此之外, Mesh Baker还支持将Mesh Renderer与Skinned Mesh Renderer一起合并。比如开发中常用到的道具如帽子、剑等,使得角色在换装时也只产生一个Draw Call,非常实用。
在使用skinnedmesh时有几个注意点:
合并后将原始模型的Bone保持Active;
Disable原始模型的Skinned Mesh Renderer;
确保原始的Animation始终在运行;
如果需要Mesh Rendering与Skinned Mesh 一起合并,则需要保证在其在同一张Texture Atlas和Mesh容器中。
SimpleLOD
除了Mesh Baker,另一个插件SimpleLOD也比较适合大规模场景的制作开发。在处理多人在线的项目(如MMO游戏)时,按照我们以往的优化方法是尽可能降低Draw Call和减少渲染消耗,在远处使用低级LOD,在Run-time时根据相机距离切换合适的LOD,使得在手机性能有限的情况下尽量渲染更多的角色,达到更好的效果。
而SimpleLOD恰好可以满足这一点,除了同样拥有Mesh Baker所具有的Mesh合并、Atlas烘焙等功能,它还能提供Mesh的简化(Mesh Baker无法提供),并对动态蒙皮网格进行了很好的支持。该插件可在Run-time和Editor中都可以使用,同时开放了源码,大家可以根据项目的实际情况而作修改。
![](http://upload-images.jianshu.io/upload_images/2372757-8f8fe5239d8e3feb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我们拿以下原始模型来举例:
![](http://upload-images.jianshu.io/upload_images/2372757-1255179dfedc5e5f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
合并模型
打开插件后有如下一些选项:点击Merge child meshes
![](http://upload-images.jianshu.io/upload_images/2372757-741ba92d17557705.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我们知道Unity支持的网格顶点数不能超过65536,但是当我们把很多物体合成一个Mesh时很可能会超过这个限制。而这个插件会针对这种情况进行自动处理,可以看到下图中的两辆车Merge后成Merged part1和Merged part2 。
![](http://upload-images.jianshu.io/upload_images/2372757-c4dea9e5b404b19d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
烘焙Atlas
下图是Texture packing,根据模型的Material自动把不同类型的Texture分类显示出来,在合并的时候,会自动把同类型的Texture合并。
![](http://upload-images.jianshu.io/upload_images/2372757-df42cca82efe0e12.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
合并之后的效果对比:Draw Call数量由原来的136降至24个。
![](http://upload-images.jianshu.io/upload_images/2372757-54ef8ff3b5b20b0e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
模型简化
选择了模型之后,点击Simplify mesh,它会尽可能在保持原样的基础上简化网格。如下图,汽车模型的网格面片数从六万多顶点数减少到了两万七。
![](http://upload-images.jianshu.io/upload_images/2372757-4ebb9649a7437387.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/2372757-b028f646fa9f2e86.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
同时,它也能自动生成不同级别的LOD。这里有6层LOD(从大到小),点击Bake LOD后它会自动计算,不需要大家手动操作。我们可以通过更改脚本达到希望的效果。
![](http://upload-images.jianshu.io/upload_images/2372757-5faa1bcae977c61e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/2372757-e39bb64c8a65fe9a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
如下就是使用了SimpleLOD后的效果。该插件最大的特色即是对Skinned mesh动画角色网格提供了很好的支持。
![](http://upload-images.jianshu.io/upload_images/2372757-0ea23b2d612962c7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/2372757-a9cc67735f9f078b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
以上是我们今天推荐的插件,但愿能在资源优化中祝你一臂之力。今后我们将会结合以往的行业服务经验,为您推荐更多高效的开发利器,尽情关注!
作者:VR设计云课堂
链接:http://www.jianshu.com/p/a357b1c18ddc
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。