(翻译)

Lightweight Render Pipeline (LWRP),轻量级渲染管线,是一个Unity预制的Scriptable Render Pipeline (SRP)。LWRP可以为移动平台提供图形渲染功能,但你也可以在高端主机和PC上使用LWRP。LWRP使用简化的、基于物理的光照和材质。

LWRP使用single-pass 前向渲染(forward rendering)。使用LWRP,可以在几个平台上 得到优化了的实时渲染性能。

LWRP支持以下平台:

  • Windows and UWP
  • Mac and iOS
  • Android
  • XBox One
  • PlayStation4
  • Nintendo Switch
  • All current VR platforms

Lightweight Render Pipeline有两种可用的模板: LWRP和LWRP-VR。LWRP-VR具有预先开启的VR设置(pre-enabled settings for VR)。两者的文档是一样的。

注意: Built-in和 custom Lit Shaders无法和LWRP一起工作。因为LWRP有一套新的standard shaders。如果你升级(upgrade)当前项目来使用LWRP,你需要升级 built-in shaders到LWRP对应的新的shaders。(LWRP提供了相应的工具)

注意: 使用LWRP的项目无法与 High Definition Render Pipelin及Unity built-in rendering pipeline兼容。因此开发前,你要想清楚用哪一个渲染管线。

Getting started with LWRP

为了使用Lightweight Render Pipeline,你可以新建一个项目或者升级已存在的项目。

一旦你有了一个使用LWRP的项目,你必须创建一个Scriptable Render Pipeline (SRP) Asset (LWRP提供了工具),然后配置项目的Graphics settings。

接下来三个子章节为细节讨论:

  • 创建一个新项目来使用LWRP
  • 升级旧项目来使用LWRP
  • 配置LWRP,包括创建SRP Asset,修改Graphics settings。

Using LWRP in a new Project

如果你想在新项目中使用LWRP,你可以用LWRP模板(templates)来创建新项目。

使用用模板创建新项目(适用于Unity 2018.1后的版本):

  1. 打开Unity。在Unity主页(Home),点击New来创建一个新项目(new Project)。模板(Template)下拉框中选择LWRP模板。
  2. 点击Create Project。Unity会自动为你创建一个带有全部LWRP功能的新项目。

关于更多关于模板使用的信息,请查阅Project Templates

注意: 创建完项目后,在开始使用LWRP前,你必须配置LWRP,即创建SRP Asset,修改Graphics settings。具体做法,请继续看本文下面的** Configuring LWRP for use**。

Installing LWRP into an existing Project

如果你是新建项目来使用LWRP,可以直接跳过这一小节,直接看下一小节Configuring LWRP for use

你可以通过Unity的Package Manager System来下载和安装最新版本的LWRP。

为已存在的项目安装LWRP:

  1. 在Unity中,打开项目。在顶部的导航条,点击 Window > Package Manager来打开Package Manager窗口。选择All标签页。这个标签页显示了当前版本的Unity可以使用的包(packages)。
  2. 从packages列表中选择Lightweight Render Pipeline。在窗口右上角点击Install。这会直接为你的项目安装LWRP。

注意: 在开始使用LWRP前,你必须配置LWRP,即创建SRP Asset,修改Graphics settings。具体做法,请继续看本文下面的** Configuring LWRP for use**。

注意: 把一个已存在的项目切换到LWRP会消耗大量时间和资源。LWRP使用custom lit shaders,是不和built-in Unity lit shaders兼容的。你必须手动修改或转换大量内容。嫌麻烦的话,可以考虑使用LWRP启动一个新项目。

Configuring LWRP for use

为了配置和使用LWRP,你必须首先:

  • 创建Lightweight Render Pipeline Asset,然后
  • 添加此Asset到项目的Graphics settings中。

下面有更详细的步骤。

Creating the Lightweight Render Pipeline Asset

Lightweight Render Pipeline Asset控制着项目的全局rendering和quality settings,并且创建rendering pipeline instance。rendering pipeline instance包含中间资源(intermediate resources)和render pipeline的实现。

创建一个Lightweight Render Pipeline Asset的步骤:

  1. 在Editor中,转到Project window。
  2. 在Project window中右击,选择Create > Rendering > Lightweight Render Pipeline > Pipeline Asset。或者在顶部菜单栏中点击 Assets > Rendering > Lightweight Render Pipeline > Pipeline Asset
  3. 对于此新创建的Asset,可以使用默认的名字或者输入一个新名字。现在你已经创建了一个LWRP Asset。

提示: 你可以为不同平台(或不同测试环境)创建多个具有不同配置的LWRP Assets。

Adding the Asset to your Graphics settings

