Unity内置渲染管线升级URP教程

这篇具有很好参考价值的文章主要介绍了Unity内置渲染管线升级URP教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

URP全称为Universal Render Pipeline(通用渲染管线),可以提供更加灵活的渲染方案,通过添加Render Feature实现各种渲染效果。并且可以针对移动平台进行专门的优化,同时还提供了SRPBatcher提高渲染效率。Unity的一些工具,比如ShaderGraph,也是必须在URP管线下才可以使用,可以说许多方面均优于内置渲染管线。

所以如果还在使用内置渲染管线的,建议尽早升级到URP。通过本文,可以了解到如何从内置管线升级到URP。并且记录了一些升级时可能遇到的问题和解决方法。

一、安装并配置URP

1.安装对应package

unity urp渲染管线,Unity开发方案和知识,unity,前端,游戏引擎,图形渲染

2.创建配置

Create->rendering->Universal pipeline->Pipeline Asset(Forward Renderer)生成两个配置文件(目前放在Pipeline文件夹下)

unity urp渲染管线,Unity开发方案和知识,unity,前端,游戏引擎,图形渲染

Edit->Project Settings->Graphics 界面,将UniversalRenderPipelineAsset拖入

unity urp渲染管线,Unity开发方案和知识,unity,前端,游戏引擎,图形渲染

3.统一升级自带的shader

Edit->Render Pipeline->Universal Render Pipeline-> Upgrade Project Materials to Universal PR Materials

可以将使用默认built-inShader升级到URP的Shader

二、关于内置管线升级至URP管线的问题处理

在未使用URP管线的时候,由于一些shader是使用CG语言写的,而URP并不支持该语言。所以需要将其改为HLSL(High level shader language)编写。

查看对应源文件

1、cginc文件的内置函数可以在Editor引擎安装目录下查看  xxx\Editor\2020.1.0f1c1\Editor\Data\CGIncludes

2、hlsl文件则是在工程对应的Library文件下可以找到:

以Core.hlsl为例子,头文件路径为

Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl

实际在工程中的位置是

xxx\ProjectName\Library\PackageCache\com.unity.render-pipelines.universal@8.2.0\ShaderLibrary\Core.hlsl

宏替换


CGPROGRAM    ENDCG    //替换前是CG语言的宏 

HLSLPROGRAM    ENDHLSL    //替换后使用HLSL语言的宏

包含的头文件替换


#include "UnityCG.cginc"//替换前
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"//替换后

//----------------------------分割线---------------------------------------

#include "Lighting.cginc"//替换前
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"//替换后
  

Tag替换


Tags { "LightMode" = "ForwardBase" } //替换前
Tags { "RenderPipeline" = "UniversalPipeline" }//替换后

对Texutre2D的处理


uniform sampler2D _BumpMap; //替换前是一个sampler2D变量
TEXTURE2D(_MainTex);//替换后需要使用两个变量 TEXTURE2D和sampler
SAMPLER(sampler_MainTex);

//----------------------------分割线---------------------------------------

float4 mainColor = tex2D(_MainTex, i.tex);//替换前对texture2d的采样是两个参数
float4 mainColor = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.tex);//替换后是
//三个参数的函数,前两个参数,就是一开始对声明替换时的两个参数.
 

参考文档

升级Urp

https://www.jianshu.com/p/3fef69e2efb6

https://zhuanlan.zhihu.com/p/147228689

三、场景内组件修改

1.多相机修改

URP管线相机不再支持相机的depth属性。主摄像机RenderType设置为base。其他的摄像机的RenderType 都是Overlay类型。

unity urp渲染管线,Unity开发方案和知识,unity,前端,游戏引擎,图形渲染

并且需要将其他相机加入到主相机的Stack中

unity urp渲染管线,Unity开发方案和知识,unity,前端,游戏引擎,图形渲染

四、如何启用SRPBatcher

SRP Batcher 是一个渲染循环,可通过许多使用同一着色器变体的材质来加快场景中的 CPU 渲染速度。虽然不会减少DC的次数,但是SRPBatcher可以降低准备DC数据的耗时。相关的官方文档https://docs.unity3d.com/cn/2020.2/Manual/SRPBatcher.html

注意事项

同一个Shader不能同时启用SRP Batcher或者Gpu Instance。并且SRP Batcher的优先级是最高的。会导致原先可以合批的DC被打断。

1.设置

需要在URP设置中的Advaneced->SRP Batcher打开

unity urp渲染管线,Unity开发方案和知识,unity,前端,游戏引擎,图形渲染

2.修改Shader以支持SRPBatcher

