| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> Unity Shader - shader lab 的 SRP Batcher compatible 兼容性(未使用 RenderDoc 验证 API) -> 正文阅读 |
|
[游戏开发]Unity Shader - shader lab 的 SRP Batcher compatible 兼容性(未使用 RenderDoc 验证 API) |
文章目录Inspector 中的 SRP Batcher : compatible or notBuilt-in RP 下,shader 的 Inspector 视图中是不会显示此项内容的 必须是在基于 SRP 的才会显示 如何将当前项目设置为 SRP 呢: 可以是 HDRP,UDP(这两者都是基于 SRP 的预定制版本),或是你自己实现的 SRP吗,如下图: 这样 Shader Inspector 中才会显示:SRP Batcher : Compatible 与否 有篇文章讲的很详细,其中有讲到 SRP Batcher 兼容性问题:SRP Batcher: Speed up your rendering! SRP Batcher 的合批原理SRP Batcher 合拼并不是减少 DC(DrawCall),而是为了减少 SetPassCall,因为 SetPassCall 多了的话很耗费 CPU 时间。什么是 SetPassCall,可以参考我之前的一篇:Unity - DrawCall, Batch, SetPassCall区别 因为我们在绘制前,以 OpenGL 为例,就是在调用 OpenGL 为了减少 SetPassCall 的数量,用上了 cbuffer 之类的 buffer 机制,将数据一直保存在 GPU 内存中 所以我们在 自定义 Shader 的 Properties 中定义的数据一般都放在 一些 而且当有修改的时候才重新上传这部分数据(后续有空我会使用 RenderDoc + Unity 来验证),而一些静止不动的对象对应的 CBUFFER 都没有修改,就压根不会去 update + upload,这可以省下非常多的 SetPassCall,尤其是一些大场景更加 而 Unity 文档中都会写着类似的描述,我用 Cnglish 来表达:When Buffer Data Change, we will quickly update the buffer and upload. 所以 SRP Batcher 的条件就是将 uniform 划分到对应的 CBuffer 块即可,怎么划分上面有讲,这里再次强调:逐对象放: 怎么 Quickly Update那么如何个 quickly 法?我猜就是一个 parrallex job (并行)线程来处理 将每个 PerDraw 的CBuffer 使用 索引来定位每个绘制对象的数据,这样再 parrallex job 中并行更新数据就使用 索引获取、设置即可,即可避免 多线程竞态的消耗问题 PerFrame 也就是我们的每帧绘制时的全局数据,也是当有改变的时候才上传,而且这部分内容就全局仅有一份,设置起来也不用多线程,直接 update, upload 即可 要充分发挥 SRP Batcher,那么场景中应用的 shader 变体数据尽量的少,因为 shader 不同,以为着 cbuffer 就有可能不同,那么是不能通过减少 cbuffer 更新的方式来优化的 Shader 变体数量尽可能少所以 unity 也是建议我们写一个 Uber Shader,何为 Uber ,就是超级 shader 的意思,其中包含很多的功能,基于涵盖场景中大部分绘制对应即可,那么 SRP Batcher 发挥的作用就越大 总结说到合批一般都有:
References |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/28 2:28:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |