如何使用 HDRP 创作高质量材质效果
unityHDRPCG世界 40525 0
实名

通过了实名认证的内容创造者

发布于 2022-3-31 17:03:13

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

x
来源 CG世界

“ 感知技术 · 感触CG · 感受艺术 · 感悟心灵 ”
中国很有影响力影视特效CG动画领域自媒体
今天我们来聊聊Unity HDRP,文末依旧有福利!

Unity HDRP 为我们提供了完整的基于物理的光照和材质系统。相比于原先的内置渲染管线,我们可以用 HDRP 相对轻松地获得高质量写实类画面。不过要想获得好的效果,我们首先要熟悉 HDRP 的光照和材质系统,了解我们手里有哪些工具可用来获得这些效果。

关于 HDRP 的光照系统,我在之前的视频和文字教程中已经有详细讲解,感兴趣的朋友可以参考以下两篇光照相关的教程:

https://learn.u3d.cn/tutorial/unity-hdrp-outdoor-lighting-part1
https://learn.u3d.cn/tutorial/unity-hdrp-outdoor-lighting-part2
你也可以通过此链接在 Unity 中文课堂找到更多 HDRP 教程:https://learn.u3d.cn
本文我们将一起来学习如何使用 HDRP 的材质系统来获得丰富的写实类材质效果。在学习过程中,我们除了会一起了解如何制作一些常见的材质,也会了解如何使用 Mask Map,Detail Map,Thread Map 和 Fuzz Map。

示例工程

我们将会通过图 1 中所示的写实类场景中的材质来具体学习上述常见材质的制作方法。因为此项目来自 ArchVizPRO 团队制作的收费资源,所以我们无法在教程中提供给大家。

如果大家对这个资源包感兴趣,请移步到 Unity 资源商店:
https://assetstore.unity.com/packages/3d/environments/urban/archvizpro-interior-vol-7-155448

d6898df20f5f45fe42cc2c2cad17d6da.png
图 1 教程所用场景资源

内置渲染管线材质转HDRP材质

如图 2 所示,我们可以通过菜单 Edit > Render Pipeline > HD Render Pipeline > Upgrade from Builtin pipeline下的选项,针对项目中的所有材质或者选中的材质,以及地形材质进行一键升级。

注:此菜单截图来自 Unity 2020.3.14 版本。其他版本的 Unity 某些菜单选项可能会有所不同。



图 2 内置渲染管线材质升级到HDRP材质菜单
通过图 2 中菜单进行的材质转换仅适用于内置渲染管线中的标准材质,这些材质将会被转换成 HDRP 中的 Lit 材质。HDRP 会尽量确保内置渲染管线材质上所关联的贴图正确地与 HDRP Lit 进行关联,但是很多时候我们需要手动调整 Lit 材质上相关的金属度(Metallic)和光滑度(Smoothness)数值。

图 3 为 HDRP 进行具体转换时在代码中(这部分代码是开源的)定义的可被转换的三种内置渲染管线材质类型。它们分别为:

Standard Standard(Specular setup)
AutodeskInteractive



图 3 内置渲染管线升级到 HDRP 所支持的材质
对于自定义手写的着色器,目前需要用户手动更新到支持 HDRP 的材质,或者用 Shader Graph 在 HDRP 中进行着色器编程。目前 HDRP 也不支持直接将 URP 材质直接转换成 HDRP 材质。

HDRP支持的着色器

HDRP 支持的着色器类型众多,如果给它们进行分类可以归纳成以下几类。

  常用着色器

图 4 中列出了 HDRP 中常用的着色器,使用这些着色器可以模拟大部分材质效果。



图 4 HDRP 常用着色器

Lit 着色器:可用于模拟大多数材质效果,是 HDRP 中最常用的着色器。后面部分我将会使用 Lit 着色器为大家讲解典型材质的制作方法。

LayeredLit 着色器:可在同一个材质上叠加多个 Lit 材质,并使用遮罩来对材质做分层,确保在需要的地方显示正确的材质。

LitTessellation 着色器:可用于为物体表面添加更多自适应的顶点细节而无需为模型添加更多的顶点。如图 5 所示,Lit Tessellation 比 Lit 多了一个 Tessellation Options 选项区。Lit Tessellation 可认为是 Lit 着色器的升级版本,当然性能上也会更费一些。



