URP是Unity基于SRP提供的兼顾表现与性能的渲染管线。URP前身命名为LWRP(轻量级渲染管线),后更名为URP。

URP已包含在新建工程的工程模板中

  • URP使用简化的基于物理的照明和材质来实现高质量的快速渲染。
  • URP使用单遍正向渲染,以在多个平台上优化实时性能

官方配置说明文档:

https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@11.0/manual/universalrp-asset.html

BaseCamera与Overlay相机

  • URP支持两种RenderType不同的相机类型:Base与Overlay
  • Overlay相机渲染在Base相机在上,用于实现UI上的3D显示
  • Overlay相机必须加到BaseCamera上的Stack上,才能生效
  • Overlay相机不能应用post-processing

Post-processing

  • UPR实现了自己的后处理:Volume组件
  • 手机友好的后处理
    • Bloom (with High Quality Filtering disabled)
    • Chromatic Aberration 色差
    • Color Grading
    • Lens Distortion 镜头失真
    • Vignette 插图
  • 景深:
    • 在低端机上使用高斯景深( Gaussian Depth of Field)
    • 在桌面平台使用散景景深(Bokeh Depth of Field)
  • 抗锯齿:建议使用FXAA

Shader与材质球

官方文档

  • URP使用与内置渲染管线不一致的着色方法,因此内置光照与自定义光照着色器(Lit Shader)不能在URP中使用。URP有自己一套Lit Shader。
  • 内置管线的Unlit Shader(非光照Shader)仍然可以在URP中使用
  • 可以在所有平台使用URP的Lit Shader。Lit Shader基于PBR。在URP中,Standard Shader和Standard (Specular setup) Shaders 会被指向URP的Lit Shader
  • 非PBR可以使用Simple Lit shader,
  • 不需要实时光照,可以使用Baked Lit Shader

// This shader draws a texture on the mesh.

Shader "Example/URPUnlitShaderTexture"

{

    // The _BaseMap variable is visible in the Material's Inspector, as a field

    // called Base Map.

    Properties

    {

        _BaseMap("Base Map", 2D) = "white"

    }

    SubShader

    {

        Tags { "RenderType" "Opaque" "RenderPipeline" "UniversalPipeline" }

        Pass

        {

            HLSLPROGRAM

            #pragma vertex vert

            #pragma fragment frag

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

            struct Attributes

            {

                float4 positionOS   : POSITION;

                // The uv variable contains the UV coordinate on the texture for the

                // given vertex.

                float2 uv           : TEXCOORD0;

            };

            struct Varyings

            {

                float4 positionHCS  : SV_POSITION;

                // The uv variable contains the UV coordinate on the texture for the

                // given vertex.

                float2 uv           : TEXCOORD0;

            };

            // This macro declares _BaseMap as a Texture2D object.

            TEXTURE2D(_BaseMap);

            // This macro declares the sampler for the _BaseMap texture.

            SAMPLER(sampler_BaseMap);

            CBUFFER_START(UnityPerMaterial)

                // The following line declares the _BaseMap_ST variable, so that you

                // can use the _BaseMap variable in the fragment shader. The _ST

                // suffix is necessary for the tiling and offset function to work.

                float4 _BaseMap_ST;

            CBUFFER_END

            Varyings vert(Attributes IN)

            {

                Varyings OUT;

                OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);

                // The TRANSFORM_TEX macro performs the tiling and offset

                // transformation.

                OUT.uv = TRANSFORM_TEX(IN.uv, _BaseMap);

                return OUT;

            }

            half4 frag(Varyings IN) : SV_Target

            {

                // The SAMPLE_TEXTURE2D marco samples the texture with the given

                // sampler.

                half4 color = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, IN.uv);

                return color;

            }

            ENDHLSL

        }

    }

}

  • 需要额外声明TextureObj

TEXTURE2D(_BaseMap);

  • 贴图采样器的声明

SAMPLER(sampler_BaseMap);

  • CBUFFER

CBUFFER_START(UnityPerMaterial)

    // The following line declares the _BaseMap_ST variable, so that you

    // can use the _BaseMap variable in the fragment shader. The _ST

    // suffix is necessary for the tiling and offset function to work.

    float4 _BaseMap_ST;

CBUFFER_END

  • 顶点函数中物体空间到裁剪空间的转换

OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);

  • UV的计算

OUT.uv = TRANSFORM_TEX(IN.uv, _BaseMap);

  • 贴图采样

half4 color = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, IN.uv);

