人气 253

[每月一课] Unity HDRP高清渲染管线 [复制链接]

九艺网 2020-7-2 21:22:18

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

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

写在前面
  • 这篇文章非常表层,几乎不会涉及原理
  • 旨在使毕设小队的美术或刚接触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 ProfileHDRP使用了一个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 RemappingAmbient 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长啊

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-3-29 09:35 , Processed in 0.106268 second(s), 23 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.