美文网首页
SRBatch和GPUInstance的渲染比较

SRBatch和GPUInstance的渲染比较

作者: 暴走TA | 来源:发表于2021-01-22 15:50 被阅读0次

    简介: 对SRBatch的性能和GPUInstance的性能想做个比较于是做了如下渲染分析,可能有环境因素分析错了,目前临时做个笔记

    测试环境:Unity2019.4.18
    测试手机:黑鲨3 865的U

    环境

    在满屏幕绘制使用13个材质铺满全屏的物体,尽量错开摆放,使其全部都能参与渲染。
    着色器 一个支持instance 一个支持 srbatch 其余逻辑一致

    测试结果

    FrameDebug 对比分析

    参数名称 SRBatch Gpuinstancing
    渲染时间 14-22 ms 18-21 ms
    渲染消耗最高值 24 ms 25 ms
    脚本占用时间 10-11 ms 8-11 ms
    脚本占用峰值 16 ms 15 ms
    DrawCall 36 265

    可以看出 frameDebug 中的dc 数量有明显的减少,由于手机性能太好,所以 渲染时间差距不大

    RenderDoc 对比分析

    SRBatch 渲染时间
    SRBathc 统计数据
    SRBatch 合批绘制方式
    Instance渲染时间
    Instance统计数据
    Instance合批渲染方式
    参数名称 SRBatch Gpuinstancing
    单帧耗时 113136 us 42215 us
    RenderOpaques 105407 us 35116 us
    DrawCalls 2973 370
    APICalls 4003 3903
    DrawCallRatio 1.35 10.55
    Buffers 数量 163个 1056
    Buffer 内存占用 3.19MB 11.07MB
    • 可以看出 SRBatch 的单帧渲染时间将近是 Instance的渲染时间的 三倍,其中最大的区别就是,在FrameDebug中 SrBatch 的 DC 统计数量是36,而在 RenderDoc中这个数量是 2973。而这其中的猫腻,就在与 Instance方式调用的绘制方式 有一部分是glDrawElementsInstanced(),而 SRBatch 则是实打实的每一个都调用了 glDrawElements();
    • 在 RenderDoc 中 SRBatch 占用的 buffer数量和内存都有了大幅度的减少,但是绘制次数 确实每一个物体都会绘制,虽然每一个绘制都比较短,但是数量太大。

    结论

    目前看来数量太多的时候 srbatch 并不一定可以提升效率,至于为何 在合批绘制时没有使用 glDrawElementsInstanced 要待验证。

    相关文章

      网友评论

          本文标题:SRBatch和GPUInstance的渲染比较

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