为了使用Lightweight Render Pipeline,你必须把刚刚新创建的LWRP Asset添加到Unity的Graphics settings中。如果不这样做,Unity会尝试使用built-in render pipeline。

  1. 在顶部菜单栏点击: Edit > Project Settings > Graphics
  2. Render Pipeline Settings域中添加你刚创建的LWRP Asset。

    添加完成。

Lightweight Render Pipeline Asset

LWRP Asset为Lightweight Render Pipeline控制着几个graphical features和quality settings。它是一个scriptable object,继承自RenderPipelineAsset。当你把LWRP Asset设置到Graphics settings时,Unity会从built-in render pipeline切换到LWRP。你可以直接在LWRP中调试相应的配置,而不用去别的地方了。

你可以拥有多个LWRP assets,并在它们之间进行切换。例如,你可以有一个打开阴影的LWRP Asset和一个关闭阴影的LWRP Asset。然而,你不能在HDRP/SRP和LWRP assets之间进行切换,因为它们之间是互不兼容的。

Shader Stripping

Unity可以从单个Shader源文件中编译出多个Shader变体(Shader Variants)。Shader Variants的数量取决于你的Shader中包含了多少关键字。在默认着色器中,Lightweight Render Pipeline为lighting和shadows使用了一系列关键字。LWRP可以根据你在LWRP Asset中激的features,排除一些Shader variants。

当你在LWRP Asset中禁用某些featurers时,pipeline会从构建中(from the build)剥离相关的Shader variants。剥离Shaders使你的build sizes更小,需要更短的build times。如果你的项目不会用到某些features或keywords,Shader Stripping就很有用。

例如,你的某个项目中directional lights可能用不到shadows。没有Shader stripping的话,带有directional shadow支持的Shader variants仍然存在于build中。如果你知道你根本用不到shadows,你可以在LWRP Asset中uncheck Cast Shadows。这样LWRP会把这些Shader Variants从build中剥离。

Built-in/LWRP comparison

这里有一张Feature comparison table,显示了LWRP和Unity Built-in render pipeline支持的features的对比。

Shading models in Lightweight Render Pipeline

一个shading model定义了材质的颜色是怎么随着影响因素(如:surface orientation, viewer direction 和 lighting)变化的。你选择哪个shading model决定于艺术倾向(artistic direction)和程序的性能预算。LWRP提供的Shaders具有以下shading models:

  • Physically Based Shading
  • Simple Shading
  • Baked Lit Shading
  • No lighting

Physically Based Shading

Physically Based Shading (PBS) 基于于物理定律通过计算表面(surface)的反射光问题来模拟物体在真实世界中的样子。利用它可以生成逼真的物体(objects),即真实感渲染。

PBS模型遵守以下两条规则:

Energy conservation - 能量守恒,表面反射的光的总量决不会大于总的入射光量。除非物体本身也是发光体,如霓虹光。Surfaces在微观层次具有微几何形态(Microgeometry )。一些物体具有光滑的微身体形态(smooth Microgeometry),这使物体看起来像“镜子”。别的物体具有粗糙的微身体形态。使用LWRP,你可以模拟被渲染物体的表面的光滑度。

当光到达被渲染物体表面时,部分光被反射,部分光被折射。反射的光叫镜面反射,specular reflection。它会随着Camera的方向和表面上的到达点而变化。在这个shading model中,高光区域(specular highlight)的形状是用GGX function来近似的。

对于金属物体,其表面会吸收和改变光。对于非金属物体(non-metallic objects),其表面会反射部分光。

光的衰减只受光的强度(light intensity)影响。这意味着你不必为了控制衰减而增加光的范围(range),因为没用的。

下面这两个LWRP Shaders使用Physically Based Shading:

注意:PBS模型不适用于低端手机硬件。如果你的目标平台是这种低端手机硬件,请使用下面要讲的Simple Shading模型。

Simple shading

这个shading模型适用于风格化的视觉效果(stylized visuals)或者运行于非高端硬件平台(less powerful platforms)上的游戏。使用这个shading model的材质并不具有真正的(truly)photorealistic。这个shading model不遵守能量守恒定律,是基于Blinn-Phong模型的。

在Simple Shading model中,材质反射漫反射光和镜面高光,两者之间没有关联。材质反射的漫反射光和高光的问题取决于你设置的材质属性,并且反射光的总量可以超过超过入射光的问题。镜面反射仅随camera direction变化。

光的衰减(light attenuation)仅受光强影响。

下面这些LWRP Shaders使用了Simple Shading:

Baked Lit shading

Baked Lit shading没有实时光照(real-time lighting)。材质可以接受来自lightmapsLight Probesbaked lighting。这以较小的性能代价为场景增加了一些深度。使用这个shading model的游戏可以运行于less powerful platforms。

LWRP Baked Lit shader是唯一使用Baked Lit shading的shader。

Shaders with no lighting

