zoukankan      html  css  js  c++  java
  • Unity-URP、LWRP、SRP

    1 Sriptable Render Pileline

    1.1 主要把渲染管线拆分成二层:

    • 一层是比较底层的渲染API那层,像OpenGL,D3D等相关的都封装起来。
    • 另一层是渲染管线比较上层的描述,上层代码使用C#来编写。在C#这层不需要关注底层在不同平台上渲染API的差别,也不需要关注具体如何做一个Draw Call。

    1.2 特征

    官方基于SRP提供了二套模板:一个是LWRP(轻量级渲染管线,后改名URP),一个是HDRP(高清晰渲染管线)。

    1.3 建议:

    可以不改源码实现,就尽量不改源码,因为改了源码后,升级会很麻烦

    1.4 未来

    (移动游戏未来:AAA级,PBR,超大世界,各种特效,后处理...)

    2 LWRP

    2.1 优缺点

    优点

    • Scriptable Render Pass
    • SRP Batcher合批
    • Custom Render Pass

    缺点

    • Shadow Mask的功能, Unity 2019.3提供
    • 延迟渲染Deferred Rendering, Unity 2019.3提供

    2.2 Bilibili-LWRP介绍

    1)流程

    以下是传统的BuiltIn渲染,LWRP是在绿点插入绘制命令(CommandBuff)

    2)特征

    • 新的Shader库 -- Core和Lightweight RP库 , 更小的‘chunk’
    • 兼容性 -- Unlit Built-In Shader 兼容, 没有提供Surface Shaders
    • ShaderGraph -- 可视化编辑工具

    3)注意

    • Lwrp PBR shader模板
    • 如需对默认Shader Keywords删除,应管线设置中取消掉对应设置,Keywords就会在构建时候Strip掉
    • ..Core.hlsl包含有用变量和功能(类似UnityCG.cginc)
    • 如果声明属性为UnityPerMaterial,属性会保存于CBUFFEER中,SRP就可以在帧之间缓存材质属性。

    简单到复杂定制:

    • LWRP + shader graph
    • LWRP + Custom Render Passes
    • 编写自己的Custom Render Passes
    • 实现自己的Renderer
    • Build your own SRP from scratch

    实操教程(以下是国外教程的译文)

    Unity SRP系列教程


    3 Universal Render Pipeline

    3.1 介绍与使用

    1)介绍

    通用渲染管线Universal RP
    LWRP是URP之前的名称,两者基本没有区别,URP相对LWRP的变化主要是把PostProcessing集成到内部了。

    使用

    • 直接new URP工程
    • 或者现有工程安装Univeral RP包。
      1)在Other Settings > Color Space 选择Linear
      2)Create > Render >Pipiline Asset
      3)ProjectSettings > Graphisc

    URP前向渲染,光照优化的原因

    URP的单Pass Forward Renderering,会将光源一次性传入Forward Pass,但由于单Pass能够传的数据有限,现在最多支持一个直线光外加4个其他光源。

    3.1 后处理相关

    1
    General

    • Depth Texture : 获取属于URP的深度texture,也可在individual cameras 的inspector覆盖。

    Quality

    • HDR :让光的强度范围更大,更贴近真实。而不失细节。低硬件设备要禁用。
    • MSAA :抗锯齿
    • RenderScale :只对game rendering 生效。 UI Rendering is left at the native resolution for the device.

    3.2 URP 不支持的效果:

    • 基于方向运动的效果包括运动模糊
    • Screen Space Reflections (SSR)
    • 默认 基于计算的效果,比如:自动曝光。 只有设备硬件支持的时候才可以用,否则运行时unity会禁用掉

    3.3 移动设备使用URP将会带来不小消耗,如果用推荐

    Post-processing effects can take up a lot of frame time. If you’re using UniversalRP for mobile devices, these effects are the most “mobile-friendly” in the PPv2 stack:

    • Anti-aliasing (FXAA - Fast mode)
    • Bloom (Fast mode)
    • Chromatic Aberration (Fast mode) --色差
    • Color Grading (with LDR)
    • Lens Distortion
    • Vignette --晕映

    3.4 URP 优势:

    1 适合移动平台的PBR渲染管线
    2 非入侵式修改即可实现管线自定义
    3 有全部C#源码,渲染过程基本能全掌控
    4 性能表现更好 (通过RT自定义LoadStore操作、SRP Batcher)
    1)URP是一个单Pass的前向渲染管线,所有的动态光照是在一个Pass里面完成计算的
    2)URP采用了单Pass的Color Texture去替代GrabPass。通过一次抓取完成所需操作
    3)通过RT自定义LoadStore操作,进一步减少带宽。
    4)根据实际情况去掉一些不必要的Blit操作。
    5)SRP Batcher (SRP Batcher的原理是通过降低SetPassCall的数量来打造性能提升)

    (ILRuntime作者)林若峰以“Unity2019新特性在次时代手游《黑暗之潮》中的应用经验及技术分享”
    Bilibili视频

    4 SRP Batcher

    干什么?

    基于Shader的批处理
    SRP Batcher不是减少DrawCalls. 减少 GPU setup (cost between DrawCalls)

    原理

    SRP Batcher 是一个低级渲染循环,它使得Material 数据长久在GPU内存里。
    如果Material内容不变,SRP Batcher就不需要设置并上传buffer到GPU里。
    相反( 如果Material内容有变),SRP Batcher 使用专用的代码路径去快速更新Unity Engine属性到一个大型的GPU bufer里。

    兼容性

    官方:

    • The object must be in a mesh.
    • 使用的shader要兼容SRP Batcher.
    • 所有Lit and Unlit Shaders适用(HDRP、LWRP中的)
    • 不支持粒子或者skinned mesh.
    • 不支持使用了Material Property Blocks

    Shader 如何兼容with SRP(Inspector可查是否兼容):

    • built-in 的属性要声明在一个CBUFFER named “UnityPerDraw”. For example, unity_ObjectToWorld, or unity_SHAr.
    • 所有材质属性要声明在一个CBUFFER named “UnityPerMaterial”.

    You can see the compatibility status of a Shader in the Inspector panel. This compatibility section is only displayed if your Project is SRP based.

    使用:CBUFFER_START(UnityPerMaterial)声明

    //错误
    Properties
    {
    _Color1 ("Color 1", Color) = (1,1,1,1)
    _Color2 ("Color 2", Color) = (1,1,1,1)
    }
    float4 _Color1;
    float4 _Color2;
    
    //正确
    CBUFFER_START(UnityPerMaterial)
    float4 _Color1;
    float4 _Color2;
    CBUFFER_END
    

    3 Shader Graph

    shader Graph 入门:
    Shader Graph: Multiply - 2019.3

    SRP Batcher: Speed up your rendering!

  • 相关阅读:
    数据结构相关概念
    树的创建与遍历
    Java探索之旅(18)——多线程(2)
    Java探索之旅(17)——多线程(1)
    Java Servlet 笔记4
    Java Servlet 笔记3
    Java Servlet 笔记2
    Java Servlet 笔记1
    JavaBean实现用户登陆
    基于SSE4和多核编程的电子相册的实现
  • 原文地址:https://www.cnblogs.com/Jaysonhome/p/12900808.html
Copyright © 2011-2022 走看看