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

SRP合批问题

1)SRP合批问题
​2)多个Base相机渲染到同一个渲染目标,移动平台花屏的问题
3)粒子系统对GPU Instancing的支持
4)如何修改URP下场景和UI分辨率分离(不需要改颜色空间)


这是第327篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

Rendering

Q:在项目中,场景都是用SRP进行合批,SRP合批的要求是相同Shader且Keyword相同,但是通过实践发现,其实还有其他比如Cull Off或者Back就会影响不能合批。

因此有2个问题:
1. 除了上面提到的Cull和Keywords,大家还有遇到什么情况不能合批吗?
2. 这种Cull不能合批,大家是否有一些巧妙的经验,在不影响性能(如Cull都改成Off)的情况下,尽可能合批?

对于第二点,Cull这种,尝试都变成Back,这样背面会裁剪,但是有时候个别物体会Off,就没办法解决了,还有其他方案吗?

A1:使用了不同材质的物体之间位置穿插也会导致合批失败。

举例说明,假如场景中有三个Shader,分别是A、B、C。使用这种Shader的物体各三个,一共九个物体随意摆放在场景中,让它们之间的位置穿插在一起,按理说是三个SRP Batch就可以完成的事情,硬是会被分成4-6个SRP Batch,因为不同的穿插顺序会导致不同数量的Batch。

同时想问一下有什么办法使得它们即使位置有穿插也能只使用3个SRP Batch就完成?

感谢Fantic-Xush@UWA问答社区提供了回答

A2:合批是要把使用相同属性材质的渲染对象提交一次设置请求,这就要求在渲染过程中不能有状态改变,你的截图中的这几项就代表多个属性,只要其中一项有变化,那就会中断合批。属性一样是硬性要求,剩下的就是开发者设置自定义的渲染顺序。

像多个物体因为位置不同导致的合批失败,如果物体是透明的,为了透明功能正确会根据远近来确定渲染顺序。如果是不透明物体也可能为了渲染效率把离相机近的提前渲染。

感谢李伟@UWA问答社区提供了回答


Rendering

Q:场景中常驻一个场景相机(Base)和UI相机(Overlay),有时候会出现动态加载的Prefab(比如某个模型)自带一个渲染相机(后面称为动态相机),相机模式为Base。

因为想要和之前的渲染结果叠加,Background Type为Uninitialized,导致移动平台渲染目标的Load Action为DontCare,所以屏幕中未被动态相机渲染的部分出现花屏现象。

不过我想,既然Overlay可以实现正确的叠加,那Base也应该可以才对,于是我看下源码,并打了一些Log,发现动态加载的Base相机在SetRenderTarget的时候colorBuffer的Load Action确实是Load,所以比较困惑为什么移动平台仍然是DontCare?

顺便想问一下,以上的需求正确的做法是不是把动态相机改成Overlay,并用代码把相机放入常驻场景相机的CameraStack中?

为了进一步理解,我又参考了URP自带的FinalBlitPass的做法:

但在Xcode里面查看仍然对不上:

发现在Blit到一个已经有内容的RT时,RT的LoadAction默认是Load,内置管线下可以使用RenderTexture.DiscardContents来避免,URP下有什么类似的方法吗?

针对以上问题,有经验的朋友欢迎转至社区交流分享


Rendering

Q:请问粒子系统是否能够支持GPU Instancing?做了些例子都没能看到GPU Instancing生效。

A1:Unity 2018已经支持ParticleSystem的GPU Instancing了,不过必须是Mesh模式的,具体可以看这个文档:
Unity - Manual: Particle System GPU Instancing

该回答由UWA提供

A2:粒子系统有必要用GPU Instancing实现吗?粒子系统的实现和GUI的实现差不多。把数据放到VBO上还是放到UBO区别不太大,并不能大幅度提升效率,限制多通用性也不强。

感谢李伟@UWA问答社区提供了回答


Rendering

Q:请问URP下场景和UI分辨率分离怎么修改(不需要改颜色空间)?

暂时没用到场景线性和UI Gamma,想单纯的修改场景分辨率而不修改UI的分辨率,不想单独给UI一个Buffer。