LWRP提供了一些不使用光照的Shaders。这意味着它们没有directional lights,也没有baked lighting。因为没有光照计算,这些shaders的编译速度会比有光照的Shaders快。

下面这些LWRP Shaders没有光照:

参考:

  1. Lightweight Render Pipeline

首次发表于我的知乎专栏:https://zhuanlan.zhihu.com/p/69766402

Lightweight Render Pipeline的更多相关文章

  1. 1.5:Unity Render Pipeline

    文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 这一节主要是为上一节中没有提到的一些概念作补充. 上一节提到了Unity中 ...

  2. 1.3:Render Pipeline and GPU Pipeline

    文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 在学习SubShader之前,我们有必要对 Render Pipeline ...

  3. [Unity] Shader Graph Error 当前渲染管道与此主节点不兼容(The current render pipeline is not compatible with this master node)

    Shader Graph Error  : The current render pipeline is not compatible with this master node 问题产生环境: Un ...

  4. Scriptable Render Pipeline

    Scriptable Render Pipeline SRP的核心是一堆API集合,使得整个渲染过程及相关配置暴露给用户,使得用户可以精确地控制项目的渲染流程. SRP API为原有的Unity构件提 ...

  5. Scriptable render pipeline unity

    https://www.youtube.com/watch?v=zbjkEQMEShM LWRP https://blogs.unity3d.com/cn/2018/02/21/the-lightwe ...

  6. unity render pipeline

    post process v2 GUI temp8->TaregtPool0->temp8       tem8                      temp8->backbu ...

  7. 可编程渲染管线(Scriptable Render Pipeline, SRP)

    原文链接 可编程渲染管线处理数据的流程可分为以下3大阶段 1. 应用阶段 这个阶段大概会由CPU处理4件事情.首先会对模型数据进行可见性判断.模型数据由顶点位置.法线方向.顶点颜色.纹理坐标等构成.然 ...

  8. 聊聊如何正确向Compute Shader传递数组

    0x00 前言 前一段时间去英国出差,发现Unity Brighton 办公室的手绘地图墙很漂亮,在这里分享给大家. 在这篇文章中,我们选择了过去几周Unity官方社区交流群以及UUG社区群中比较有代 ...

  9. 开发自定义ScriptableRenderPipeline,将DrawCall降低180倍

    0x00 前言 大家都知道,Unity在2018版本中正式推出了Scriptable Render Pipeline.我们既可以通过Package Manager下载使用Unity预先创建好的Ligh ...

随机推荐

  1. Spring Cloud 学习 (八) Spring Boot Admin

    Spring Boot Admin 用于管理和监控一个或者多个 Spring Boot 程序 新建 spring-boot-admin-server pom <parent> <ar ...

  2. activiti笔记

    activiti笔记 核心api api介绍 1.ProcessEngine 说明: 1) 在Activiti中最核心的类,其他的类都是由他而来. 2) 产生方式: ProcessEngine pro ...

  3. 老猿学5G:3GPP和中国移动5G计费架构概览

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 老猿学5G这个专栏主要记录笔者因工作原因学习了解5G计费相关知识,文章按时间顺序循序渐进的介绍5G基础概念以及5G计费相关知识,该专栏前期已经完结, ...

  4. 第2.2节 Python的语句

    上节已经介绍了极简的Python代码编写,已经用到了赋值语句,本节对Python的程序语句进行介绍. 一. 常用命令 在介绍Python语句之前,先介绍一下几个有用的Python命令. dir(模块名 ...

  5. Python中倒转输入序列元素顺序的reversed函数

    reversed函数将输入的序列的元素倒转后存储到一个类型为"reversed"可迭代对象,不能直接访问,可以转换为其他对象如列表或通过for循环方法访问. 注意:这里是倒转不是倒 ...

  6. P4085 [USACO17DEC]Haybale Feast

    我又开始水了,感觉又是一道虚假的蓝题 题意 非常好理解,自己看吧 题解 可以比较轻易的发现,如果对于一段满足和大于等于 \(m\) 的区间和其满足和大于等于 \(m\) 的子区间来说,选择子区间肯定是 ...

  7. 题解-洛谷P4724 【模板】三维凸包

    洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...

  8. js-enter提交表单导致页面刷新问题

    问题:当页面只有一个文本框时,使用键盘enter操作执行提交表单的时候,会导致页面进行刷新,并且参数也会自动添加到url中. 解决办法: 1.给form添加onsubmit=return false; ...

  9. 精尽Spring MVC源码分析 - 寻找遗失的 web.xml

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  10. NSMutableArray 的实现原理

    一.普通C语言的数组实现: 是开辟一段连续的内存空间,缺点:在插入下标为0的元素,会移动其他所有元素.添加,插入,删除同理.           当数组非常大时,这样很快会成为问题.     二.OC ...