图 5 Lit Tessellation 着色器 Tesselation 相关选项
LayerLit Tessellation 着色器:与 Layered Lit 着色器功能一样,区别是它使用的材质是 Lit Tessellation 而不是 Lit。

  专用着色器
图 6 中的专用着色器是为了某些特定效果所开发的着色器。



图 6 HDRP 专用着色器

01  Eye Shader(眼球着色器):如图7所示,眼球着色器可用于制作各种类型的眼睛(不仅限于人类的眼睛)。



图 7 HDRP 眼球着色器

要正确使用 Eye Shader,我们首先要了解典型眼球的结构组成。后续部分内容将会详细讲解。

02  Hair Shader(头发着色器):头发着色器可用于模拟长毛和短毛。它是基于发卡(Hair Cards)方式来渲染毛发的。每个发卡代表整体毛发的不同部分。因此如果你使用的是半透明发卡,你就要手动排列这些发卡的前后次序,确保从任何角度观看都不会出错。

03  Fabric(布料)着色器:目前 HDRP 有两种布料相关的着色器,分别用于模拟光在表面发生散射的布料(比如棉布,羊毛,亚麻布等)和带各向异性效果的布料(比如丝绸)。

Cotton/WoolShader(棉/毛着色器):可用来制作棉布,牛仔布,羊毛,亚麻布和天鹅绒(如图 8 所示)。组成布料的纤维类型和编织方式都会影响布料的外观。自然纤维通常更粗糙,也因此会让光发生散射。



图 8 Cotton/WoolShader(棉/毛着色器)
Silk Shader(丝绸着色器):可用来制作丝绸,缎子,尼龙和聚酯纤维(如图 9 所示)。丝绸和其他人造纤维更光滑的原因是由于它们是由单根光滑细丝编织而成。当我们使用这些纤维来编织布料时,得到的布料会自带各项异性的高光。



图 9 Silk Shader(丝绸着色器)

上述布料着色器都可以添加 Thread Map 和 Fuzz Map 来为布料表面添加细节。我会在后面部分详细讲解这两个贴图的使用方法。

04  Terrain Lit Shader(地形着色器):用于在HDRP中应用到Unity的Terrain上。此着色器是一个简化过的Lit着色器。

05  Decal Shader(贴花):贴花可被用于为物体表面添加更多细节,而且使用起来非常灵活便利。我们可以使用同一个纹理,通过缩放旋转操作,在场景中不同的位置和物体表面上重复利用,达到即为场景添加了丰富的细节,又能有效节省内存的目的。

06  Unlit Shader(无光照着色器):无光照着色器不受场景灯光的影响,因此非常适合用于制作 UI 这种不需要接受光照的组件。

  Shader Graph 中用于制作自定义着色器的 HDRP Master Stack

图 10 中包含 HDRP 自带的可用于在 Shader Graph 中开发自定义着色器的主栈(Master Stack)。



图 10 HDRP MasterStack

使用 Master Stack 来开发自定义着色器的好处是我们可以利用它们已经具备的功能。图 11 为 Lit Master Stack 在 Shader Graph 中的设置情况。



图 11 Lit Master Stack 在 Shader Graph 中的 Context 和 Blocks
如图所示,每个 Master Stack 都有两个 Context(上下文)。一个上下文是 Vertex(顶点阶段),另一个则是 Fragment(片元阶段)。每个 Master Stack 的上下文都包含各自的 Blocks(块),比如 Vertext 上下文中的 Position 块,Fragment 上下文中的 Base Color 块。我们可以在右侧的 Graph Inspector 界面中通过 Material(材质)选项来选择所需要的 Master Stack 类型。

  行业着色器

如图 12 所示,这些 HDRP 着色器分别对应相关 DCC 软件中的着色器。它们拥有与这些对应着色器相同的参数以及可关联的纹理,对光的反应也类似。如果你从这些软件中导出的 FBX 文件中包含使用了这些着色器的材质,Unity 会在导入 FBX 时自动应用相关 HDRP 版本的着色器到这些材质上。我们将不会在本文中介绍这些着色器的使用方法,有需要用到这些着色器的同学可以自行查看文档。



图 12 HDRP 行业着色器
Lit着色器(用于制作常见材质)

Lit 着色器是 HDRP 高清渲染管线中制作材质时最常用的着色器。它可被用于模拟大多数写实类的材质(后面我们也会看到,其实 Lit 也可以用于卡通类材质的制作)。

