Skip to content

URP 管线适配

TIP

本章节将向开发者说明使用 URP 管线的相关处理。

适配说明

  1. SDK 默认使用 Unity built-in 渲染管线,使用 URP 管线时,项目应自行切换和适配。
  2. URP 有比较强的可扩展性,允许开发者自定义渲染管线,**在 EZX****R Glasses **SDK 中,暂时不对自定义 URP 渲染管线进行技术支持,如开发者需要使用,可以参考本文进行适当修改。
  3. 当前使用 UPM 方式接入 SDK, 使用 URP,需要改为导入 unitypackage

使用 URP 适配

设置

  1. Window——Package Manager——切换 Packages:Unity Registry——搜索 Universal RP 并下载
  2. 下方 Assets 界面右键 Create——Rendering——URP Asset(with Universal Renderer),会出现两个 URP 图标

  1. 确认“Project Settings/Graphics/ScriptableRenderPipelineSetting”已经设置为 URP asset

  1. 下方 Assets 界面右键 Create—Material,并修改材质

  1. 将新材质拖拽到每一个 cube(目标对象)上,进行更新

  1. 修改 URP 参数

  1. 创建空对象,使用 Bloom 后处理,可调大 intensity 使效果更明显并在 Game 窗口预览 URP 效果是否生效。

  1. 在 Assets 中搜索“CameraRig”,找到 CameraRig.prefab,打开编辑,选中 CenterCamera, LeftCamera,RightCamera,设置“Rendering/Renderer”为项目创建的 renderer。(默认已设置)

  1. 在 Assets 中搜索“ProjectionManager”,找到 ProjectionManager.prefab,打开编辑,选中 RGBCamera,设置“Rendering/Renderer”为项目创建的 renderer。(默认已设置)

  1. 对场景中的 camerarig 检查是否已有上述同样配置。

  1. 【可选】参考 8,对“MiracastManager.prefab”,"RecordingManager.prefab"做相同的处理。

切换材质

默认材质切换

即可点击 Edit > Rendering > Materials > Convert Selected Built-in Materials to URP 下的这个功能即可。

它会弹出一个小框选择这个 Proceed 即可将选中的材质切换回来。

Project 下可以按下图快速筛选资料中的材质,然后 Ctrl+A 可以全选

如果还有材质是粉色的那这个时候就需要手动去修改,在丢失的材质下对应的 shader 下选择标记的这个 shader,

在里面选择任意一个即可将材质修改回来,

这就是修改后的效果。如果需要赋图片则在 shader 里面的 Surface Inputs 下左边的小框框中拖入要赋值的图片即可后面的白色小格子可以选择要赋值的颜色(可任意修改)。

SDK 材质一键替换包

包含了除 Demos 以外的所有材质,shader 替换

特殊材质 Scene 窗口显示问题

出现材质有残影的现象是编辑器显示问题,打包后正常显示

可以通过关闭 Scene 窗口下的 sky 显示解决问题

使用后处理

HDR

URP 管线默认支持 HDR,且默认开启。URP 管线默认支持 HDR,且默认开启。(可以检查 URP Assets 来确认,“Quality/HDR”的勾选情况)

后处理

  1. 在 Assets 中搜索“CameraRig”,找到 CameraRig.prefab,打开编辑,选中 CenterCamera, LeftCamera,RightCamera,勾选“Rendering/PostProcessing”。
  2. 在 Assets 中搜索“ProjectionManager”,找到 ProjectionManager.prefab,打开编辑,选中 RGBCamera,勾选“Rendering/PostProcessing”。
  3. 对场景中的 camerarig 做上述同样处理。

投屏录屏适配

投屏录屏时需要前后景叠加,用于叠加的 RT 在默认管线的后处理环境下,会失去透明通道数据,因此需要恢复 RenderTexture 透明通道数据。

标准 URP 管线的后处理是会丢弃 alpha 通道不做处理,以 1.0 固定值输出。

针对该问题,我们可以用恢复后处理 RT 的 alpha 的思路从根本上解决:找到后处理的 shader,修改 shader 恢复 alpha 通道的数据

这里我们提供两种可供尝试的途径:

**一种直接修改默认 URP 的后处理 Shader **

另一种是使用自定义渲染管线,替换默认的后处理 Shader**;**

方法一:修改默认 URP 的后处理 Shader

  1. 该方法需要先将 URP package 做本地化处理

URP Package 本地化处理

  1. 进入工程 Library/PackageCache 目录,找到“com.unity.render-pipelines.core”和“com.unity.render-pipelines.universal”,复制到外部目录(非工程目录下)。
  2. 在 PackageManager 中 remove 这两个包
  3. 再通过“Add package from disk”添加本地包 可以参考 Unity - 如何修改一个 Package 或是如何将 Package Local 化_unity 修改 package 文件夹-CSDN 博客
  1. 找到后处理 shader
  • 打开“window/Analysis/FrameDebugger”
  • 点击“Enable”,在 Scene 面板选择对应的渲染相机
  • FrameDebugger 中选择后处理流程,在右侧点击 shader“UberPost.shader”
  1. 修改编辑后处理 shader
  • 打开“UberPost.shader”
  • 找到 shader 末尾返回 color 的代码
json

return half4(color, 1.0)


> > 有外扩通道如bloom,blur等修改为

> ```sql
half alpha=max(color.r,color.g);
alpha=max(alpha,color.b);
alpha=max(alpha,SAMPLE_TEXTURE2D_X(_SourceTex, sampler_LinearClamp, uv).a);

return half4(color, alpha);

无外扩通道修改为

json

half alpha=SAMPLE_TEXTURE2D_X(_SourceTex, sampler_LinearClamp, uv).a;

return half4(color, alpha);




### 方法二:使用自定义管线重写后处理Shader

将方法一修改后的shader作为新建自定义管线的后处理默认shader,可以避免URP package本地化的操作。

但需要开发者对URP有一定了解。

具体项目中,开发者可以参考本方法,根据自己项目需求进行修改自定义管线。

1. 下方的Post.unitypackage是我们提供的一个自定义后处理管线,导入工程
	
2. 对先管线包里的AR Universal Pipeline Asset,在对应的摄像机中选择所需的Renderer,默认的无通道原生效果(Universal Renderer Data)
	- 需要通道的Camera(ProjectionManager等prefab中的Camera)选用 Universal Renderer Alpha
	- 无需通道的Camera(CameraRig)默认Universal Renderer Data
	![](https://ar-scene-source.nosdn.127.net/76be4e793732130a07806c23e8221bec/5ZEs8sbtbLhGTUCqWtsM1mpjM8Moek0q.png)

3. Universal Renderer Alpha 使用是本地路径Assets/Settings/Post/UberPost.Shader,可根据项目需要自行修改内容

4. 在Assets中分别搜索“CameraRig”和“ProjectionManager”,找到CameraRig.prefab并打开编辑,对CenterCamera, LeftCamera,RightCamera,设置Rendering/Renderer为“Universal Renderer Data”, 找到ProjectionManager.prefab并打开编辑,对RGBCamera设置Rendering/Renderer为“Universal Renderer Alpha”。

5. 确认步骤4中Camera/Rendering/PosstProcessing已经勾选

## 特效材质丢失通道问题

默认材质使用Blend Additive的叠加方式,录屏或投屏不能正确的获取透明通道。

可自行编写Blend Additive的shader需将Blend Alpha设置成SrcAlpha OneMinusSrcAlpha

```sql
Blend One One, SrcAlpha OneMinusSrcAlpha

并在最后输出的时候给计算 alpha 值

sql
return half4( Color, Alpha );