URP下的OffScreen Particle Render

news/2024/4/24 14:37:26/文章来源:https://www.cnblogs.com/uwatech/p/16846924.html

【博物纳新】专栏是UWA旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。


随着越来越多的项目使用URP管线,以及更多的项目的特效压力越来越大,因此本篇文章基于GitHub上的一个项目将其从Builtin管线下移植到URP修改版,给大家提供了URP管线下降低特效GPU压力的做法,以供大家参考。

GitHub项目:OffScreenParticleRendering
https://github.com/slipster216/OffScreenParticleRendering

这个库做的工作是将粒子系统或者半透明的渲染对象单独渲染到RenderTexture中,然后再将RenderTexture与不透明的渲染进行混合。单独渲染到RenderTexture的好处是可以通过降低RenderTexture的分辨率从而减少GPU的渲染压力。


Builtin管线下最终融合效果

 


Builtin管线下RenderTexture的渲染效果

 

为了能将此功能移植到URP下,我们先说明一下原始项目中Builtin管线下功能实现的关键点,具体细节在原GitHub项目的说明文档中有说明,主要步骤如下图1,2,3,4。

 

#1 主相机中渲染不透明对象,且因为渲染半透明时需要做深度比较,因此主相机的depthTextureMode需要设置为DepthTextureMode.Depth。

#2 在OnRenderImage中将_CameraDepthTexture进行DownSample。

#3 在OnRenderImage中从主相机复制一个相机,此相机渲染到RenderTexture,且RenderTexture可以调整分辨率,在此相机中单独渲染粒子系统和其他半透明对象。调用拷贝的离线渲染相机的Camera.Render,这样可以保证离线相机的渲染顺序是在主相机之后渲染的,否则设置了RenderTarget的相机会优先比没有设置RenderTarget的相机先渲染。半透明的对象的Shader需要做特殊处理,需要将半透明对象和渲染场景生成的深度进行比较,比不透明对象离相机更近的像素才会被“绘制”到RenderTexture上。

PS:在原始项目中渲染Particle的Shader中少了“COMPUTE_EYEDEPTH(o.projPos.z);”,所以效果看上去不太对,在vert函数中添加上这句就OK了。

 

#4 在OnRenderImage的最后通过OffScreenParticle_Upsample Shader将Particle等半透明的RenderTexture融合到不透明场景中。此Shader中将RenderTexture的颜色通过Blend SrcAlpha OneMinusSrcAlpha的方式进行原色混合,从而和主场景进行混合。

以上就是原始Builtin管线下的实现思路,转到URP下,有几个问题需要思考:

  1. OnRenderImage在URP下是不支持的。
  2. 是否还需要额外的相机来实现半透明对象的渲染。
  3. 如何处理最后的融合操作。

在URP下,对于第一个问题,有专门的RenderFeature可以对应OnRenderImage的操作;第二个问题,并不需要额外的相机来渲染半透明对象,只需要模仿URP自带的CopyColor来实现渲染另外RenderTexture的操作即可,只是BlitCopy使用的材质球不一样;第三个问题,同样用另外一个RenderFeature来实现即可。

URP下的实现效果:

 

URP下RenderTexture中渲染OffScreen Particle的效果如下:

 

在此工程中,主要的点如下:
1、移除额外的Camera,取消了OffScreenParticleCamera脚本的作用。主相机需要开启Copy Depth。额外加了一个Particle的Layer,粒子特效的层改成Particle了。

 

2、新增了两个RenderFeature,OffScreenParticleFeature和OffScreenMergeFeature。前面的是用来绘制Particle的,后面的是用来做主场景和Particle融合的。在OffScreenParticleFeature中添加了2个Pass,一个绘制Particle到_ParticleRT,一个对Depth进行降采样,绘制到_CameraDepthLowRes,OffScreenMergeFeature中有一个Pass,使用MergeShader进行融合。

 

3、OffScreenMergeFeature用到的Shader是MergeShader,根据原工程中OffScreenParticle_Upsample Shader进行修改的。

4、为了让Particle层只在OffScreenParticleFeature中进行渲染,需要将两个Shader的LightMode更改为一个自定义的字符串,并且在OffScreenParticleFeature中将这个“OffScreenParticle”加入到ShaderTagList中,ShaderTagList的值是由Pass中的Tags里面的LightMode的值决定的。

 

  

 

最终在FrameDebugger中确定好渲染队列:

  1. 渲染场景中不透明物体;
  2. Copy Depth到_CameraDepthTexture中;
  3. 使用OffScreenParticlePass进行Particle层对象的渲染,可以通过DownSample来调整RT的大小,原始大小或者1/2或者1/4;
  4. 对Depth进行降采样,渲染最终Merge中用到的_CameraDepthLowRes;
  5. 使用MergePass进行最终的Merge,使用的是MergeShader。

 

 

Unity Demo下载链接:
https://pan.baidu.com/s/1Zi1avSMAwWkOjCeFj5k4iA
密码:bksb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410245.aspx

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

相关文章

jsp个人评价管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 个人评价管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使…

多模态自编码器从EEG信号预测fNIRS静息态

导读 本研究介绍了一种深度学习架构,用于评估40名癫痫患者的多模态脑电图(EEG)和功能性近红外光谱(fNIRS)记录。长短期记忆网络和卷积神经网络集成在一个多模态序列到序列的自编码器中。训练后的神经网络通过从EEG全谱和特定EEG频段中分层提取深度特征,…

fscan:一键自动化、全方位漏洞扫描的开源工具

