美文网首页
动态合批和静态合批的区别

动态合批和静态合批的区别

作者: APP4x | 来源:发表于2020-09-08 11:01 被阅读0次

    参考文章:
    图形渲染及优化—Unity合批技术实践
    图形渲染及优化—Batch

    批是啥?
    对某对象进行批量处理叫批处理

    Batch是啥?
    引擎每帧提交的Batch数量就是衡量渲染压力的指标
    Batch就是调用一次API的绘制接口向GPU提交相同渲染状态的一定数量的三角形的行为
    接口:OpenGL的glDrawArrays/glDrawElements
    Batch等于一堆打包后的Draw call

    什么叫合批:
    以中性能优化的方式
    将多次绘制请求,在允许的条件下进行合并处理,减少CPU对GPU绘制请求的次数

    怎么开启?

    1.静态合批(static batch)
    将static的静态物体(永远不会移动、旋转和缩放) ,如果相同材质球,面数在xx之内。unity会自动合并成一个batch送往GPU处理
    (64k顶点和64k索引)

    使用静态合批需要额外的内存开销来存储合并后的几何数据。
    如果一些物体共用了同样的几何数据,那么引擎会在编译以及运行状态对每个物体创建一个几何数据备份

    如果static物体过大,应该注意内存开销

    原理:
    1.自动提取这些静态模型的 VertexBuffer和IndexBuffer
    2.根据其在场景中的位置等最终状态信息,将这些模型的顶点数据变换到世界空间下
    3.重新构建大的VertexBuffer和IndexBuffer
    4.记录每一个子模型的IndexBuffer数据在构建大的IndexBuffer的起始以及结束位置

    2.动态合批(dynmaic batch)
    如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行处理(动态批处理是自动完成的)

    注意:
    1.动态批处理物体需要在每个顶点上进行一定开销,动态批处理仅支持小于900顶点的网格物体(不知道现在啥样了)
    2.如果着色器使用顶点位置,法线和UV值三种属性,只能批处理300顶点以下的物体;如果着色器需要使用顶点位置,法线,UV0,UV1和切向量,只能批处理180顶点以下的物体
    3.不能使用缩放尺度(scale),缩放不同的物体不能进行批处理;统一缩放尺度的物体不会与非统一缩放尺度的物体进行批处理,eg:(1,1,1)和(1,2,1)不会批处理,(1,2,1)和(1,3,1)可以进行批处理
    4.使用不同材质的实例化物体将会导致批处理失败


    主要区别:
    1.静态的不会再改了,动态的改了也能和
    2.动态的比较费,只能和小的
    3.本质上静态合批是用内存给GPU降低压力,动态合批是拿CPU给GPU降低压力

    相关文章

      网友评论

          本文标题:动态合批和静态合批的区别

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