Unity HDRP高清渲染管线 (上)——艺术家工作流

本文创作于 2019/11/24

写在前面

  1. 这篇文章非常表层,几乎不会涉及原理
  2. 旨在使毕设小队的美术或刚接触HDRP的人学会基本操作
  3. 会从Assets空开始逐步搭建HDRP项目
  4. 会对 Diffusion Profile 和 Volume Profile 进行一些说明
  5. 会介绍 HDRP/Lit 以及其变种
  6. 美术同学把Volume Component,Lit Material 玩熟是十分必要的,这几乎决定了游戏的画面表现
  7. 时代变了,各位大爷

官方文档:High Definition Render Pipeline documentation 。当然,肯耐下心来读文档的人完全没必要在这里浪费时间。


项目环境创建

创建一个HDRP工程

版本 2019.3.0b12 (最好一致或者更新),模板 选择High Definition RP,创建
(各位最好下一个Unity Hub管理Unity版本)
Unity HDRP高清渲染管线 (上)——艺术家工作流_第1张图片
项目模板自带一个演示项目;我觉得演示从无到有的过程很有必要;所以把Assets/ 目录下的资源全删了。
创建了几个空文件夹 和 一个Scene
现在我们得到了一个有扁平化主题的Unity 2018
Unity HDRP高清渲染管线 (上)——艺术家工作流_第2张图片

切换管线
  1. 创建一个 HDRP资产 Project页,在Assets目录下,Create→Rendering→High Definition Render Pipeline Asset
  2. 设置可编程渲染管线 菜单栏 Editor→Project Settings→Graphics→ Scriptable Render Pipeline Setting,选择第一步创建的资产
  3. 为管线设置默认配置 菜单栏 Window→Render Pipeline→HD Render Pepeline Wizard,Fix All
    Unity HDRP高清渲染管线 (上)——艺术家工作流_第3张图片
    这个工具挺方便的,但是它遗漏了环境光的配置,所以
  4. 菜单栏 Window→Rendering→Lighting Settings,把工具帮你创建的配置文件Sky and FogSettings Profile赋给Environment Profile。

现在运行整个场景不会产生任何错误和警告了。文章在这里正式开始


Volume Profile

什么是Volume Profile

HDRP使用了一个Volume框架,现在,先把这个框架简单的当做后处理框架。
这个后处理框架需要一个配置文件,这个配置文件就是 Volume Profile。

在场景中使用Volume
  1. 在场景中新建一个空的GameObject,添加Volume组件
  2. 在Assets下新建一个 Volume Profile,并赋给刚才Volume组件
    Unity HDRP高清渲染管线 (上)——艺术家工作流_第4张图片
  3. 配置Volume,正如GameOjbect的命名,我们要使这个Volume对全局环境起到作用,为他添加重写。比如我添加了渐变天空和视觉环境。Type应该对应。Volume模式选择Global,则全局生效。
    Unity HDRP高清渲染管线 (上)——艺术家工作流_第5张图片
    这在HDRP中取代了 LightSetting 的 SkyBox;当然,选择HDRI Sky让能利用Cubemap映射。
  4. 现在,我们再按照刚才的步骤新建一个"Volume GameObject",为它建立并添加配置文件。随便添加一个效果,但是Volume Mode 设置为 Local。 并利用碰撞器控制效果的范围。

    当摄像机进入碰撞器范围的时候,该Volume会启动。也就是说,现在我们可以轻松地控制后处理的范围,而且自带过渡。更方便的是Volume组件支持TimeLine。
Volume框架的基本原理

虽然开头说好的没有原理,但不得不简单说一下。先有一个贡献值的概念,在场景运行的时候,HDRP会遍历场景中所有活动的Volume,并计算每个体积对当前画面的贡献值。
比如上图在Local范围外PostEffects对象的Volume贡献 = “0”,只有Environment的效果;
当 _CameraPos.xyz 在Collider 范围内时,PostEffectsVolume的贡献就会和当前Global的EnvironmentVolume的贡献值差值,得到最终Volume的值。

