什么是URP相信大家都已经看过了很多的文章,这里就不再向大家详细解读URP了,只是简单的提一下:大家都知道,一直以来,unity使用的都是一套内置的渲染管线,全部写在引擎的源码里,大家基本不会能改动,所以过去的管线对于开发者来说,是很难进行定制的。而且对unity官方团队而言,应该也有很大负担,因为他们要在一个渲染管线里支持几十种平台,例如PC,主机,手机等,越来越多的平台支持无疑会使这套代码越来越臃肿,很难兼顾效率和效果,所以unity推出了一套新的基于脚本的渲染管线SRP(可编程渲染管线),主要把渲染管线拆分成两层:一层是比较底层的渲染API,另一层是渲染管线比较上层的描述,上层的代码使用C#来编写。在C#这层不需要关注底层在不同平台渲染API的差别,也不需要关心据图如何做一个Draw Call。

unity基于SRP提供了两套模板:一个是轻量级渲染管线LWRP(在unity2019.3中正式更名为URP(通用渲染管线)),一个是高清晰渲染管线HDRP。
高清渲染管线HDRP是全部基于Compute Shader,基于最新的硬件来开发的,可以达到顶尖的渲染效果。例如Unity的官方演示项目《异教徒》,它的效果非常惊艳。
另外一个渲染管线URP,主要是为了移动平台设计,也就是最流行的手机游戏平台,它可以达到更高的效率,然后可定制性也更好。

而我们在阅读官网URP文档,与内置渲染管线做对比的时候,会发现很重要的一个不同点就是,URP采用了Single-Pass的渲染方式。

我们知道Pass块的作用就是 Pass块使游戏对象的几何图形被渲染一次。我们可以找一个最简单明了的多pass效果来看一下,那就是unity下的毛发效果:Unity下的毛发效果

我们打开任意一个shader代码,就可以看到下边有超级多的pass块进行不断的渲染,所以才会呈现出多层mesh,也就是毛发的效果,每个shader都会进行一次渲染,所以我们在Unity的界面下就可以看到一个普通的球体,拥有了多层mesh,然后通过改变透明度,颜色等实现了毛发的效果(这里就不详细介绍毛发效果是如何实现了,有机会单独介绍)

    


我们可以把毛发相关的代码放在URP的工程下面,发现不管我们怎么调节毛发材质的选项,都只有一层mesh,打开framedebugger看一下渲染过程。我们可以断定,pass块只执行了第一个。

我们刚才已经了解到了,内置渲染管线支持多pass渲染处理,也就是刚才我们看到的毛发效果,但是urp下只支持single pass的处理方式,这个single-pass第一眼觉得是URP下的shader只能有一个pass块,但这样理解肯定是不对的,我们随便点开一个URP下的官方shader,都可以看到每个shader中都有好多pass块,分别用来渲染阴影等,而且每个pass块都打上了lightmode标签。那我们可以猜测,是不是我们在pass块中给每个pass块都设定一个lightmode标签,就可以执行了?我们可以试一下,给第一个pass块一个tag标签UniversalForward(URP渲染下的一个lightmode标签)。

之后再回到Unity,打开framedebugger看一下渲染过程,

发现此时已经进行了两次pass块的渲染,一个pass的标签是UniversalForward,另一个则么有标签,那我们再在第二个pass块上加上一个tag标签UniversalForward,再看一下framedebugger

可以看到此次渲染的是第0个和第2个,其中第0个pass块和第1个pass块都是相同的标签UniversalForward,我们把第一个pass块的tag标签换成SRPDefaultUnlit(URP下的标签之一)

可以看到两个pass都被正常渲染,而且两个pass的标签分别为UniversalForward和SRPDefaultUnlit。

那么我们现在应该可以猜到URP下的Sungle-Pass的渲染方式,应该指的是,相同的Tags标签,只会被执行一次,而不是说一个shader里面只能有一个Pass块。

那么URP下的标签又是在哪里定义的呢?我们可以在Packages文件夹下找到URP相关的代码,在DrawObjectsPass这个脚本下,发现有tag标签被加进了标签队列中

当然URP本质上就是SRP的一个模板,例如DrawObjectsPass这样的脚本我们完全可以自己去编写,来定义自己的渲染管线,我们现在可以尝试在DrawObjectsPass下,把一些我们自己定义的Tag标签名字加进去,例如

然后再毛发shader中添加我们自己的标签,发现被添加了Test1和Test2标签的pass块也都被正常执行了。(补充:最多只允许16个ShaderTag)

(以上均为博主自己的理解,如有错误,还麻烦在评论区指出,大家一起探讨研究)。