需要用CBUFFER_START(UnityPerMaterial)CBUFFER_END,将所有Properties内声明的变量包住。例子如下:


Properties
{
    _Tint("_Tint", Color) = (1,1,1,1)
    _MainTex("_MainTex (albedo)", 2D) = "white" {}
    _Specular ("Specular", Color) = (1, 1, 1, 1)
    _Gloss ("Gloss", Range(8.0, 256)) = 80
 }
SubShader
{
     Pass
     {
         CBUFFER_START(UnityPerMaterial)//这里是添加的代码
         TEXTURE2D(_MainTex);
         SAMPLER(sampler_MainTex);
         float4 _MainTex_ST;
         float4 _Specular;
         float _Gloss;
         half4 _Tint;
         CBUFFER_END//这里是添加的代码
      }
}

需要注意的是,像Properties内的纹理变量,虽然声明的时候只有一个变量,但是相关的SAMPLER变量也要包在CBUFFER内。

unity urp渲染管线,Unity开发方案和知识,unity,前端,游戏引擎,图形渲染

修改后如果支持SRPBatcher,在对应shader的Inspector界面的SRPBatcher属性会显示为compatible

如果是不支持SRPBatcher的Shader对应Shader的SRPBatcher属性会显示为not compatible,并且会显示不支持的原因

unity urp渲染管线,Unity开发方案和知识,unity,前端,游戏引擎,图形渲染

3.SRPBatcher性能优化的检测工具

1.添加SRPBatcherProfiler.cs文件添加到工程中,代码库地址是https://github.com/Unity-Technologies/SRPBatcherBenchmark

2.将SRPBatcherProfiler脚本拖到需要进行检测的场景中,点击F8显示/隐藏SRPBatcherProfiler界面,点击F9打开/关闭(实际发现F9功能不好使,无法中途打开关闭)SRPBatcher功能。可以对比打开该功能前后的CPU消耗情况。

五.升级URP之后的一些异常现象

1.Culling mask导致光照的表现不同

升级URP后发现物体的光照表现不太一样。经过测试发现,在内置管线时,light的Culling mask是有效的,而在URP下,Culling mask失效了。多光源的情况下,HLSL和GC两个Shader通过GetMainLight获取的光线都是不同的。

处理方式是获取所有的AddtionalLight,然后根据light的distanceAttenuation值去判断,哪个光源是真正作用在目标物体上的。(Culling mask校验通过的光源light.distanceAttenuation不为0)


                Light light = GetMainLight();
                if( light.distanceAttenuation == 0)
                {
                     int addLightsCount = GetAdditionalLightsCount();//定义在lighting库函数的方法 返回一个额外灯光的数量
                     for (int idx = 0; idx < addLightsCount; idx++)
                     {
                        Light addlight = GetAdditionalLight(idx, i.worldPos);//定义在lightling库里的方法 返回一个灯光类型的数据
                        if(addlight.distanceAttenuation>0)
                        {
                            light = addlight;
                            break;
                        }
                     }
                }

2.Frame Debugger显示异常

2020.3.36f1c1版本中,打开FrameDebugger。场景并不会随着渲染阶段而变化

unity urp渲染管线,Unity开发方案和知识,unity,前端,游戏引擎,图形渲染

unity urp渲染管线,Unity开发方案和知识,unity,前端,游戏引擎,图形渲染

找到相关文章,该问题是Unity的Bug,在关闭urp的msaa选项之后,FrameDebugger就可以正常显示

unity urp渲染管线,Unity开发方案和知识,unity,前端,游戏引擎,图形渲染

3.报错 Shader properties can't be added to this global property sheet. Trying to add _GrabTexture_TexelSize (type 1 count 1)

UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)

Shader properties can't be added to this global property sheet. Trying to add _GrabTexture_HDR (type 1 count 1)

UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)

这个是因为URP不支持GrabPass导致,处理方法是将Shader中无用的GrabPass删除,如果需要用到屏幕截图,修改成HLSL语言,然后利用SAMPLER(_CameraOpaqueTexture);来代替grabTexture文章来源地址https://www.toymoban.com/news/detail-578219.html