Unity SRP初识之URP相关推荐

  1. Unity SRP系列——DrawCalls

    实例原文 Unity通用渲染管线(URP)系列(二)--Draw Calls(Shaders&Batches) - 知乎 (zhihu.com) Draw Calls (catlikecodi ...

  2. 【Unity特效】LWRP/URP(Lightweight RP/Universal RP)和ShaderGraph下载及安装配置

    [Unity特效]-LWRP/URP(Lightweight RP/Universal RP)和ShaderGraph下载及安装配置 仅作为学习过程中的记录 使用Unity版本为2020.1.9 Sh ...

  3. Unity 升级项目到Urp(通用渲染管线)以及画面后处理

    前言: Urp全称为Universal Render Pipeline,即通用渲染管线 在开始学习Urp之前,需要了解一下,什么是Render PipeLine(渲染管线),渲染管线也称为渲染流水线或 ...

  4. Unity SRP Batcher 合批 BUG?- SRP: Node use different shader keyword

    文章目录 环境 问题 论坛发现同问 发问者解答 环境 Unity : 2019.4.30f1 URP : 7.7.1 问题 合批失败的原因显示:SRP: Node use different shad ...

  5. unity SRP Batcher与GPU instancing使用情况

    SRP Batcher更合适大量不同的物体, 比如材质上用了不同的贴图.参数.等等,只要shader变种不变,即使不同材质也能合并: GPU instancing 必须同材质同参数,只是可以自定义ma ...

  6. Unity批量替换材质 URP项目

    Unity批量替换材质 URP项目 笔者此刻写文章的时候对Shader仅限于能看懂,以及Unity的shader和hlsl可以互相调用都是才了解,现在的需求是批量替换旧Shader至新Shader. ...

  7. Unity SRP URP HDRP 的区别

    https://blog.csdn.net/weixin_41622043/article/details/107623694 1.Build-In Render 内置渲染器(默认)兼容太多,反而不能 ...

  8. unity两个项目合并 同名_从实际项目升级中关于 Unity SRP 的一些评测

    Untiy 推出SRP 已经接近一年了,其中官方宣称 LWRP 在2018年年底时已经处于 production ready 既随时可以做产品了,于是改名为URP, 不过 HDRP 还需要2019.4 ...

  9. Unity SRP世界空间重建

    世界空间重建解决的是:当我们在不透明物体渲染完成,想要知道深度缓存中保存当前渲染的物体的世界空间位置.这个功能还是比较常用的,一些后处理效果比如雾效,ScreenSpace效果都基于此. 重建世界空间 ...

最新文章

  1. linux mysql 卸载,安装,測试全过程
  2. 实现统计一个字符串中的每个单词出现的次数--基于Go语言
  3. 复杂的选择屏幕搜索帮助
  4. shared_ptr 循环引用问题以及解决办法
  5. 力扣--91. 解码方法
  6. 谷歌智能助理能同时听懂两种语言 超过同类产品
  7. html小写数字怎么转换大写,如何将数字123转化成大写的文字 一百二十三 或 一二三?...
  8. ​windows系统——更改系统音效为钢铁侠贾维斯​
  9. 3000字长文:探讨报销系统使用满意度的NPS指标设计
  10. WPS2019 装完图片默认打开方式改了, 改成了 WPS 打开
  11. 智能操控装置在高压开关柜中的应用
  12. 山东计算机设计大赛,山东大学控制学院本科生获中国大学生计算机设计大赛国家级二等奖...
  13. 笔记本外接显示器无声音
  14. 多浏览器同步测试工具的设计与实现
  15. Android源码编译及替换成自己编译的linux内核
  16. 小白兔写话_小白兔看图写话
  17. php h5页面微信登录页面,客户端,微信内置浏览器加载H5页面字体变大问题
  18. mysql怎么加快搜索_优化mysql数据库 提高检索速度
  19. 中国标准时间、2021-01-11T09:49:43.000+0000等各种时间的转换、各种时间处理
  20. 升级长江存储最新闪存,忆恒创源发布新一代企业级NVMe SSD

热门文章

  1. python again_It’s really(wonder)________ to see you here again in Beijing.
  2. 兔子繁殖问题----Python
  3. 在VMware WorkStation中安装Windows Server 2016
  4. Jeecg-Boot前端部署
  5. html盒模型中border的写法,CSS盒模型--边框设置:border: 1px solid red(像素 样式 颜色 ),border-bottom:1px dotted #ccc...
  6. 三菱运动控制电子凸轮应用 三菱Q173系列的电子凸轮使用
  7. 微信抢票开发实践总结
  8. Excel 数据统计小技巧
  9. 软件测试怎么自学?史上最全的「软件测试」自学路线图+资源包
  10. 计算机日历教案,计算机基础教学日历.doc