如图 13 所示,选用 Lit 着色器生成的材质,默认拥有很多选项。



图 13 HDRP Lit 着色器
我们从大类上来了解一下图中用红框标注的选项:

Surface Options(表面选项)

用于控制材质的总体表现效果。在这里我们可以选择物体表面类型(Surface Type)是不透明的(Opaque)还是透明的(Transparent),以及材质类型(Material Type)。
除了默认的标准(Standard)材质类型,如图 14 所示,HDRP 还支持其他材质类型:Subsurface Scattering(次表面散射),Anisotropy(各向异性),Iridescence(彩虹色),Specular Color(高光色),Translucent(半透明)。


图 14 Lit 着色器的表面选项

根据我们在这里选择的表面和材质类型,HDRP 会在上述材质界面上提供与之相对应的参数选项。

Surface Inputs(表面输入)

HDRP 默认支持 Metallic/Smoothness 工作流(当选择材质类型为 Specular Color 时,HDRP 也可以支持 Specular 工作流)。

通过控制 Metallic(金属度)和 Smoothness(光滑度)这两个参数,参考现实世界中的数值,我们可以模拟大多数写实类材质。

此处我们可以关联大多数所需的纹理,比如基础贴图(Base Map),遮罩贴图(Mask Map),法线贴图(Normal Map)等。我们也可以控制纹理的平铺(Tiling)和偏移(Offset)数值。

DetailInputs(细节输入)
这里可以关联一个额外的细节纹理,用于为物体表面添加更多微观细节。

EmissionInputs(自发光输入)
此处用于控制所有与自发光相关的参数。我们可以控制自发光颜色,强度等。
Advanced Options(高级选项)
更多高级功能,比如启用/禁用 GPU Instancing,高光遮蔽模式(Specular Occlusion Mode)等。
如果我们选择表面类型为透明(Transparent),材质界面还会出现额外的Transparency Inputs(透明输入)参数区(如图 15 所示)。


图 15 Lit 着色器的透明相关参数

这里我们可以选择当前透明物体适用的折射模型(RefractionModel),折射率(Index Of Refraction),厚度(Thickness),透射颜色(Transmittance Color)以及透射吸收距离(Transmittance Absorption Distance)参数。后面会有示例详细讲解这些参数的具体用法。

综上所述,在 HDRP 中制作材质的一个基本工作流如图 16 所示:



图 16 HDRP 材质制作工作流


  具体材质制作案例

下面我们将通过具体的材质实现来理解 Lit 着色器的使用方法,希望可以达到抛砖引玉的目的。

01  金属+大理石(使用Mask Map控制金属度和光滑度)
如图 17 所示,这个摆件主要由上下两部分组成。上部的金色鹿头为金属材质,下面的黑色底座为大理石材质,中间由一根金属杆相连。



图 17 金色鹿头雕像材质效果
材质制作步骤如下:

首先创建一个默认的 Lit 材质。表面类型(Surface Type)设置为不透明(Opaque),材质类型(Material Type)设置为标准(Standard)。因为我们不会为此物体应用贴花,所以把 Receive Decal 选项禁用。具体设置如图 18 所示。



图 18 金色鹿头 Lit 材质基本设置
如图 19 所示,为物体表面添加基础颜色纹理(确保纹理不包含任何光照信息)。



图 19 金色鹿头材质关联 Base Map
为了控制模型上不同部分的金属度(Metallic)和光滑度(Smoothness)数值,我们要用到遮罩贴图(Mask Map)。遮罩贴图中的四个通道可包含最多四张不同的灰度图。这四张灰度图的作用如图 20 所示。



图 20 Mask Map 四个通道保存纹理对应的参数


表 1 Mask Map 四个通道中保存的灰度图的作用
这四个通道中最常用的两个通道为红色通道和 Alpha 通道,它们分别用于控制物体表面的金属度和光滑度。

我们给 Mask Map 参数关联一张已经制作好的遮罩贴图,可以看到如图 21 所示的效果。另外我们注意到 Surface Inputs 界面出现了三个滑块,它们分别为 Metallic Remapping,Smoothness Remapping 和 Ambient Occlusion Remapping。这三个滑块分别对应了遮罩贴图中的红色通道(Metallic),Alpha通道(Smoothness)和绿色通道(Ambient Occlusion)。