到了这里,关于Unity内置渲染管线升级URP教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity 踩坑系列】项目升级URP/HDRP渲染管线时如何解决材质丢失问题 (模型全部为粉红色)

    在我们创建项目时候如果我们一开始使用的是默认内置渲染管线,后期项目需要升级到URP或者HDRP渲染管线时有可能会出现预制体材质丢失的问题(原因是大部分资源的预制体在Unity官方推荐使用URP渲染管线之前,都只是使用默认内置管线的材质。所以并不适配现在的URP渲染管

    2024年02月16日
    浏览(57)
  • Unity-3DRPG游戏 学习笔记(1)--使用URP渲染管线

    教程地址: Unity2020 3DRPG游戏开发教程|Core核心功能01:Create Project 创建项目导入素材|Unity中文课堂_哔哩哔哩_bilibili 创建URP通用渲染管线(2021版本) 1. 打开:Windows--Package Manager--左上角下拉选择Unity Registry--搜索Universal RP--Install 2. Project窗口--Assets--右键Create--Rendering--URP Asstes

    2024年02月11日
    浏览(43)
  • 【Unity URP渲染管线下设置灯光数量上限_灯光不显示问题案例分享】

    1.我的这个项目是在URP渲染管线下,我在场景里创建了六个点灯,转动物体的时候,发现灯显示不全,会一闪一闪的出现。 2.在RenderPipelineAsset配置文件中查看灯光数量上限,首先在EditProject Setting 3.在Project Setting里选Quality,在Rendering找到UniversalRP Asset 4.选中UniversalRP Asset文件

    2024年02月16日
    浏览(45)
  • 渲染管线丢失 /项目升级为URP

    打开Package Manager 下载Universal RP 2.在project面板中 create = rendering = URP = Pipeline Asset 在 Project Setting 中的 Graphics和Quality选择URPAsset 如果导入新资源 更新一下RenderPipeline 即可 步骤:Edit=Render Pipeline=Generate Shader

    2024年02月16日
    浏览(34)
  • Unity3D学习记录01:URP渲染管线以及3D游戏场景设置

    以下内容所使用的版本均为Unity2022.3 先在 Window-Package Manager-Unity Registry 里面搜索添加Universal RP   Unity中,创建渲染管线的方式为Asset文件夹下右键 Create-Readering-URP Asset(with Universal Asset) 会创建以下两个Pipeline:  接着在图中的设置里添加这两个渲染管线(Project Setting在Edit窗口下

    2024年02月08日
    浏览(58)
  • 【Unity Shader Graph URP渲染管线下的自定义半透明效果_半透明案例分享】

    URP的渲染管线下 在项目设置里找到“Graphic” 找到URP Asset文件 索引到Renderer List文件——“ForwardRenderer” 在这个“ForwardRenderer”文件里找到“Add Renderer Feature” 添加一个渲染对象,类似下图:Render Object (Experimental) 如图设置,将“Event”设置成 AfterRenderingSkybox ,然后“Layer M

    2024年02月09日
    浏览(58)
  • Unity Shader 学习笔记(4)URP渲染管线带阴影PBR-Shader模板 -- 新增可自定义阴影颜色

    材质面板截图 功能实现(URP渲染管线下): 1、进一步优化Shader结构和算法; 2、包含PBR材质; 3、投射和接收阴影,并升级 支持自定义阴影颜色 ; 4、支持点光源照射(但不支持点光源阴影)。 通用渲染截图 自定义阴影颜色截图 完整代码: 写在最后: 1、在我的上一篇文

    2024年02月12日
    浏览(48)
  • Unity PS5开发 天坑篇 之 URP管线与HDRP管线部署流程以及出包介绍04

    目录 一, URP管线、HDRP管线下的Unity项目部署 1. PS5开发论坛关于Unity可支持的版本说明: 2. URP管线下的项目与部署 2.1 Build PS5 URP Project 2.2 运行画面 3. HDRP管线下的项目与部署 3.1 附上可以运行的画面: 4. PS5打包方式介绍 4.1 PC串流调试模式: Build Type: PC Hosted  4.2 增量包模式: BuildT

    2024年04月22日
    浏览(37)
  • 如何通过代码在Unity设置URP通用渲染管线资源的画质选项、后处理效果、渲染分辨率、抗锯齿效果、Renderer Features等效果并制作一个可以设置它们的UI

       Hello喔 这里是没有鱼的猫先生,本期文章的主题佬们有看到标题了 QWQ    当使用Urp管道项目时,我们需要在一个Urp通用管线资源的项目中修改它的各种效果以玩家自己设置不同的画质需求,那下面这个通用脚本便诞生了,它也许并不适用于所有的场景,但是相信应用过它

    2024年02月09日
    浏览(41)
  • Unity SRP 管线【第四讲:URP 阴影】

    在UniversalRenderer.cs/ line 505行处 此处已经准备好了所有渲染数据(所有数据全部存储在了renderingData中) 我们只用renderingData中的数据初设置mainLightShadows 进入函数 m_MainLightShadowCasterPass.Setup(ref renderingData); 在UniversalRenderer管线创建的时候,我们已经做了创建 我们设置MainLightShado

    2024年02月03日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包