https://blog.csdn.net/osfront/article/details/116049846 打开服务器看到了一个软件fscan64,并有运行页面。因为没见过,吓了我一跳,搜索了下是什么,记录下。 简介 fscan 是一个内网综合扫描工具,方便一键自动化、全方位漏洞扫描。 它支持主机存活探测、端口扫描、常见服务…

【Java数据结构】顺序表

我们不过是普通人,只不过在彼此眼中闪闪发光 目录 1.模拟实现顺序表 1.1 顺序的结构 1.2 顺序表的成员属性 1.3 顺序表的构造方法 1.4 顺序表的成员方法 1.4.1 扩容 1.4.2 打印顺序表 1.4.3 尾插 1.4.4 在指定位置插入 1.4.5 判断数组中是否有这个元素…

SSH婴幼儿产品销售系统电商购物系统(含源码+论文+答辩PPT等)

该项目采用技术JSP、strust2、Spring、Hibernate、Tomcat服务器、MySQL数据库 ,项目含有源码、论文、配套开发软件、软件安装教程、项目发布教程 本系统结构如下: 1,游客访问 |–系统首页,查看所有的商品信息和相关的菜单信息 |–…

每日一记:笔记工具使用、计算机基础知识、编程语言认识

1、笔记工具的使用 我现在使用的是typora这个文档工具 markdown语法 常见操作有:标题、代码块、引用、列表等 typora工具的主页面 我们可以编辑内容 做笔记 。。。 标题分类: 和html(超文本标记语言 前端部分一样)分为六级标题…

拉卡拉第三季营收13.45亿:净利8372万 同比降73%

雷递网 雷建平 10月31日拉卡拉支付股份有限公司(证券代码:300773,证券简称:拉卡拉)日前发布财报,财报显示,拉卡拉2022年前三季营收43.55亿元,同比降11.83%;拉卡拉2022年前…

Shell编程从看懂到看开②(字符串、数组、注释、流程控制、read读取控制台输入)

文章目录Shell字符串单引号双引号拼接字符串获取字符串长度提取子字符串查找子字符串Shell数组定义数组读取数组获取数组的长度Shell注释流程控制if判断case语句for 循环while 循环read 读取控制台输入Shell字符串 字符串是shell编程中最常用最有用的数据类型(除了…

【DDR3 控制器设计】(5)DDR3 的仲裁读写操作设计

写在前面 本系列为 DDR3 控制器设计总结,此系列包含 DDR3 控制器相关设计:认识 MIG、初始化、读写操作、FIFO 接口等。通过此系列的学习可以加深对 DDR3 读写时序的理解以及 FIFO 接口设计等,附上汇总博客直达链接。 【DDR3 控制器设计】系列…

爆破校园网的宽带

前提:学校的手机号前7位相同,宽带密码都是手机号后六位。仅供学习。 准备工作:电脑一台,把校园网的宽带水晶头插在电脑上, 步骤: winR输入Rasphone点击新建,宽带,输入宽带名称&am…

Kubernetes(31):kubeasz单主机模式

前言 有时候,我们只需要k8s集群进行项目测试,能够使用的主机可能只有一台,那么如何构建一台单机的k8s集群? 单机版的k8s集群可以用于本地测试,或者内部测试环境,或者个人电脑上的项目测试。 那么我们可以使…

Html保留空格和换行

效果&#xff1a; 代码&#xff1a; <pre> 这是一段文本这是一段文本这是一段文 本这是一 段文本这是一段文本 </pre>

会话技术(Session、Cookie)详细介绍

会话技术 request&#xff1a;接收请求 接收请求行 接收请求方式&#xff1a;request.getMethod()接收项目路径&#xff1a;request.getContextPath() 接收请求头 request.getHeader(String name) 接收请求参数 中文参数&#xff1a; get方式&#xff1a;不乱码。因为tomcat8.…

NIO Buffer类的重要方法

1 allocate()创建缓冲区 在使用Buffer&#xff08;缓冲区&#xff09;之前&#xff0c;我们首先需要获取Buffer子类的实例对象&#xff0c;并且分配内存空间。为了获取一个Buffer实例对象&#xff0c;这里并不是使用子类的构造器new来创建一个实例对象&#xff0c;而是调用子类…

带你走入C++动态多态的底层

多态按字面的意思就是多种形态&#xff0c;相同的方法调用&#xff0c;但是有不同的实现方式。多态性可以简单地概括为“一个接口&#xff0c;多种方法&#xff0c;实现接口与实现的分离。 C有两种多态形式&#xff1a; 静态多态动态多态而本文主要介绍动态多态的应用。 动态…

力扣1662(javapython)-检查两个字符串数组是否相等(简单)

题目: 给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同,返回 true ;否则,返回 false 。 数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。示例 1: 输入:word1 = ["ab", "c"], word2 = ["a", "bc…

SpringBoot:ssm和springboot整合

目录 一、整合Mybatis 因为要使用逆向生成代码 pom.xml generatorConfig.xml application.yml 测试 BookController SpringbootmybatisApplication jdbc.properties 二、整合mybatisplus 简介 application.yml MPGenerator SpringbootmpApplication 三、使用my…

ensp华为配置NAT

ensp华为配置NAT 文章目录ensp华为配置NAT1 对PC进行地址、掩码及网关配置2 对路由器进行初始配置3 ART配置3.1 静态NAT配置3.2 动态NAT配置3.3 端口NAT (NAPT) 的配置3.4 Easy IP的配置3.5 NAT Server的配置4 总结拓扑图如图&#xff1a;1 对PC进行地址、掩码及网关配置 略 …

计算机毕设(附源码)JAVA-SSM佳音大学志愿填报系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

计算机毕设(附源码)JAVA-SSM蓟县农家乐网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…