通过这三个滑块,我们可以进一步调整这三个参数对应到各个通道中灰度图里的数值。滑块的最左侧对应数值的最小值,最右侧对应数值的最大值。通过调整滑块左右两侧的位置,我们可以把灰度图中代表的各个数值控制在一个指定的数值范围之内。

图 21 金色鹿头材质关联 Mask Map

对于滑块的使用,举一个极端的例子:如果我们把 Smoothness Remapping 滑块全部移到最左侧。如图 22 所示,这时整个模型的光滑度不再按照遮罩贴图 Alpha 通道中的灰度图来计算,而是统一设置为 0。整个模型的表面就不再光滑了。



图 22 金色鹿头材质调整 Smoothness Remapping 参数效果
表 2 中是在 Photoshop 中将上述 Mask Map 分离得到的三张分别保存在红色通道,绿色通道和 Alpha 通道中的灰度图。因为我们材质上并没有应用 Detail Map(细节贴图),所以也就没必要在蓝色通道中保存任何的 Detail MapMask(细节贴图遮罩)。

灰度图中的纯白色代表数值 1,纯黑色代表数值 0,其他灰色代表 0~1 之间的一个数值。



表 2 金色鹿头材质关联的 Mask Map 通道中具体的灰度图
最后一步是为材质关联法线贴图完成表面细节的添加(如图 23 所示)。



图 23 金色鹿头材质关联法线纹理

这一材质的制作虽然比较简单,但是我们在这里涉及了基本的表面类型和材质类型的选择,解释了 Mask Map 的基本用途,以及 Remapping 滑块的具体使用方法。这些知识能够为我们后面的材质讲解打下良好的基础。

02  金属+Alpha Clipping(镂空效果)

在内置渲染管线中,我们可以使用标准材质的 Cutout 渲染模式来获得镂空效果(如图 24 所示-来自 Unity 官方文档)。



图 24 内置渲染管线标准材质的 Cutout 渲染模式
在 HDRP 中要获得同样的镂空效果,我们可以使用 Alpha Clipping 来做,他的作用跟内置渲染管线中的 Cutout 相同。

如图 25 所示,我们为材质做如下设置:

虽然镂空处不可见,但是其它部分是不透明的,因此表面类型设置为 Opaque(不透明)。

因为我们模拟的是普通的金属表面,所以材质类型设置为 Standard(标准)就可以了。

启用 Alpha Clipping 选项,将 Threshold(阈值)设置为 0.5。阈值的作用是:如果 Alpha 通道中的某个像素对应的灰度值小于 0.5,那么 HDRP 就不会渲染这个像素;反之如果大于等于 0.5 则渲染此像素。

(可选)我们也可以启用 Use Shadow Threshold 选项,然后使用 Shadow Threshold 来控制是否渲染某个像素点对应的阴影。

(可选)如果你在 HDRP Asset 中选择的 Lit Shader Mode 为 Forward,并启用了 MSAA 硬件抗锯齿,那么可以启用 Alpha To Mask 这个选项,让镂空的边缘也得到相应的抗锯齿效果。这一选项通常用于植物或者其他使用 Alpha Test 的着色器。



图 25 HDRP 中使用 Alpha Clipping 获得镂空效果
微信篇幅有限,本教程的完整版已经发布在 Unity 中文课堂,Unity 大中华区平台技术总监杨栋手把手带大家做出了大理石、玻璃+折射、蜡烛、布料(绒毛、螺纹、丝绸等不同材质)、眼球等材质效果,欢迎跳转 Unity 中文课堂学习全文。

Unity HDRP 材质应用详解完整教程(点击“阅读原文”可跳转):https://learn.u3d.cn/tutorial/unity-hdrp-materials


原文链接:https://mp.weixin.qq.com/s/zajNOmMMdaCwaGn78sC0-g

评分

参与人数 4元素币 +39 活跃度 +24 展开 理由
元素界王神... + 14 + 7 天下武功出少林,世界资源入元素。
auldark + 7 + 4 【喜欢】看到这么好的帖如同回到初恋的年代!
makezero + 8 + 8 我和我的小伙伴们都惊呆了
龙哥Longer... + 10 + 5 大佬NB

查看全部评分

本帖被以下画板推荐:

内容主要涵盖影视特效,CG动国,前沿CG技术,作品欣賞
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表