目前看URP源码,Overlay的UI相机直接用Base的相机的Buffer。

之前看到有方案,直接将UI绘制到屏幕上的。我仿造FinalBlitPass,在DrawObjectsPass里判断是否是UI相机重新设置了setRenderTarget,但是没有效果,UI没有绘制出来。请问这个方案可行吗?

DrawObjectsPass.cs :

if (!renderingData.cameraData.camera.CompareTag("UICamera"))
{context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref filterSettings, ref m_RenderStateBlock);
}
else
{cmd.SetRenderTarget(BuiltinRenderTextureType.CameraTarget,RenderBufferLoadAction.DontCare, RenderBufferStoreAction.Store, // colorRenderBufferLoadAction.DontCare, RenderBufferStoreAction.DontCare);context.ExecuteCommandBuffer(cmd);cmd.Clear();context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref filterSettings, ref m_RenderStateBlock);
}

A1:需要将3D场景渲染到RT里面,再将RT作为RawImage的Texture渲染到UI里面,这样可以通过控制RT的分辨率来控制场景的渲染分辨率。

更多回答可以参考这个问答:
Srp合批问题 -- UWA问答 | 游戏开发者互动问答社区 | 侑虎科技

感谢han@UWA问答社区提供了回答

A2:SceneCamera和UICamera各自负责场景和UI的渲染,然后修改URP源码,给每个Camera上挂载一个修改RenderScale的Component即可实现,UI的RenderScale保持1或者更高即可。

关于RenderScale与URP的实现可以参考:
Render Scale

Unity的一篇文章中提到过“降低分辨率不包含UI”,可参考:

知乎@放牛的星星,也曾在整理的文章中提及“分开场景和UI的分辨率”,可参考:

感谢会丢锅的Coder@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方问答社区:answer.uwa4d.com

 

相关文章:

SRP合批问题

1)SRP合批问题 ​2)多个Base相机渲染到同一个渲染目标,移动平台花屏的问题 3)粒子系统对GPU Instancing的支持 4)如何修改URP下场景和UI分辨率分离(不需要改颜色空间) 这是第327篇UWA技术知识分…...

蓝牙5.1低功耗SOC 私有协议2.4GHz芯片HS6621

HS6621CxC是一个优化功耗真正芯片系统(SOC)解决方案,适用于蓝牙低功耗和私有的2.4GHz应用场景。它集成了一个高性能、小功率的射频收发器,具有蓝牙基带和丰富的外围IO扩展。还集成了电源管理,以提供高效的电源管理。 …...

数据库连接池

数据库连接---执行完毕---释放 连接--释放 十分浪费系统资源 池化技术:准备一些预先的资源,过来就连接预先准备好的 最小连接数: 10 最大连接数:15 业务最高承载上限 排队等待, 等待超时:100…...

Arrays-sort-的用法

1.集合交换元素 Collections.swap&#xff08;List<?> list, int i, int j&#xff09;&#xff1b; 源码&#xff1a; /*** Swaps the elements at the specified positions in the specified list.* (If the specified positions are equal, invoking this method …...

华为OD机试真题Java实现【寻找相同子串】真题+解题思路+代码(20222023)

寻找相同子串 题目 给你两个字符串 t 和 p ,要求从 t 中找到一个和 p 相同的连续子串,并输出该字串第一个字符的下标。 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD机试(Java)真题目录汇总 输入描述: 输入文件包括两行,分别表示字符串 t 和 p ,保证 t 的长度…...

性能指标 确定性能目标 性能场景设计

性能测试指标 性能测试指标分为业务技术指标和系统资源指标&#xff0c;在服务端性能业务技术指标中分为三个指标&#xff0c;系统吞吐量&#xff0c;响应时间和并发用户数。响应时间分为前端展现时间和系统响应时间两部分&#xff0c;系统吞吐量体现软件系统负载承受能力的指…...

ENVI_Classic:快速入门_菜单栏常见功能的基本介绍

