好插件让你事半功倍!【资源篇】
工欲善其事必先利其器。在Unity官网的Asset Store上有不少给力的资源插件,能帮助我们减少人力资源消耗的同时,更快更好地驾驭引擎。今天我们就从善用资源的角度,推荐两款Unity热门插件,并介绍其使用技巧。
Mesh Baker
我们在项目开发的时候经常会大量使用大规模的Mesh,导致Draw Call过高。而Mesh Baker扮演了网格烘焙器的角色,其工作原理是将网格和材质合并,从而降低渲染的Draw Call。
下面,我们就来谈谈使用方法:
Texture Packing
我们常常会遇到角色网格相似,但是纹理繁杂细碎的情况。这时我们需要把纹理合并在同一张图上。纹理拼合的操作面板如下图所示:选择不同的网格来拼合,Texture Baker自动分析其Shader,Size等属性,最后点击Bake Material Into Combined Material,即可完成拼合。
Mesh Batching
在纹理拼合后已经形成为一张图片了,这时候我们需要进行Mesh拼合,即使用Mesh Baker来烘焙网格。在此,我们新建一个新的GameObject,点击Bake就把3个Mesh烘焙在一个Object上了。
同时,在进行了这两步之后,我们会发现Draw Call上的变化。
合并前
合并后
不难发现,合并前12个Draw Call,合并后只有2个,从而在一定程度上降低渲染压力。
对Skinned Mesh进行拼合
Unity引擎无法原生支持蒙皮网格的Draw Call Batching,而Mesh Baker能将多个Skinned mesh合并。
经过合并后,人物的材质已经相同,所以我们能在上图中看到这些角色只产生了一个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中都可以使用,同时开放了源码,大家可以根据项目的实际情况而作修改。
我们拿以下原始模型来举例:
合并模型
打开插件后有如下一些选项:点击Merge child meshes
我们知道Unity支持的网格顶点数不能超过65536,但是当我们把很多物体合成一个Mesh时很可能会超过这个限制。而这个插件会针对这种情况进行自动处理,可以看到下图中的两辆车Merge后成Merged part1和Merged part2 。
烘焙Atlas
下图是Texture packing,根据模型的Material自动把不同类型的Texture分类显示出来,在合并的时候,会自动把同类型的Texture合并。
合并之后的效果对比:Draw Call数量由原来的136降至24个。
模型简化
选择了模型之后,点击Simplify mesh,它会尽可能在保持原样的基础上简化网格。如下图,汽车模型的网格面片数从六万多顶点数减少到了两万七。
同时,它也能自动生成不同级别的LOD。这里有6层LOD(从大到小),点击Bake LOD后它会自动计算,不需要大家手动操作。我们可以通过更改脚本达到希望的效果。
如下就是使用了SimpleLOD后的效果。该插件最大的特色即是对Skinned mesh动画角色网格提供了很好的支持。
以上是我们今天推荐的插件,但愿能在资源优化中祝你一臂之力。今后我们将会结合以往的行业服务经验,为您推荐更多高效的开发利器,尽情关注!
相关文章
- grunt-inline:一个资源内嵌插件
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
- SpringBoot关于默认静态资源访问路径定义及自定义设置
- java读取资源文件的五种方式
- 《C#多线程编程实战(原书第2版)》——1.11 使用Monitor类锁定资源
- 如何举报资源?
- Qt释放线程资源的一些工程上的方法.md
- 构建多页面应用——静态资源的处理
- 详解Android插件化开发-资源访问
- 游戏开发入门终极指南(技术资源大合集)
- 安卓插件化课程-第五篇:插件中的activity使用插件中资源
- 墙裂推荐 iOS 资源大全
- 将在线图片转换成base64踩坑记录及静态资源跨域及缓存的处理
- Unity 工具 之 常用插件分类汇总(UI/VR/AR/建模/Shader/动画/网络/AI/资源/数据/区块链等)