其它
  • 还记得上文中修复工具为我们创建的那两个Volume Profile吗,那是Unity为我们新场景的默认Volume配置,你可以在Assets目录新建 HD Template Scene,打开它你会发现,它默认已经完成了我刚才的操作。我觉得演示从无到有的过程很重要。
  • 一个场景中可以根据需要,创建多个Volume,一个Volume又可以有很多Effect,尽量为每一个Volume创建一个新的GameObject,并分组起好名字,便于管理。
  • Volume组件自带非常多的效果,没办法大篇幅讲这个,请在项目中慢慢熟悉
    Unity HDRP高清渲染管线 (上)——艺术家工作流_第6张图片Unity HDRP高清渲染管线 (上)——艺术家工作流_第7张图片
  • 你需要知道PostEffects的执行顺序,这对实现想要的效果有所帮助
    Unity HDRP高清渲染管线 (上)——艺术家工作流_第8张图片

HDRP Shaders

我这个版本提供的9个内置HDRPShader。
在这里我主要讲三个, Lit,Decal,Unlit

Lit Shader

取代了Standerd Shader
Lit有6种类型,简单说一下

  • 次表面散射,常用与皮肤或叶子
  • 标准,最常用的,比如金属制品
  • 各向异性,需要表现出各向异性高光的物体,比如丝绸
  • 彩虹色,可以用来渲染彩虹金属,或气泡,昆虫翅膀,等薄膜干涉现象
  • 镜面色,高反射物体可用,比如镜子
  • 半透明,模拟半透明材质
    Unity HDRP高清渲染管线 (上)——艺术家工作流_第9张图片

这几种类型加起来属性挺多的,这里我说明一下最主要的几个属性

  1. Base Map,主纹理,RGB存储颜色,Alpha通道用于剔除或混合,后面会有说明。
  2. Mask Map,遮罩图,通道用途如下:
    Unity HDRP高清渲染管线 (上)——艺术家工作流_第10张图片
  3. Detail Map,细节图,通道用途如下:
    Unity HDRP高清渲染管线 (上)——艺术家工作流_第11张图片
  4. Normal Map,法线图,支持切线和模型空间。当然尽量和以前一样用切线空间
  5. Alpha Clipping,裁剪剔除,Clip(BaseMap.a -Threshold),即用Base Map的Alpha 和 阈值比大小控制剔除 在这里插入图片描述
  6. Double Sided,双面渲染,可以选择给背面镜像法线方向,也可以反转。
    在这里插入图片描述
  7. Smoothness RemappingAmbient Occlusion Remap,如果上面提到的 MaskMap不为空,那么就会出现这两个滑块。设定最大值和最小值,重新把MaskMap.a 映射到[0.0,1.0];另一个把MaskMap.g 映射到[0.0,1.0]。可以用来微调。
  8. 其他自发光什么的就不说了
Decal Shader

使用很简单,新建一个 GameObject,添加Decal Projector组件,添加材质,选择HDRP/Decal
投射对象需要勾选Receive Decals 接收
Unity HDRP高清渲染管线 (上)——艺术家工作流_第12张图片
支持设置层级,可以方便的做血迹,油渍等效果。

Unlit Shader

当物体不需要接收阴影和光照的时候可以用它。
比如灯管,可以与面积光,Bloom结合。比如我瞎摆了一下
Unity HDRP高清渲染管线 (上)——艺术家工作流_第13张图片


Diffusion Profile

上文中提到 Lit 支持半透明和次表面散射类型,但我们需要先配置Diffusion Profile。这里存储了它们的配置信息。
Unity HDRP高清渲染管线 (上)——艺术家工作流_第14张图片
在Assets下 Create→Rendering→Diffusion Profile 创建配置文件
Unity HDRP高清渲染管线 (上)——艺术家工作流_第15张图片
说一下主要的配置信息:

  1. Scattering Distance,控制表面下传播的距离,影响透射的颜色。
  2. Index of Refraction,折射率,比如眼睛大约1.41,具体值可查表 ior。
  3. Subsurface Scattering only,决定了什么时候应用反射,散射前后都应用比较柔和。
  4. Transmission Mode,这会涉及到透光率算法的变更,需要根据渲染目标的厚度选择。
  5. Transmission tint,这个不是给SSS用的,这个专门是给半透明用的,指定半透明的透光色调。
  6. 剩下的是厚度范围重映射,不说了

用类似玻璃,镜子等烂大街材质可以用Lit非常轻松地调出来。这年头破烂都没人捡了


写在最后

这是一篇入门教程,我觉得读完大概能操作一番了
有什么比较重要没提到的,我会再补充
没时间写文章,除非有教学用途,计划中下篇是代码层的操作,毕竟已经支持Custom Pass了
未来也不会再写基于Legacy Pipeline的文章了,之后会偏向SRP
教学用途文章篇幅真tm长啊

你可能感兴趣的:(Unity)