说明&#xff1a;由于实验要求&#xff0c;所以并没有对各个功能进行详尽的解释&#xff0c;大多点到为止&#xff0c;少部分实验内容是实验要求所以步骤详尽。当然由于经验不足&#xff0c;有一些可能存在错误恳请指正.1. 实验目的通过ENVI Classic对自行下载的遥感图像进行一…...

【深度探讨】公共部门在选择区块链平台时要考虑的6个方面

发表时间&#xff1a;2022年8月17日 信息来源&#xff1a;bsvblockchain.org 与私营企业相比&#xff0c;全球的公共部门组织在考虑升级软件解决方案时面临着一系列的全新挑战。公共部门的决策流程冗长而复杂&#xff0c;他们要不惜一切代价避免对现有业务造成干扰&#xff0c;…...

基于阿里云物联网平台设计的实时图传系统_采用MQTT协议传输图像

一、项目功能介绍 当前基于MQTT协议设计了一个实时图传系统,通过这个项目来演示,两个MQTT设备如何互相订阅,进行消息流转。 在阿里云服务器上创建2个设备,分为为设备A和设备B;设备A负责采集本地摄像头画面上传,设备B负责接收设备A上传的数据然后解析显示出来。在阿里云服…...

42-Golang中的单元测试

Golang中的单元测试需求传统方法基本介绍单元测试快速入门总结综合案例需求 在工作中&#xff0c;我们会遇到这样的情况&#xff0c;就是去确认一个函数&#xff0c;或者一个模块的结果是否正确 传统方法 在main函数中&#xff0c;调用addUpper函数&#xff0c;看看实际输出…...

python实现k_means聚类

K-Means算法是将一组N个样本的特征矩阵X划分为K个无交集的簇&#xff0c;直观上来看是簇是一组一组聚集在一起的数据&#xff0c;在一个簇中的数据就认为是同一类。簇就是聚类的结果表现。簇中所有数据的均值通常被称为这个簇的“质心”(Centroids)。在一个二维平面中&#xff…...

【批处理脚本】-3.3-exit命令详解

"><--点击返回「批处理BAT从入门到精通」总目录--> 共3页精讲(列举了所有exit的用法,图文并茂,通俗易懂) 在从事“嵌入式软件开发”和“Autosar工具开发软件”过程中,经常会在其集成开发环境IDE(CodeWarrior,S32K DS,Davinci,EB Tresos,ETAS…)中,…...

如果读了我2011年求职前端开发的酸爽经历,希望你可以鼓起勇气继续向前

今年是2023年&#xff0c;如果你觉得今年找工作很难&#xff0c;狗哥回忆了一下2011年求职前端开发工作的酸爽经历&#xff0c;希望你读了以后可以鼓起勇气&#xff0c;不要迷茫&#xff0c;简历投出去石沉大海的&#xff0c;需要改简历的就赶紧改&#xff0c;刷题不到位的就赶…...

PTA:L1-016 查验身份证、L1-017 到底有多二、L1-018 大笨钟(C++)

目录 PTA&#xff1a;L1-016 查验身份证 问题描述&#xff1a; 实现代码&#xff1a; L1-017 到底有多二 问题描述&#xff1a; 实现代码&#xff1a; L1-018 大笨钟 问题描述&#xff1a; 实现代码&#xff1a; 都是简单模拟题&#xff0c;不再写题解。 PTA&#xf…...

springboot工厂模式解决if_else流程和问题点解决

一、主要问题点 spring中的Bean由IOC容器进行管理&#xff0c;和普通工厂的区别就是springboot中的类不能通过自己New出来使用&#xff0c;如果通过new写入到工厂&#xff0c;涉及到相关实现类调用其他Service&#xff08;该service在正确情况下正常注入&#xff09;&#xff…...

如何避免缓存击穿?使用GO语言实现sliglefight

前言 在缓存系统中&#xff0c;如果发生了缓存未命中&#xff0c;通常会向数据库或者其他的缓存系统来请求数据。 想象这样一种情况&#xff0c;缓存系统中某个热点值被删除了&#xff0c;随后一大批请求到来&#xff0c;造成大量的cache miss&#xff0c;如果这些请求全部都…...

【浅学Java】MySQL索引七连炮

