zoukankan      html  css  js  c++  java
  • 好插件让你事半功倍!【资源篇】

    工欲善其事必先利其器。在Unity官网的Asset Store上有不少给力的资源插件,能帮助我们减少人力资源消耗的同时,更快更好地驾驭引擎。今天我们就从善用资源的角度,推荐两款Unity热门插件,并介绍其使用技巧。


    Mesh Baker

    我们在项目开发的时候经常会大量使用大规模的Mesh,导致Draw Call过高。而Mesh Baker扮演了网格烘焙器的角色,其工作原理是将网格和材质合并,从而降低渲染的Draw Call。

    下面,我们就来谈谈使用方法:

    Texture Packing

    我们常常会遇到角色网格相似,但是纹理繁杂细碎的情况。这时我们需要把纹理合并在同一张图上。纹理拼合的操作面板如下图所示:选择不同的网格来拼合,Texture Baker自动分析其Shader,Size等属性,最后点击Bake Material Into Combined Material,即可完成拼合。

    UWA Tech Doc

    Mesh Batching

    在纹理拼合后已经形成为一张图片了,这时候我们需要进行Mesh拼合,即使用Mesh Baker来烘焙网格。在此,我们新建一个新的GameObject,点击Bake就把3个Mesh烘焙在一个Object上了。

    UWA Tech Doc

    同时,在进行了这两步之后,我们会发现Draw Call上的变化。

    合并前

    UWA Tech Doc

    合并后

    UWA Tech Doc

    不难发现,合并前12个Draw Call,合并后只有2个,从而在一定程度上降低渲染压力。

    对Skinned Mesh进行拼合

    Unity引擎无法原生支持蒙皮网格的Draw Call Batching,而Mesh Baker能将多个Skinned mesh合并。

    UWA Tech Doc

    UWA Tech Doc

    经过合并后,人物的材质已经相同,所以我们能在上图中看到这些角色只产生了一个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中都可以使用,同时开放了源码,大家可以根据项目的实际情况而作修改。

    UWA Tech Doc

    我们拿以下原始模型来举例:

    UWA Tech Doc

    合并模型

    打开插件后有如下一些选项:点击Merge child meshes

    UWA Tech Doc

    我们知道Unity支持的网格顶点数不能超过65536,但是当我们把很多物体合成一个Mesh时很可能会超过这个限制。而这个插件会针对这种情况进行自动处理,可以看到下图中的两辆车Merge后成Merged part1和Merged part2 。

    UWA Tech Doc

    烘焙Atlas

    下图是Texture packing,根据模型的Material自动把不同类型的Texture分类显示出来,在合并的时候,会自动把同类型的Texture合并。

    UWA Tech Doc

    合并之后的效果对比:Draw Call数量由原来的136降至24个。

    UWA Tech Doc

    模型简化

    选择了模型之后,点击Simplify mesh,它会尽可能在保持原样的基础上简化网格。如下图,汽车模型的网格面片数从六万多顶点数减少到了两万七。

    UWA Tech Doc

    UWA Tech Doc

    同时,它也能自动生成不同级别的LOD。这里有6层LOD(从大到小),点击Bake LOD后它会自动计算,不需要大家手动操作。我们可以通过更改脚本达到希望的效果。

    UWA Tech Doc

    UWA Tech Doc

    如下就是使用了SimpleLOD后的效果。该插件最大的特色即是对Skinned mesh动画角色网格提供了很好的支持。

    UWA Tech Doc

    UWA Tech Doc

    以上是我们今天推荐的插件,但愿能在资源优化中祝你一臂之力。今后我们将会结合以往的行业服务经验,为您推荐更多高效的开发利器,尽情关注!

  • 相关阅读:
    SpringBoot集成Mybatis
    SpringBoot环境搭建
    阻止a标签的默认行为有哪几种方法
    mouseover 和mouseenter的区别;冒泡与捕获的区别;冒泡与捕获的如何阻止
    操作dom
    谷歌火狐,IE8以及其他浏览器获取页面滚动出去的距离以及封装
    return的返回值
    js进阶之js三大家族:offset,scroll,client
    固定导航栏,获取页面可视区域的大小,响应式布局,事件对象极其三大坐标系
    document.write,innerHTML,createElement三者的区别
  • 原文地址:https://www.cnblogs.com/lancidie/p/6258225.html
Copyright © 2011-2022 走看看