美文网首页程序员
优化UE4性能 、减少DrawCall——材质中使用自定义基元数

优化UE4性能 、减少DrawCall——材质中使用自定义基元数

作者: 金刚豆 | 来源:发表于2020-09-04 15:00 被阅读0次

    优化UE4性能 、减少DrawCall——材质中使用自定义基元数据

    UnrealEngine减少DrawCall有很多种方法,今天分享一种使用材质自定义基元数据的方式有效减少DrawCall,优化虚幻4运行性能。

    使用自定义基元数据(CPD)工作流时,利用材质将自定义的数据存储在索引中,可以通过蓝图和代码访问并修改,功能类似与动态材质实例,可用在运行时通过标量和向量参数动态控制材质。区别在于,CPD的优势是数据存储在基元自身而非材质实例上,减少了重复几何体的绘制调用次数,减少DrawCall的数量,优化UE4游戏运行。

    本文参考官方文档https://docs.unrealengine.com/zh-CN/Engine/Rendering/Materials/CustomPrimitiveData/index.html

    本案例通过对比基元存储自定义数据 和 动态材质实例两中方案,反映使用自定义基元数据优化DrawCall,优化游戏性能方面的作用。

    范例一、创建材质、向量节点,如图,将Use Custom Primitive Data 选项勾选——使用自定义基元数据

    Primitive Data Index 表示基元数据的序号,这里使用的序号将是后面蓝图或程序调用的序号。

    创建蓝图Actor,并添加Sphere模型,将之前材质球指定该物体

    在该蓝图Actor中,对自定义基元数据进行设置,Set Custom Primitive Data Vector4,注意这里序号同材质中自定义基元的序号相同。ValueW值是1.

    范例二、

    新建材质球M_dynamic,向量节点,这次使用默认参数。如下图

    创建蓝图Actor_dynamic,同样加入sphere 模型,给它指定M_dynamic材质,并创建动态材质,设置如下

    这里ParameterName需要和材质球中vector的名称相同。

    到此,两个范例完成,可以对其进行对比,看看DrawCall的数量优化情况。

    查看DrawCall的方式,使用控制台,  ~键,实时场景统计:stat SceneRendering

        (再次输入命令,窗口消失)

    场景没有放Actor,运行ue4,DrawCall情况如下图,是4

    加入一个基元数据Actor后,DrawCall情况如下图,是8

    加入40个基元数据Actor后,DrawCall情况如下图,是66

    换做动态材质Actor,进行对比,一个也是8

    加入40个动态材质Actor后,DrawCall情况如下图,是112

    这里对比已经很明显,当Actor的数量增加,同样40个物体,一个DrawCall是66,一个是112。用自定义基元数据的物体绘制DrawCall数量比使用动态材质的物体低了近一半。且物体数量越多同样效果,通过优化材质,DrawCall少了一半,性能提升一倍。

    作者:leilei  2020.9.4  于北京

    原创不易,转载注明!

    相关文章

      网友评论

        本文标题:优化UE4性能 、减少DrawCall——材质中使用自定义基元数

        本文链接:https://www.haomeiwen.com/subject/dwkhzttx.html