本文创作于 2019/11/24
写在前面
- 这篇文章非常表层,几乎不会涉及原理
- 旨在使毕设小队的美术或刚接触HDRP的人学会基本操作
- 会从Assets空开始逐步搭建HDRP项目
- 会对 Diffusion Profile 和 Volume Profile 进行一些说明
- 会介绍 HDRP/Lit 以及其变种
- 美术同学把Volume Component,Lit Material 玩熟是十分必要的,这几乎决定了游戏的画面表现
- 时代变了,各位大爷
官方文档:High Definition Render Pipeline documentation 。当然,肯耐下心来读文档的人完全没必要在这里浪费时间。
项目环境创建
创建一个HDRP工程
版本 2019.3.0b12 (最好一致或者更新),模板 选择High Definition RP,创建
(各位最好下一个Unity Hub管理Unity版本)
项目模板自带一个演示项目;我觉得演示从无到有的过程很有必要;所以把Assets/ 目录下的资源全删了。
创建了几个空文件夹 和 一个Scene
现在我们得到了一个有扁平化主题的Unity 2018
切换管线
- 创建一个 HDRP资产 Project页,在Assets目录下,Create→Rendering→High Definition Render Pipeline Asset
- 设置可编程渲染管线 菜单栏 Editor→Project Settings→Graphics→ Scriptable Render Pipeline Setting,选择第一步创建的资产
-
为管线设置默认配置 菜单栏 Window→Render Pipeline→HD Render Pepeline Wizard,Fix All
这个工具挺方便的,但是它遗漏了环境光的配置,所以 - 菜单栏 Window→Rendering→Lighting Settings,把工具帮你创建的配置文件Sky and FogSettings Profile赋给Environment Profile。
现在运行整个场景不会产生任何错误和警告了。文章在这里正式开始
Volume Profile
什么是Volume Profile
HDRP使用了一个Volume框架,现在,先把这个框架简单的当做后处理框架。
这个后处理框架需要一个配置文件,这个配置文件就是 Volume Profile。
在场景中使用Volume
- 在场景中新建一个空的GameObject,添加Volume组件
- 在Assets下新建一个 Volume Profile,并赋给刚才Volume组件
-
配置Volume,正如GameOjbect的命名,我们要使这个Volume对全局环境起到作用,为他添加重写。比如我添加了渐变天空和视觉环境。Type应该对应。Volume模式选择Global,则全局生效。
这在HDRP中取代了 LightSetting 的 SkyBox;当然,选择HDRI Sky让能利用Cubemap映射。 - 现在,我们再按照刚才的步骤新建一个"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组件自带非常多的效果,没办法大篇幅讲这个,请在项目中慢慢熟悉
- 你需要知道PostEffects的执行顺序,这对实现想要的效果有所帮助
HDRP Shaders
我这个版本提供的9个内置HDRPShader。
在这里我主要讲三个, Lit,Decal,Unlit
Lit Shader
取代了Standerd Shader
Lit有6种类型,简单说一下
- 次表面散射,常用与皮肤或叶子
- 标准,最常用的,比如金属制品
- 各向异性,需要表现出各向异性高光的物体,比如丝绸
- 彩虹色,可以用来渲染彩虹金属,或气泡,昆虫翅膀,等薄膜干涉现象
- 镜面色,高反射物体可用,比如镜子
-
半透明,模拟半透明材质
这几种类型加起来属性挺多的,这里我说明一下最主要的几个属性
- Base Map,主纹理,RGB存储颜色,Alpha通道用于剔除或混合,后面会有说明。
-
Mask Map,遮罩图,通道用途如下:
-
Detail Map,细节图,通道用途如下:
- Normal Map,法线图,支持切线和模型空间。当然尽量和以前一样用切线空间
- Alpha Clipping,裁剪剔除,Clip(BaseMap.a -Threshold),即用Base Map的Alpha 和 阈值比大小控制剔除
-
Double Sided,双面渲染,可以选择给背面镜像法线方向,也可以反转。
- Smoothness Remapping 和 Ambient Occlusion Remap,如果上面提到的 MaskMap不为空,那么就会出现这两个滑块。设定最大值和最小值,重新把MaskMap.a 映射到[0.0,1.0];另一个把MaskMap.g 映射到[0.0,1.0]。可以用来微调。
- 其他自发光什么的就不说了
Decal Shader
使用很简单,新建一个 GameObject,添加Decal Projector组件,添加材质,选择HDRP/Decal
投射对象需要勾选Receive Decals
支持设置层级,可以方便的做血迹,油渍等效果。
Unlit Shader
当物体不需要接收阴影和光照的时候可以用它。
比如灯管,可以与面积光,Bloom结合。比如我瞎摆了一下
Diffusion Profile
上文中提到 Lit 支持半透明和次表面散射类型,但我们需要先配置Diffusion Profile。这里存储了它们的配置信息。
在Assets下 Create→Rendering→Diffusion Profile 创建配置文件
说一下主要的配置信息:
- Scattering Distance,控制表面下传播的距离,影响透射的颜色。
- Index of Refraction,折射率,比如眼睛大约1.41,具体值可查表 ior。
- Subsurface Scattering only,决定了什么时候应用反射,散射前后都应用比较柔和。
- Transmission Mode,这会涉及到透光率算法的变更,需要根据渲染目标的厚度选择。
- Transmission tint,这个不是给SSS用的,这个专门是给半透明用的,指定半透明的透光色调。
- 剩下的是厚度范围重映射,不说了
用类似玻璃,镜子等烂大街材质可以用Lit非常轻松地调出来。这年头破烂都没人捡了
写在最后
这是一篇入门教程,我觉得读完大概能操作一番了
有什么比较重要没提到的,我会再补充
没时间写文章,除非有教学用途,计划中下篇是代码层的操作,毕竟已经支持Custom Pass了
未来也不会再写基于Legacy Pipeline的文章了,之后会偏向SRP
教学用途文章篇幅真tm长啊