Unity URP中的Single-Pass到底是什么相关推荐

  1. Unity URP中的多Pass Shader和Planer shadow

    一 .Unity移动端软阴影技术总结: https://blog.csdn.net/jxw167/article/details/82422891 二. 平面阴影的原理 https://zhuanla ...

  2. Unity URP中的Post-processing

    在Unity中,你可以选择不同的渲染管道.渲染管道执行一系列获取场景内容的操作,并在屏幕上显示它们.在高水平上,这些操作包括:Culling,Rendering,Post-processing.不同的 ...

  3. Unity - URP RenderFeature - 实现类似多 Pass 的 XRay: Rim、Pattern

    文章目录 环境 XRay : Rim, Pattern, Pattern+Rim 在 Built-RP 中 在 URP 中 Shader 脚本 效果 Pattern URP RendererFeatu ...

  4. [Render] 适用于高级Unity创作者的通用渲染管线[4] - URP中的光照

    RuntimeMapMaker3D-Pro 英文原文:https://resources.unity.com/games/introduction-universal-render-pipeline- ...

  5. 【Unity URP】Rendering Debugger和可视化MipMap方案

    写在前面 最近开始学习Unity性能优化,是结合了<Unity游戏优化>这本书和教程<Unity性能优化>第叁节--静态资源优化(3)--纹理的基础概念一起学习.在学习纹理优化 ...

  6. system volume information是什么文件_如何扩展Unity URP的后处理Volume组件

    Unity在更新到Unity2019.4之后,大家或许已经发现,在使用URP(通用渲染管线)的情况下,Unity原来的Post Processing插件好像不起效了.原来Unity在Unity2019 ...

  7. 【直播回顾】URP中如何写Shader?

    洪流学堂,让你快人几步.你好,我是你的技术探路者郑洪智,你可以叫我大智. 每周三例行的洪流学堂Unity直播公开课这周也如期与大家见面啦! 这周一起探索的话题是:URP中如何写Shader? 下面我们 ...

  8. Unity URP入门实战

    导读 本文讲述 如何从应用层面使用URP 如何在代码层面为URP增加更多的渲染特性 如果拓展URP的后处理效果 URP管线特性 光源数量: 直线光外加4个其他光源 内置管线的多Pass Forward ...

  9. 关于URP中RendererFeature的使用及毛发效果的几种实现方式

    目录 前言 一.铺垫 二.基于程序网格复制的实现 三.基于程序多材质的实现 四.基于RenderObjects手动配置的实现 4.1.多Pass实现多层毛发 4.2.override material ...

  10. unity URP内置shader lit解析

    unity内置的pbr渲染shader Properties为shader相关属性 两个SubShader里面为相应的渲染内容,第二个为降级处理渲染,如果第一个SubShader不兼容,才会渲染第二个 ...

最新文章

  1. C语言条件编译及编译预处理阶段
  2. hdu2588 GCD
  3. 学习旧岛小程序 (1) flex 布局
  4. beanshell变量无法传到jmeter_学会BeanShell,才敢说自己懂Jmeter
  5. laravel大型项目系列教程(六)之优化、单元测试以及部署
  6. SQL点滴26—常见T-SQL面试解析
  7. 多少人能过初赛_蜂蜜和水的比例是多少?蜂蜜水怎么冲最好?
  8. IdentityServer4 SigningCredential(RSA 证书加密)
  9. 软件工程导论团队项目
  10. layer加载的页面偶尔出现空白_Layer-Cake 模式的设计
  11. treeset java_Java TreeSet Higher()方法与示例
  12. 读取pdf文件信息(pdfinfo)
  13. Python 数据科学入门教程:NLTK
  14. 开发物体识别桌、_Tofu3 热红外可见光双光AI目标识别跟踪
  15. 【黑马Bootstrap笔记】Bootstrap快速入门
  16. javascript高级程序设计笔记-第八章(BOM)
  17. oracle normal索引类型,Oracle中有多少种索引类型?
  18. 我国计算机发展历程简述,简述计算机的发展历程??
  19. 《甄嬛传》计谋汇总, 本文忠实于《后宫 甄嬛传》第1本~第7本+番外原文,而非电视剧。
  20. 目前有哪些高并发解决方案?

热门文章

  1. html插入腾讯视频自动播放,腾讯视频代码在哪里 腾讯视频嵌入网页的方法
  2. php 上拉加载下拉刷新页面,html下拉刷新上拉加载Refresher3.0
  3. aspose word 19.3的使用和破解 word转图片和pdf
  4. C# 获得%ProgramData% 路径
  5. Number theory 1_2, To prove there is no rational solution of equation: x^2+y^2=7
  6. 百钱买百鸡问题的解法与思路
  7. 获取屏幕分辨率和刷新率
  8. python与sql的区别_2020年入门数据分析选择Python还是SQL?七个常用操作对比!
  9. uniapp——显示不了网络图片或者本地图片
  10. [ECCV 2020] Synthesize then Compare: Detecting Failures and Anomalies for Semantic Segmentation