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.rhkb.cn/news/218242.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

八大排序(插入排序 | 选择排序 | 冒泡排序)

在我们内存中我们一般会有一些没有顺序的数据,我们成为内排序,而今天分享八大排序的是时间复杂度为O(N^2)的插入排序,选择排序和教学意义比较强的冒泡排序。 插入排序 这是插入排序的动图,通过动图我们也…

hadoop3.3.4安装及启动

1.虚拟机的安装 此处我选择的是VMware,激活码可以百度搜索,安装过程比较缓慢,需要耐心等待 --------------------------------------------------------------------------------------------------------------------------------- 2.创建新的虚拟机…

如何使用ArcGIS Pro拼接影像

为了方便数据的存储和传输,我们在网上获取到的影像一般都是分块的,正式使用之前需要对这些影像进行拼接,这里为大家介绍一下ArcGIS Pro中拼接影像的方法,希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的…

【Spring教程29】Spring框架实战:从零开始学习SpringMVC 之 服务器响应知识全面详解

目录 1 环境准备2 响应页面3 返回文本数据4 响应JSON数据5 知识点总结 欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配…

通义千问 Qwen-72B-Chat在PAI-DSW的微调推理实践

01 引言 通义千问-72B(Qwen-72B)是阿里云研发的通义千问大模型系列的720亿参数规模模型。Qwen-72B的预训练数据类型多样、覆盖广泛,包括大量网络文本、专业书籍、代码等。Qwen-72B-Chat是在Qwen-72B的基础上,使用对齐机制打造的…

jenkins-Generic Webhook Trigger指定分支构建

文章目录 1 需求分析1.1 关键词 : 2、webhooks 是什么?3、配置步骤3.1 github 里需要的仓库配置:3.2 jenkins 的主要配置3.3 option filter配置用于匹配目标分支 实现指定分支构建 1 需求分析 一个项目一般会开多个分支进行开发,测试&#x…

ACL与NAT

目录 一、ACL (一)ACL基本理论 (二)ACL的类型 1.基本ACL 2.高级ACL 3.二层ACL (三)基本原理 (四)项目实验 通配符掩码 二、NAT (一)基本理论 &am…

PPT插件-好用的插件-PPT 素材该怎么积累-大珩助手

PPT 素材该怎么积累? 使用大珩助手中的素材库功能,将Word中的,或系统中的文本文件、图片、其他word文档、pdf,所有见到的好素材,一键收纳。 步骤:选中文件,按住鼠标左键拖到素材库界面中&…

使用React实现随机颜色选择器,JS如何生成随机颜色

背景 在标签功能中,由于有「背景色」属性,每次新增标签时都为选择哪种颜色犯难。因此,我们思考如何通过JS代码生成随机颜色,提取一个通用的随机颜色生成工具,并基于React框架封装随机颜色选择器组件。 实际效果 原理…

前端面试CSS知识点

目录 前言 一、块级元素、行内元素和行内块元素的区别 1. 块级元素-display:block 1.1.1 常见的块级元素 1.1.2 块级元素的特点 2. 行内元素-display-inline 2.1.1 常见的行内元素 2.1.2 行内元素的特点 3. 行内块元素-display:inline-block 3.1.1 常见的行内块元素 3.1.2 行内…

大数据讲课笔记1.2 Linux用户操作

文章目录 零、学习目标一、导入新课二、新课讲解(一)用户账号管理1、用户与用户组文件2、用户账号管理工作 (二)用户操作1、切换用户(1)语法格式(2)切换到普通用户(3&…

什么是rocketmq❓

在大规模分布式系统中,各个服务之间的通信是至关重要的,而RocketMQ作为一款分布式消息中间件,为解决这一问题提供了强大的解决方案。本文将深入探讨RocketMQ的基本概念、用途,以及在实际分布式系统中的作用,并对Produc…

Kafka-客户端使用

理解Kafka正确使用方式 Kafka提供了两套客户端API,HighLevel API和LowLevel API。 HighLevel API封装了kafka的运行细节,使用起来比较简单,是企业开发过程中最常用的客户端API。 LowLevel API则需要客户端自己管理Kafka的运行细节&#xf…

车载以太网笔记

文章目录 以太网协议分层协议中间设备子网掩码物理层测试内容比较杂,后续会整理。 以太网协议分层 协议 中间设备

国产Apple Find My「查找」认证芯片-伦茨科技ST17H6x芯片

深圳市伦茨科技有限公司(以下简称“伦茨科技”)发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家,该平台提供可通过Apple Find My认证的Apple查找(Find My)功能集成解决方案。…

UG NX二次开发(C++)-库缺少需要的入口点的原因与解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、“库缺少需要的入口点”错误展示3、可能出现的原因与解决方案3.1 对于采用CTRL+U方式调用3.2 对于menu菜单下调用1、前言 在UG NX二次开发过程中,有时会遇到形形色色的bug,比如有个读…

C++使用回调函数的两种方式

一.函数指针 #include <iostream>typedef void (*callback)(int ,int); class MyTest { public:void setCallback(callback cb){m_callback = cb;}void add(int a, int b){m_callback(a, b);}private:callback m_callback; };void onCallback(int a, int b) {std::cout …

python每日学11:xpath的使用与调试

背景&#xff1a;最近在使用selenium 模拟浏览器作一些常规操作&#xff0c;在使用selenium的过程中接触到的一种定位方法&#xff0c;叫xpath, 这里说一下使用心得。 首先&#xff0c;我觉得如果只是简单使用的话是不用详细了解具体的语法规则的。 一、xpath怎么用&#xff1…

牛客网BC107矩阵转置

答案&#xff1a; #include <stdio.h> int main() {int n0, m0,i0,j0,a0,b0;int arr1[10][10]{0},arr2[10][10]{0}; //第一个数组用来储存原矩阵&#xff0c;第二个数组用来储存转置矩阵scanf("%d%d",&n,&m); if((n>1&&n<10)&&am…

Vue 组件传参 emit

emit 属性&#xff1a;用于创建自定义事件&#xff0c;接收子组件传递过来的数据。 注意&#xff1a;如果自定义事件的名称&#xff0c;和原生事件的名称一样&#xff0c;那么只会触发自定义事件。 setup 语法糖写法请见&#xff1a;《Vue3 子传父 组件传参 defineEmits》 语…