MySQL索引面试七连炮0. 谈一下你对索引的理解1. MySQL索引原理和数据结构能介绍一下吗2. B树和B树的区别3. MySQL聚簇索引和非聚簇索引的区别4. 使用MySQL索引都有什么原则4.1 回表4.2 索引覆盖4.3 最左匹配4.4 索引下推5. 不同的存储引擎是如何进行数据的存储的6. MySQL组合索…...

扬帆优配|昔日白马股濒临退市,却6天5涨停!ST股突然集体爆发

尽管再度重申“公司股票将被停止上市”&#xff0c;但3月8日早间&#xff0c;*ST辅仁股价仍是在开盘后快速封住涨停板。这已是该公司近6个买卖日来&#xff0c;第5次呈现涨停。 无独有偶&#xff0c;8日早间ST东瀛也在此前多次涨停后&#xff0c;再度呈现近4%的涨幅。而就在7日…...

Git 基础(一)—— Git 的安装及其配置

目录 一、Git 的下载与安装 1、Linux 环境 2、Windows 环境 (1) 下载 Git 安装包 (2) 安装 Git 二、Git 配置 1、配置用户信息 2、查看配置信息 3、Windows 环境下配置文件的位置 一、Git 的下载与安装 1、Linux 环境 在保证网络环境畅通的情况下&#xff0c;直接输…...

什么是信息安全风险评估?企业如何做?

什么是信息安全风险评估&#xff1f; 信息安全风险评估是参照风险评估标准和管理规范&#xff0c;对信息系统的资产价值、潜在威胁、薄弱环节、已采取的防护措施等进行分析&#xff0c;判断安全事件发生的概率以及可能造成的损失&#xff0c;提出风险管理措施的过程。当风险评…...

HBase---idea操作Hbase数据库并且映射到Hive

idea操作Hbase数据库并且映射到Hive 文章目录idea操作Hbase数据库并且映射到Hiveidea操作Hbase数据库环境准备启动服务创建Maven工程在测试类中编写初始化方法在测试类中编写关闭方法在测试类中编写创建命名空间方法在测试类中编写创建表方法在测试类中编写查看表结构方法在测试…...

剑指 Offer 61 扑克牌中的顺子

摘要 扑克牌中的顺子 一、集合 Set 遍历 根据题意&#xff0c;此5张牌是顺子的 充分条件 如下&#xff1a; 除大小王外&#xff0c;所有牌 无重复 &#xff1b;设此5张牌中最大的牌为max&#xff0c;最小的牌为min&#xff08;大小王除外&#xff09;&#xff0c;则需满足…...

Spring 响应式编程-读书笔记

序言 大家好&#xff0c;我是比特桃。本文为《Spring 响应式编程》的读书笔记&#xff0c;响应式技术栈可以创建极其高效、易于获取且具有回弹性的端点&#xff0c;同时响应式可以容忍网络延迟&#xff0c;并以影响较小的方式处理故障。响应式微服务还可以隔离慢速事务并加速速…...

CI流水线的理解

一、概念 单元测试&#xff1a;针对软件的基本单元&#xff08;如&#xff1a;类、函数&#xff09;所做的测试。 集成测试&#xff1a;将软件代码单元集成起来后&#xff0c;以组件、模块和子系统为单位进行的测试&#xff0c;主要测试接口间的交互关系。也称组件测试&#xf…...

OpenStack手动分布式部署Nova【Queens版】

目录 Nove简介&#xff1a; 1、登录数据库配置&#xff08;在controller执行&#xff09; 1.1登录数据库 1.2数据库里创建nova-api 1.3数据库登录授权 1.4创建nova用户 1.5添加admin用户为nova用户 1.6创建nova服务端点 1.7创建compute API 服务端点 1.8创建一个placement服务…...

centos7 oracle19c安装 ORA-01012: not logged on

总共分三步 1.下载安装包:里面有一份详细的安装教程 链接&#xff1a;https://pan.baidu.com/s/1Of2a72pNLZ-DDIWKrTQfLw?pwd8NAx 提取码&#xff1a;8NAx 2.安装后,执行初始化:时间较长 /etc/init.d/oracledb_ORCLCDB-19c configure 3.配置环境变量,不配置环境变量,sq…...

