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

时间:2024-03-27 20:37:32

本文创作于 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高清渲染管线 (上)——艺术家工作流
项目模板自带一个演示项目;我觉得演示从无到有的过程很有必要;所以把Assets/ 目录下的资源全删了。
创建了几个空文件夹 和 一个Scene
现在我们得到了一个有扁平化主题的Unity 2018
Unity HDRP高清渲染管线 (上)——艺术家工作流

切换管线
  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高清渲染管线 (上)——艺术家工作流
    这个工具挺方便的,但是它遗漏了环境光的配置,所以
  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高清渲染管线 (上)——艺术家工作流
  3. 配置Volume,正如GameOjbect的命名,我们要使这个Volume对全局环境起到作用,为他添加重写。比如我添加了渐变天空和视觉环境。Type应该对应。Volume模式选择Global,则全局生效。
    Unity HDRP高清渲染管线 (上)——艺术家工作流
    这在HDRP中取代了 LightSetting 的 SkyBox;当然,选择HDRI Sky让能利用Cubemap映射。
  4. 现在,我们再按照刚才的步骤新建一个"Volume GameObject",为它建立并添加配置文件。随便添加一个效果,但是Volume Mode 设置为 Local。 并利用碰撞器控制效果的范围。
    Unity HDRP高清渲染管线 (上)——艺术家工作流
    当摄像机进入碰撞器范围的时候,该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高清渲染管线 (上)——艺术家工作流Unity HDRP高清渲染管线 (上)——艺术家工作流
  • 你需要知道PostEffects的执行顺序,这对实现想要的效果有所帮助
    Unity HDRP高清渲染管线 (上)——艺术家工作流

HDRP Shaders

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

Lit Shader

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

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

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

  1. Base Map,主纹理,RGB存储颜色,Alpha通道用于剔除或混合,后面会有说明。
  2. Mask Map,遮罩图,通道用途如下:
    Unity HDRP高清渲染管线 (上)——艺术家工作流
  3. Detail Map,细节图,通道用途如下:
    Unity HDRP高清渲染管线 (上)——艺术家工作流
  4. Normal Map,法线图,支持切线和模型空间。当然尽量和以前一样用切线空间
  5. Alpha Clipping,裁剪剔除,Clip(BaseMap.a -Threshold),即用Base Map的Alpha 和 阈值比大小控制剔除 Unity HDRP高清渲染管线 (上)——艺术家工作流
  6. Double Sided,双面渲染,可以选择给背面镜像法线方向,也可以反转。
    Unity HDRP高清渲染管线 (上)——艺术家工作流
  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高清渲染管线 (上)——艺术家工作流
Unity HDRP高清渲染管线 (上)——艺术家工作流
支持设置层级,可以方便的做血迹,油渍等效果。

Unlit Shader

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


Diffusion Profile

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

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

用类似玻璃,镜子等烂大街材质可以用Lit非常轻松地调出来。这年头破烂都没人捡了
Unity HDRP高清渲染管线 (上)——艺术家工作流


写在最后

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