• SRPBatcher优化的原理


    之前只是粗糙的看了一下SRP渲染管线,做出了只是加上了自定义,没什么免费的优化的论断,今天偶然翻到SRPBatcher,打脸了,发现还是有免费的优化的,就了解了一下原理,记录如下。

    1.在过去的渲染架构中,Unity采取对一个材质分配一个CBuffer(or 一个Pass,这不是重点),这个CBuffer 包括shader里的显性的参数(你自己定义的uniform参数)和隐性的参数(unity固定的uniform modelMatrix,modelviewMatrix之类。),所以每一次drawcall,要更新这个CBuffer

    2.在SRP渲染架构中,Unity采取的策略是对一个材质分配一个半CBuffer,为什么是一个半呢?首先shader的显性参数分配到一个CBuffer里,shader的隐性参数则是N个物体共享一个CBuffer。

    比如一个shader 对应 10个物体,在SRP渲染架构中,一共分配了11个CBuffer,其中10个分别存这10个物体材质中定义的显性参数。然后分配一个大的CBuffer,把这10个物体的modelMatrix这类隐性参数都放在一起。

    乍一看这不是负优化吗?老架构更新10个CBuffer,你现在更新11个。

    这个策略叫做动静分离,材质的显性参数大部分都是低频更新的(你总不能一个游戏所有的材质参数每桢都改变吧),所以在理想情况下,这10个放显性参数的CBuffer就基本不修改。而modelMatrix之类的隐性参数是高频更新的,很多模型会动来动去。他们被批量放在一个CBuffer里,一次更新可以更新一片。

    以上,据Unity官方宣传 SRP Batcher 可以取得 1.2~4 倍的 CPU渲染时间提升(仅提升CPU部分,不是渲染耗时提升这么多,还得看cpu瓶颈占多大比重)

  • 相关阅读:
    状压DP
    string
    hdu3068
    HDU Stealing Harry Potter's Precious(状压BFS)
    状压BFS
    BFS+打印路径
    poj Meteor Shower
    C语言-无符号数与有符号数不为人知的秘密
    keras_实现cnn_手写数字识别
    python_plot画图参数设置
  • 原文地址:https://www.cnblogs.com/crazylights/p/13686609.html
Copyright © 2020-2023  润新知