山东小巨人申报条件

国家专精特新小巨人特点1、经济效益&#xff1a;上年度企业营业收入在1亿元至4亿元之间&#xff0c;近2年主营业务收入或净利润的平均增长率达到10%以上&#xff0c;企业资产负债率不高于70%。2、专业化程度&#xff1a;&#xff08;1&#xff09;企业从事特定细分市场时间达到…...

手写中实现并学习ahooks——useRequest

前言 最近业务没有之前紧张了&#xff0c;也是消失了一段时间&#xff0c;也总结了一些之前业务上的问题。 和同事沟通也是发现普通的async await 封装api在复杂业务场景下针对于请求的业务逻辑比较多&#xff0c;也是推荐我去学习一波ahooks&#xff0c;由于问题起源于请求…...

[手写OS]动手实现一个OS 之 准备工作以及引导扇区

[手写OS]动手实现一个OS之第一步-环境以及引导扇区 环境准备 一台可用计算机&#xff08;linux我不知道&#xff0c;我用的Windows&#xff09;汇编编译器NASM一个方便的软盘读写工具VirtualBox 汇编编译器NASM 官网地址&#xff1a;https://www.nasm.us/pub/nasm/snapshot…...

JVM实战OutOfMemoryError异常

目录 Java堆溢出 常见原因&#xff1a; 虚拟机栈和本地方法栈溢出 实验1&#xff1a;虚拟机栈和本地方法栈测试&#xff08;作为第1点测试程序&#xff09; 实验2&#xff1a;&#xff08;作为第1点测试程序&#xff09; 运行时常量池和方法区溢出 运行时常量池内存溢出 …...

兰州网站建设尚美/代理公司注册

lua 垃圾回收 垃圾回收 lua 自动进行垃圾收集&#xff0c;可不用手动操作 collectgarbage(opt, arg) &#xff1a;垃圾收集&#xff0c;arg可选 This function is a generic interface to the garbage collector. It performs different functions according to its first ar…...

公司网站建设的/网站seo应用

1 视频文件作为网络模型的输入数据 越来越多的神经网络模型开始以视频作为训练数据&#xff0c;比如基于视频数据的行为识别等等&#xff0c;这就需要我们将视频转换为可适用的张量&#xff0c;本文将以pytorch为例&#xff0c;展示一下视频数据转换为pytorch tensor的过程。 …...

福建抖音代运营开户/seo上排名

Vue2.0子同级组件之间数据交互 标签&#xff1a; vue组件2017-07-23 22:03 1891人阅读 评论(0) 收藏 举报目录(?)[-]熟悉了Vuejs的同级组件之间通信写此文章以便记录Vue是一个轻量级的渐进式框架对于它的一些特性和优点请在官网上进行查看不再赘述熟悉了Vue.js的同级组件之间通…...

做响应式网站哪家好/最佳bt磁力狗

redis-benchmark是一个redis官方自带的压力测试工具 我们来简单测试下&#xff1a; 100个并发 每个并发100000个请求 redis-benchmark -h localhost -p 6379 -c 100 -n 100000开启redis服务器之后&#xff0c;执行&#xff1a; 性能测试分析&#xff1a;...

需要找做网站的/seo优化设计

Win7切换窗口功能非常的实用&#xff0c;很多用户发现自己使用的时候只能切换一个&#xff0c;但是实际需求想要多切换几个&#xff0c;其实这个可以设置的&#xff0c;不知道Win7怎么设置切换窗口数量的小伙伴&#xff0c;可以看看以下详细的设置方法。 Win7怎么设置切换窗口…...

网站官网建设注意/网络营销策划师

MySQL在mac系统安装如下一.下载https://downloads.mysql.com/archives/community/如果下载速度过慢 可以使用百度云mysql-5.7.28-macos10.14-x86_64.dmg链接: https://pan.baidu.com/s/1CC8sqEe3oC8Shv3EwTYSMQ 密码: 1sjj二.安装下载dmg版本 根据步骤如下安装在进行下一步 下一…...