毛发着色器 (Hair Shader)
毛发着色器可作为在高清渲染管线 (High Definition Render Pipeline, HDRP) 中渲染毛发的起点。为了创建逼真的毛发效果,这种情况会使用称为毛发卡片的层。每张毛发卡片代表毛发的不同部分。如果使用半透明毛发卡片,必须手动对这些卡片进行排序,以便这些卡片在每个方向上查看都是从后到前顺序排列。
本质上,毛发着色器是一个预先配置的 Shader Graph。要进一步了解毛发着色器的实现方式,或要创建自定义的毛发着色器变体,请参阅关于毛发主节点的 Shader Graph 文档。
导入毛发示例
HDRP 随附了毛发材质示例以进一步帮助你入门。要查找此示例,请执行以下操作:
- 导航到 Windows > Package Manager,然后从包列表中选择 High Definition RP。
- 在显示包详细信息的主窗口中,找到 Samples 部分。
- 要将某个示例导入项目中,请单击 Import into Project 按钮。这会在项目中创建一个 Samples 文件夹,并将您选择的示例导入其中。这也是 Unity 未来将所有示例导入到的位置。
- 在 Asset 窗口中,选择 Samples > High Definition RP > 11.0,然后打开 Hair 场景。此处可以看到随场景在上下文中设置并可供使用的毛发示例材质。
创建毛发材质
HDRP 中的新材质默认使用光照着色器。要从头开始创建毛发材质,请创建一个材质,然后将其设置为使用毛发着色器。为此需要执行以下操作:
在 Unity 编辑器中,导航到项目的 Asset 窗口。
右键单击 Asset 窗口,然后选择 Create > Material。这会在 Unity 项目的 Asset 文件夹中添加一个新材质。
在 Material Inspector 顶部,单击 Shader 下拉选单,然后选择 HDRP > Hair。
属性
Surface Options
Surface Options 控制材质表面的整体外观以及 Unity 如何在屏幕上渲染材质。
属性 | 描述 |
---|---|
Surface Type | 指定材质是否支持透明度。具有 Transparent Surface Type 的材质比具有 Opaque Surface Type 的材质在渲染时更耗资源。根据选择的选项,HDRP 会显示更多属性。选项包括: • Opaque: • Transparent:模拟光线可以穿透的半透明材质,例如透明塑料或玻璃。 有关该功能的更多信息以及每个 Surface Type 显示的属性列表,请参阅 Surface Type 文档。 |
- Rendering Pass | 指定 HDRP 处理此材质使用的渲染通道。 • Before Refraction:在折射通道之前绘制游戏对象。这意味着 HDRP 在处理折射时包含此材质。要显示此选项,请从 Surface Type 下拉选单中选择 Transparent。 • Default:根据 Surface Type,在默认的不透明或透明渲染通道中绘制游戏对象。 • Low Resolution:在 Default 通道后以半分辨率绘制游戏对象。 • After post-process:仅适用于无光照材质。在执行所有后期处理效果之后绘制游戏对象。 |
- Blending Mode | 指定 HDRP 将材质每个像素的颜色与背景像素混合的方法。选项包括: • Alpha:使用材质的 Alpha 值来更改对象的透明度。0 表示完全透明。1 表示完全不透明,但在透明渲染过程中仍然会渲染材质。对于你希望完全可见但随着时间的推移也会逐渐消失的视觉效果(例如云),这非常有用。 • Additive:将材质的 RGB 值添加到背景颜色。材质的 Alpha 通道可调节强度。值 0 表示不进行任何添加,值为 1 表示将材质颜色的 100% 添加到背景颜色。 • Premultiply:假设已经将材质的 RGB 值乘以 Alpha 通道。当过滤图像或构建不同的层时,这可以提供比 Alpha 混合更好的结果。 仅当 Surface Type 设置为 Transparent 时,才显示此属性。 |
- - Preserve Specular Lighting |
指示是否使 Alpha 混合不降低镜面高光的强度。这可以保留透明表面上的镜面反射元素,例如阳光照射玻璃或水。 仅当 Surface Type 设置为 Transparent 时,才显示此属性。 |
- Sorting Priority | 允许更改重叠的透明表面的渲染顺序。有关更多信息以及用法示例,请参阅材质排序文档。 仅当 Surface Type 设置为 Transparent 时,才显示此属性。 |
- Receive Fog | 指示雾效是否影响透明表面。禁用后,HDRP 在计算场景中的雾效时不会考虑此材质。 |
- Back Then Front Rendering |
指示 HDRP 是否在两个单独的绘制调用中渲染该材质。HDRP 在第一个绘制调用中渲染背面,而在第二个中渲染正面。 仅当 Surface Type 设置为 Transparent 时,才显示此属性。 |
- Transparent Depth Prepass | 指示 HDRP 是否将透明表面中的多边形添加到深度缓冲区以改进其排序。HDRP 在光照通道之前执行此操作,此过程可提高 GPU 性能。 |
- Transparent Depth Postpass | 指示 HDRP 是否将多边形添加到后期处理使用的深度缓冲区。HDRP 在光照通道之前执行此操作。如果要使用需要深度信息的后期处理效果(如运动模糊或景深),启用此功能非常有用。 |
- Transparent Writes Motion Vectors | 指示 HDRP 是否为使用该材质的透明游戏对象写入运动矢量。这允许 HDRP 处理透明对象的运动模糊等效果。有关运动矢量的更多信息,请参阅运动矢量文档。 仅当 Surface Type 设置为 Transparent 时,才显示此属性。 |
- Depth Write | 指示 HDRP 是否为使用该材质的游戏对象写入深度值。 |
- Depth Test | 指定由 HDRP 用于深度测试的比较函数。 |
- Cull Mode | 指定对于使用此材质的游戏对象需要剔除哪个面。选项包括: • Front:剔除网格的正面。 • Back:剔除网格的背面。 仅当禁用 Double Sided 的情况下,才显示此属性。 |
Alpha Clipping |
指示该材质是否类似于镂空着色器 (Cutout Shader)。 有关该功能的更多信息以及该功能显示的属性列表,请参阅 Alpha Clipping 文档。 |
- Threshold | 由 HDRP 用于确定是否渲染每个像素的 Alpha 值阈值。如果像素的 Alpha 值等于或高于此阈值,则 HDRP 会渲染该像素。如果低于此阈值,则 HDRP 不会渲染该像素。默认值为 0.5。 |
- Use Shadow Threshold |
指示 HDRP 是否对 Alpha 裁剪阴影使用另一个阈值。 仅当启用 Alpha Clipping 时,才显示此属性。 |
- - Shadow Threshold |
HDRP 用于确定是否应渲染像素阴影的 Alpha 值阈值。 仅当启用 Use Shadow Threshold 时,才显示此属性。 |
- Alpha to Mask |
指示是否开启 alpha-to-coverage。如果项目使用 MSAA,alpha-to-coverage 会根据像素着色器结果 Alpha 值按比例修改多重采样覆盖率遮罩。通常用于植被抗锯齿和其他经过 Alpha 测试的着色器。 仅当启用 Alpha Clipping 时,才显示此属性。 |
- Prepass Threshold |
HDRP 用于透明深度预通道的 Alpha 值阈值。此属性的原理与上述主 Threshold 属性相同。 仅当启用 Transparent Depth Prepass 复选框时,才显示此属性。 |
- Postpass Threshold |
HDRP 用于透明深度后通道的 Alpha 值阈值。此属性的原理与上述主 Threshold 属性相同。 仅当启用 Transparent Depth Postpass 复选框时,才显示此属性。 |
Double Sided | 指示 HDRP 是否渲染几何体中多边形的两个面。有关该功能的更多信息以及该功能可显示的属性列表,请参阅 Double-Sided 文档。 |
- Normal Mode | 指定 HDRP 用于计算背面几何体法线的模式。 • Flip:背面法线与正面法线成 180°。这也适用于材质,这意味着材质在几何体的两面看起来相同。 • Mirror:背面法线是正面法线的镜像。这也适用于材质,这意味着材质在背面反转。当想要在几何体的两面保留相同的形状(例如叶子)时,这非常有用。 • None:背面法线与正面相同。 仅当启用 Double-Sided 时,才显示此属性。 |
Material Type | 指定材质的类型。允许根据选择的类型使用不同的设置对材质进行自定义。选项包括: • Subsurface Scattering:将次表面散射 (subsurface scattering) 工作流应用于材质。次表面散射工作流程可以模拟光线与半透明对象(如皮肤或植物叶子)的相互作用和穿透方式。光线穿透次表面散射材质的表面时,会在离开表面之前在不同点散射和模糊。 • Standard:将基本金属性着色器工作流程应用于材质。这是默认的 Material Type 设置。 • Anisotropy:将各向异性 (anisotropic) 工作流程应用于材质。从不同角度观看材质时,各向异性表面的高光会在外观上发生变化。使用此 Material Type 可以创建具有各向异性高光的材质。例如,拉丝金属或天鹅绒材质。 • Iridescence:将彩虹色 (Iridescence) 工作流程应用于材质。随着视角或光照角度的变化,彩虹色表面看起来会逐渐改变颜色。使用此 Material Type 可以创建诸如肥皂泡、闪光金属或昆虫翅膀之类的材质。 • Specular Color:将镜面反射颜色 (Specular Color) 工作流程应用于材质。使用此 Material Type 可以创建具有彩色镜面高光的材质。这类似于内置的镜面反射着色器 (Specular Shader)。 • Translucent:将半透明 (Translucent) 工作流程应用于材质。使用此 Material Type 和厚度贴图可以模拟半透明材质。与次表面散射材质不同,半透明材质不会模糊穿透材质的光线。 有关该功能的更多信息以及每个 Material Type 显示的属性列表,请参阅 Material Type 文档。 |
- Transmission |
指示 HDRP 是否使用厚度贴图模拟材质的半透明度。可以使用扩散配置文件 (Diffusion Profile) 来配置次表面散射和透射设置。如需了解更多信息,请参阅有关次表面散射的文档。 仅当从 Material Type 下拉选单中选择 Subsurface Scattering 时,才显示此属性。 |
Receive Decals | 指示 HDRP 是否可以在该材质的表面上绘制贴花。 |
Receive SSR/SSGI | 指示是否在处理屏幕空间反射通道时使 HDRP 包含该材质。HDRP 在计算屏幕空间全局光照时也会考虑此材质。 仅当 Surface Type 设置为 Opaque 时,才会显示此属性。 |
Receive SSR Transparent | 指示是否在处理屏幕空间反射通道时使 HDRP 包含该材质。 仅当 Surface Type 设置为 Transparent 时,才显示此属性。 |
Geometric Specular AA | 指示 HDRP 是否对此材质执行几何抗锯齿。这会修改曲面几何体表面上的平滑度值,从而消除镜面反射瑕疵。 有关该功能的更多信息以及该功能显示的属性列表,请参阅几何镜面反射抗锯齿 (Geometric Specular Anti-aliasing) 文档。 |
- Screen Space Variance | 几何镜面反射抗锯齿效果的强度(大小介于 0 和 1 之间)。较大的值会产生锯齿较少、更模糊的结果。 仅当启用 Geometric Specular AA 时,才显示此属性。 |
- Threshold | HDRP 为了减少瑕疵而从平滑度值减去的最大偏移值。 仅当启用 Geometric Specular AA 时,才显示此属性。 |
Displacement Mode | 指定 HDRP 用于更改材质表面高度的方法。选项包括: • None:不对材质应用位移。 • Vertex displacement:根据 Height Map 对网格顶点进行移位。 • Pixel displacement:根据 Height Map 对网格表面上的像素进行移位。 有关该功能的更多信息以及每个 Displacement Mode 显示的属性列表,请参阅 Displacement Mode 文档。 |
- Lock With Object Scale | 指示是否使用变换组件的缩放值更改位移高度。这样可以保持位移幅度与变换组件的缩放值之间的比率。 仅当 Displacement Mode 设置为 Vertex Displacement 或 Pixel Displacement 时,才显示此属性。 |
- Lock With Height Map Tiling Rate | 指示是否使用高度贴图 (Height Map) 的平铺值更改位移幅度。这样可以保持位移幅度与高度贴图 (Height Map) 纹理的缩放值之间的比率。 仅当 Displacement Mode 设置为 Vertex Displacement 或 Pixel Displacement 时,才显示此属性。 |
- Minimum Steps | Unity 处理像素位移时所需执行的最小纹理样本数。 仅当 Displacement Mode 设置为 Pixel Displacement 时,才显示此属性。 |
- Maximum Steps | Unity 处理像素位移时所需执行的最大纹理样本数。 仅当 Displacement Mode 设置为 Pixel Displacement 时,才显示此属性。 |
- Fading Mip Level Start | 像素位移效果开始淡出的 Mip 级别。 仅当 Displacement Mode 设置为 Pixel Displacement 时,才显示此属性。 |
- Primitive Length | Unity 应用位移贴图的网格长度(以米为单位)。 仅当 Displacement Mode 设置为 Pixel Displacement 时,才显示此属性。 |
- Primitive Width | Unity 应用位移贴图的网格宽度(以米为单位)。 仅当 Displacement Mode 设置为 Pixel Displacement 时,才显示此属性。 |
- Depth Offset | 指示 HDRP 是否根据位移修改深度缓冲区。因此,使用深度缓冲区的效果(例如,接触阴影 (Contact Shadows))可以捕获像素位移细节。 仅当 Displacement Mode 设置为 Pixel Displacement 时,才显示此属性。 |
Exposed Properties
属性 | 描述 |
---|---|
Base Color Map | 指定一个纹理来控制材质的颜色和不透明度。 |
Base Color | 设置材质的颜色。如果不指定纹理,这将是材质的绝对颜色。如果指定了纹理,则材质的最终颜色是你指定的纹理和所选颜色的组合。如果从 Surface Type 下拉选单中选择 Transparent,则颜色的 Alpha 值将控制材质的透明度级别。 |
Alpha Cutoff | 设置 HDRP 用于确定是否应渲染每个像素的 Alpha 值阈值。如果像素的 Alpha 值等于或高于此阈值,则 HDRP 会渲染该像素。如果低于此阈值,则 HDRP 不会渲染该像素。仅当启用 Alpha Clipping 设置时,才显示此属性。 |
Alpha Cutoff Prepass | 设置 HDRP 用于确定是否应从深度预通道中丢弃片元的 Alpha 值阈值。 仅当启用 Alpha Clipping 和 Transparent Depth Postpass 设置时,才显示此属性。 |
Alpha Cutoff Postpass | 设置 HDRP 用于确定是否应从深度后通道中丢弃片元的 Alpha 值阈值。 仅当启用 Alpha Clipping 和 Transparent Depth Postpass 设置时,才显示此属性。 |
Alpha Cutoff Shadows | 设置 HDRP 用于确定是否应渲染片元阴影的 Alpha 值阈值。 仅当启用 Use Shadow Threshold 设置时,才显示此属性。 |
Base UV Scale Transform | 设置基色、法线和 AO 贴图的平铺率 (xy) 和偏移 (zw)。 |
Normal Map | 指定一个纹理来定义此材质的切线空间法线贴图。 |
Normal Strength | 在 0 到 8 之间调节法线强度。 |
AO Map | 指定一个纹理来定义此材质的环境光遮挡。 |
AO Use Lightmap UV | 设置用于采样 AO 贴图的 UV 通道。启用此属性后将使用 UV1 通道。这在 UV 重叠的情况下(通常用于毛发卡片)很有用。 |
Smoothness Mask | 指定一个纹理来定义此材质的平滑度。 |
Smoothness UV Scale Transform | 设置平滑度遮罩贴图的平铺率 (xy) 和偏移 (zw)。 |
Smoothness Min | 设置此材质的最小平滑度。 |
Smoothness Max | 设置此材质的最大平滑度。 |
Specular Color | 设置高光的代表色,由 Unity 用来驱动主要的镜面高光颜色(主要是单色)和次要的镜面高光颜色(彩色)。 |
Specular Multiplier | 通过此乘数修改主要镜面高光。 |
Specular Shift | 修改主要镜面高光的位置。 |
Secondary Specular Multiplier | 通过此乘数修改次要镜面高光。 |
Secondary Specular Shift | 修改次要镜面高光的位置。 |
Transmission Color | 设置从后面穿透毛发的镜面反射光照的比例。这是基于每个颜色的通道,因此您可以使用此属性来设置穿透光的颜色。将此属性设置为 (0, 0, 0) 可以阻止任何光线穿透毛发。将此属性设置为 (1, 1, 1) 可以使大量白光通过毛发透射,从而产生强烈的效果。 |
Transmission Rim | 设置毛发边缘周围的背光毛发强度。将此属性设置为 0 可以完全消除透射效果。 |
Advanced Options
属性 | 描述 |
---|---|
Enable GPU Instancing | 启用此复选框可以指示 HDRP 在一个批次中使用相同的几何体和材质来渲染网格(如果可能)。这样可以加快渲染速度。如果网格具有不同的材质或者硬件不支持 GPU 实例化,则 HDRP 无法在一个批次中渲染这些网格。例如,如果游戏对象具有基于对象轴心的动画,则不能对它们进行静态批处理,但 GPU 可以实例化它们。 |
Baked Emission | 指示发射颜色是否影响全局光照。 |
Motion Vector For Vertex Animation | 指示 HDRP 是否为使用顶点动画的游戏对象编写运动矢量。这将消除顶点动画可能导致的重影。 |
Add Precomputed Velocity | 指示是否使用存储在 Alembic 文件中的预先计算的速度信息。 |
限制
面光源当前不支持织物和毛发材质。这意味着它们不会照亮使用以下任何项目的材质,也不能投射这些材质的阴影: