文章目录
前言
URP(通用渲染管线)是Unity为了提升渲染管线的可编辑性和灵活性而推出的一个渲染解决方案。它基于SRP(可编程渲染管线)技术,允许开发者通过C#脚本来定义和修改渲染流程。
从两者的关系上来说,URP是一种SRP,是在众多SRP中使用的最多的一种渲染管线,其包含有大量的管线和Shader代码,为开发者提供了多平台支持、可扩展性和模块化以及各种优化技术。尽管在学习中,我们会从0开始构建一个SRP项目,并通过熟悉各环节来逐步学习管线的各个细节;但是在实际项目中,从0开始构建一个SRP管线需要巨大的成本和工作量,并且存在风险。因此,如果中小型项目中存在定制管线的需求,我们通常认为本地化URP并进行修改会是更高效的一种方式;此外,URP作为成熟的商业化管线,阅读它的源码也有助于印证、提高我们的理论知识,本地化URP使得我们可以使用各种工具和编辑器来对源码进行可视化阅读等操作,有助于我们的进一步提升。
一.安装URP包
URP作为一种成熟的管线,早已作为Package发布,直接通过包管理器(Package Manager)进行安装即可。

由内置管线升级URP管线的时候,可能带来一系列的问题,如部分使用BuildIn Shader的材质变成BUG紫之类的问题,部分可以通过Edit->Rendering->Material->Convert Selected Built-In Material to URP解決,部分自己编写的Shader需要按照URP的Shader做法修改一遍,主要是几个#Include会有差别,详见URP shader与Built-in shader差异和URP shader模板,这里引用一部分。
差异:
1.Tags里需要添加“RenderPipeline”=“UniversalPipeline”
2.CGPROGRAM改为HLSLPROGRAM,ENDCG改为ENDHLSL,CGINCLUDE改为HLSLINCLUDE
3.fixed4已不支持,最低half4(测试版本2022.2.8)
4.URP内置的库文件路径:可编程渲染管线的shader库 #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/..." 通用渲染管线的shader库 #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/..." 最常用的: #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

二.URP本地化
安装好的URP资源在Packages下,主要内容为Core RP Library(SRP核心)和Universal RP,其中Core RP Library会有一些Packages依赖,在移除并删除Packages下的URP包后需要重新导入依赖的Packages,这部分将会在后文提到,我们首先关注Core RP和Universal RP两个包,右键->Show In Explorer(在资源管理器中打开)。


在Assets下建立一个文件夹来保存本地化的URP管线,这里我取名LocalURP。

URP的两个包里包含有多个程序集(*.asmdef),程序集之间具有复杂的引用关系,通过GUID来标识另一个程序集,我在第一次操作时出现了移动包位置之后程序集引用关系丢失的情况,这时推荐重新来过,否则需要手动去配置程序集之间的引用关系,有点麻烦。

为了避免在本地化时丢失程序集之间的引用,我们需要在资源管理器下把URP的两个文件夹拖到LocalURP下后尽快回到Unity编辑器下,通过一次编译来恢复这些引用。如无意外,我们会意外发现有很多的报错,并且此时如果有使用URP的Shader的话,会变成BUG紫。

(这里整个视图都变BUG紫是因为有屏幕空间的后处理Shader报错)
三.解决报错
在编程的语境中,报错实际上是程序自我诊断与优化的宝贵信号,它有助于开发者及时发现问题、定位错误根源,并据此调整代码逻辑,从而提升程序的健壮性和稳定性。因此,对于追求高质量代码的程序而言,报错不仅不是坏事,反而是推动其不断完善与进步的良性机制。
------沃兹.基硕得
这里的报错主要来自于两个方面,我们将一一排除错误,将管线恢复正常使用。
报错一:程序集引用关系为空,此时建议

最低0.47元/天 解锁文章

3769

被折叠的 条评论
为什么被折叠?



