当前位置: 首页 > news >正文

Unity中URP Shader 的 SRP Batcher

文章目录

  • 前言
  • 一、SRP Batcher是什么
  • 二、SRP Batcher的使用条件
    • 1、可编程渲染管线
    • 2、我们用URP作为例子
    • 3、URP 设置中 Use SRP Batcher开启
    • 4、使 SRP Batcher 代码路径能够渲染对象
    • 5、使着色器与 SRP Batcher 兼容:
  • 三、不同合批之间的区别
    • BuildIn Render Pipeline下:
    • Universal Render Pipeline下:
  • 四、对比 BRP 和 SRP 每一批次渲染间的区别
    • 1、BRP下
    • 2、SRP下(CPU部分就是SRP的核心)
    • 在这里插入图片描述
  • 五、在Unity中,测试一下开启 和 不开启 SRP Batcher的效果
    • 1、不开启 SRP Batcher(需要关闭HDR)
    • 2、开启SRP Batcher


前言

在上一篇文章中,我们知道了使用了常量寄存器CBUFFER才可以被允许SRP Betcher。

  • Unity中 URP Shader 常量缓冲区CBUFFER

我们在这篇文章中,了解一下SRP Batcher是什么。


一、SRP Batcher是什么

  • SRP Batcher 是一个渲染循环,可通过许多使用同一着色器变体的材质来加快场景中的 CPU 渲染速度。

  • Unity帮助文档


二、SRP Batcher的使用条件

1、可编程渲染管线

  • URP
  • HDRP
  • 自定义 SRP

2、我们用URP作为例子

  • 保证项目使用了URP
    在这里插入图片描述

3、URP 设置中 Use SRP Batcher开启

  • 打开Inspect面板的Debug模式
    在这里插入图片描述
  • 确保 Use SRP Batcher 开启
    在这里插入图片描述

4、使 SRP Batcher 代码路径能够渲染对象

  • 渲染的对象必须是网格或蒙皮网格。该对象不能是粒子。
  • 着色器必须与 SRP Batcher 兼容。HDRP 和 URP 中的所有光照和无光照着色器均符合此要求(这些着色器的“粒子”版本除外)。
  • 渲染对象不得使用 MaterialPropertyBlocks。

5、使着色器与 SRP Batcher 兼容:

  • 必须在一个名为“UnityPerDraw”的 CBUFFER 中声明所有内置引擎属性。例如:unity_ObjectToWorld 或 unity_SHAr。
  • 必须在一个名为 UnityPerMaterial 的 CBUFFER 中声明所有材质属性。即上篇文章的常量缓冲区

CBUFFER_START(UnityPerMaterial)
half4 _Color;
CBUFFER_END

在这里插入图片描述


三、不同合批之间的区别

BuildIn Render Pipeline下:

  1. Static Batching(静态合批)
  • Unity中Batching优化的静态合批
    通常用在场景烘培中使用。
    需要满足:同一个材质球、可以使用不同的网格、必须勾选静态合批
  1. Dynamic Batching(动态合批)
  • Unity中Batching优化的动态合批
    需要满足:同一个材质球、可以使用不同的网格、有225个顶点的单个模型顶点数限制
  1. GPU Instancing(GPU实例化)
  • Unity中Batching优化的GPU实例化整理总结
    需要满足:必须要有相同的网格、可以使用不同的材质球属性、必须为同一个Shader

Universal Render Pipeline下:

SRP Batcher(SRP合批)
需要满足:上面所说的 SRP Batcher 的使用条件


四、对比 BRP 和 SRP 每一批次渲染间的区别

1、BRP下

在这里插入图片描述

2、SRP下(CPU部分就是SRP的核心)

在这里插入图片描述

五、在Unity中,测试一下开启 和 不开启 SRP Batcher的效果

  • 在Unity中,准备这样一个场景用于测试,4个物体使用了同一Shader的不同材质球
    在这里插入图片描述

1、不开启 SRP Batcher(需要关闭HDR)

在这里插入图片描述

在这里插入图片描述
4个对象用了4个批次

2、开启SRP Batcher

在这里插入图片描述
只用了一个批次

http://www.lryc.cn/news/260535.html

相关文章:

  • 十四 动手学深度学习v2计算机视觉 ——转置矩阵
  • Spark-Streaming+Kafka+mysql实战示例
  • C++改写为C
  • 抖去推--短视频剪辑、矩阵无人直播saas营销工具一站式开发
  • HBase 详细图文介绍
  • Hanlp自然语言处理如何再Spring Boot中使用
  • MySQL 是什么?
  • yarn link使用(npm link)
  • Docker容器讲解
  • three.js模拟太阳系
  • WPF仿网易云搭建笔记(1):项目搭建
  • DDOS 攻击是什么?有哪些常见的DDOS攻击?
  • 未来应用从何而来:认知力延伸、边界突破、回归云与产业
  • vue零基础
  • html中一个div中平均一行分配四个盒子,可展开与收起所有的盒子
  • Python虚拟环境指南:告别依赖地狱
  • 【Jeecg Boot 3 - 第二天】第2节 前后端docker部署云服务器
  • 2020年第九届数学建模国际赛小美赛A题自由泳解题全过程文档及程序
  • 双端队列和优先级队列
  • c#读取CSV文件跟Excel导入成DataTble
  • Python编程技巧 – 单字符函数
  • xcode-文件
  • 云原生之深入解析网络服务Istio、eBPF和RSocket Broker
  • 文件系统和磁盘调度
  • C++ stringOJ练习题
  • 解决问题:ImportError: cannot import name ‘_update_worker_pids‘
  • 【面试总结】Java面试题目总结(一)
  • 大白话数据中台,何为数据中台
  • escapeshellarg参数绕过和注入的问题
  • CSS——标准流、浮动、Flex布局