AxF 着色器 (AxF Shader)
AxF 着色器使您可以在高清渲染管线 (High Definition Render Pipeline, HDRP) 中渲染 X-Rite AxF 材质。AxF是一种标准化的格式,允许交换材质外观数据。AxF 文件的生成通常涉及一个创作套件,该套件包含真实的材质测量值,可以通过这些测量值生成各种纹理和模型属性。
要将 AxF 文件数据转换为材质属性以及 HDRP 的 AxF 着色器可以理解和渲染的数据,Unity 需要使用 AxF Importer 包。您不需要使用 Importer,而是可以使用 Inspector 自行分配值。但是,AxF 着色器专门设计为处理 AxF Importer 从 AxF 文件转换而来的数据。Unity 目前没有提供任何方法来创作 AxF 材质所依赖的某些资源,以准确地描绘它们所代表的真实材质。这意味着,如果您手动创建 AxF 材质,则可能无法重现通过导入的 AxF 文件提供的结果。
导入和创建 AxF 材质
尽管可以在 Unity 中从头开始创建 AxF 材质,但是您应当改用外部创作工具(例如 X-Rite 的 Total Appearance Capture (TAC™) Ecosystem)来创建 AxF 文件,然后将结果导入 Unity 中。如果您安装了 AxF Importer 包,Unity 会自动将 AxF 文件导入为 AxF 材质。
AxF Importer 在 Unity Enterprise for Product Lifecycle 中提供。下载 AxF Importer 包后,请使用 Package Manager 在本地安装这个包。有关如何安装本地包的信息,请参阅安装本地包。
使用 AxF Importer 包
导入 AxF 文件时,不能修改其任何属性。如果要编辑 AxF 材质并已安装 AxF Importer 包,则可以创建已导入的 AxF 材质的可编辑副本。为此需要执行以下操作:
- 在 Unity 项目中选择一个 AxF 文件,并在 Inspector 中查看该文件。
- 右键单击 Imported Object 标题区域,然后从上下文菜单中选择 Create AxF Material From This。
此过程不会复制原始 AxF 文件使用的纹理和其他资源。相反,重复的材质会引用原始文件的纹理和资源,但是其 Inspector 中的每个值都是可编辑的。
注意:如果您手动引用新的纹理,请确保新纹理使用与其替换的纹理相同的编码。否则,不一致的输入值会产生不可预测或有缺陷的渲染。
从头开始创建 AxF 材质
HDRP 中的新材质默认使用光照着色器。要从头开始创建 AxF 材质,请创建一个材质,然后将其设置为使用 AxF 着色器。为此需要执行以下操作:
- 在 Unity 编辑器中,导航到项目的 Asset 窗口。
- 右键单击 Asset 窗口,然后选择 Create > Material。这会在 Unity 项目的 Asset 文件夹中添加一个新材质。
- 在 Material Inspector 顶部,单击 Shader 下拉选单,然后选择 HDRP > AxF。
可以将 AxF 材质属性从导入的 AxF 材质复制到新创建的 AxF 材质。为此需要执行以下操作:
- 在 Unity 项目中选择一个 AxF 文件,并在 Inspector 中查看该文件。
- 在标题区域中,右键单击 Shader 下拉选单,然后从上下文菜单中选择 Copy AxF Material Properties。
- 选择新的 AxF 材质,然后在 Inspector 中进行查看。
- 在标题区域中,右键单击 Shader 下拉选单,然后从上下文菜单中选择 Paste AxF Material Properties。
属性
Surface Options
Surface Options 控制材质表面的整体外观以及 Unity 如何在屏幕上渲染材质。
注意:AxF Importer 将每个纹理导入为半浮点、线性、sRGB 色域(表示颜色时)。
属性 | 描述 |
---|---|
Surface Type | 使用下拉选单定义材质是否支持透明度。具有 Transparent Surface Type 的材质比具有 Opaque Surface Type 的材质在渲染时更耗资源。根据选择的 Surface Type,HDRP 会显示更多属性。有关该功能的更多信息以及每个 Surface Type 显示的属性列表,请参阅 Surface Type 文档。 |
- Rendering Pass | 使用下拉选单设置 HDRP 处理此材质使用的渲染通道。有关此属性的更多信息,请参阅 Surface Type 文档。 |
Double-Sided | 启用此复选框可以使 HDRP 渲染几何体中多边形的两个面。有关该功能的更多信息以及该功能可显示的属性列表,请参阅 Double-Sided 文档。 |
Receive Decals | 启用此复选框可以允许 HDRP 在该材质的表面上绘制贴花。 |
Receive SSR (Transparent) | 启用此复选框可以在处理屏幕空间反射通道时使 HDRP 包含该材质。有一个用于透明表面类型的单独选项。 |
Main Mapping Configuration
属性 | 描述 |
---|---|
Mapping Mode | 控制所有纹理的材质的纹理贴图模式。 • UV0..UV3:像在 Lit 中一样,使用从 UV0 到 UV3 顶点属性的 UV 集。请注意,UV1 用于 Unity 中的烘焙光照贴图,因此不建议使用此集。 • PlanarXY,YZ,ZX:使用沿指定平面的平面贴图。 • Triplanar:使用三平面贴图。 • Planar Space:选择平面或三平面贴图模式时,可以使用设置为(分别)“世界”或“本地”的“平面空间”选项来选择使用的坐标是世界空间还是对象空间。 |
Main Tiling & Offset | 在 Surface Inputs 部分中设置每个纹理的平铺率 (xy) 和偏移 (zw)。HDRP 使用这些值在对象的切线空间中沿着材质表面的 xy 轴平铺纹理。每个纹理属性还可以指定在这些主值之上应用的附加平铺和偏移值(乘以特定于纹理属性的平铺率,并将偏移与此处设置的主值相加)。这些附加的平铺和偏移出现在同一行上每个纹理属性的旁边。 |
Advanced Surface Inputs
属性 | 描述 |
---|---|
BRDF Type | 控制主要的 AxF 材质表示形式。 • SVBRDF:有关在选择此选项时 Unity 显示的属性的信息,请参阅 BRDF Type - SVBRDF。 • CAR_PAINT:有关在选择此选项时 Unity 显示的属性的信息,请参阅 BRDF Type - CAR_PAINT。 |
BRDF Type - SVBRDF
属性 | 描述 |
---|---|
Diffuse Type | SVBRDF BRDF Type 表示方式支持两种漫反射模型: • LAMBERT:一种简单的漫射模型,其中的反射率在每个视图方向上都是恒定的。该模型使用单个反照率颜色属性。 • OREN_NAYAR:该漫反射模型可以更好地表示粗糙的漫射表面。该模型使用粗糙度属性和反照率颜色属性。 |
Specular Type | SVBRDF BRDF Type 支持多种镜面反射模型: • WARD:源自微面的模型,这种模型通过微面方向的高斯分布来微观地描述表面。此选项具有多个变体和一个可配置的菲涅耳效应。有关这些属性的信息,请分别参阅 Ward Variants 和 Fresnel Variant。 • BLINN_PHONG:经典 Blinn-Phong 经验反射模型的各向异性版本。镜面反射衰减与视图和光方向之间的中间角度的余弦(而不是高斯)成正比。此选项具有多个变体,但不包括菲涅耳效应。有关这些变体的信息,请参阅 Blinn Variant。 • COOK_TORRANCE:源自微面的模型,与 WARD 相反。该模型是各向同性的,微面分布是高斯分布。 • GGX:像 HDRP 的光照材质一样,该模型具有缓慢的镜面反射衰减,所产生的高光比高斯模型或余弦模型在更大的区域内以更慢的速度衰减。 |
Fresnel Variant | WARD Specular Type 允许您指定 HDRP 如何计算材质的菲涅耳效应: • NO_FRESNEL:从材质中移除菲涅耳效应。 • FRESNEL:使用精确的方程式来计算菲涅耳。 • SCHLICK:使用近似法来计算菲涅耳。与 FRESNEL 选项相比,这种计算方式的资源消耗量更少。 仅当 Specular Type 设置为 WARD 时,此属性才可见。 |
Ward Variant | WARD Specular Type 支持多种子变体,主要基于归一化术语的更改: • WARD:基于 1992 年 Ward 等人的最初论文。 • DUER:基于 Duer 等人 2004 年论文的修改。 • GEISLERMORODER:基于 Geisler 和 Moroder 2010 年的修改。此模型主要是为辐照度预测渲染软件开发的,是 Ward 的最高级形式,尤其在掠射角度方面更逼真。 仅当 Specular Type 设置为 WARD 时,此属性才可见。 |
Blinn Variant | BLINN Specular Type 支持多种变体: • BLINN:这是经典的 Blinn-Phong 模型,各向异性对此没有影响。 • ASHIKHMIN_SHIRLEY:基于 Ashikhmin 和 Shirley 的模型的各向异性版本。 仅当 Specular Type 设置为 BLINN_PHONG 时,此属性才可见。 |
Diffuse Color | 指定一个 RGB 纹理,用于控制材质颜色。要为此字段指定纹理,请单击单选按钮,然后在 Select Texture 窗口中选择纹理。 |
Specular Color | 指定一个 RGB 纹理,用作材质镜面反射颜色的乘数。注意:此属性不代表常规 PBR 工作流程中通常所说的“镜面反射颜色”(也称为“F0”,即与表面垂直的菲涅耳反射),也就是说,它与镜面反射颜色 (Specular Color) 材质类型所代表的含义不同。实际上代表的是 HDRP 与镜面反射 BRDF 求值结果相乘得出的颜色色调。 |
Specular Lobe | 指定用于对材质表面粗糙度进行编码的纹理。根据选择的 Specular Type 值,HDRP 使用不同的颜色通道: • 各向同性镜面反射模型:HDRP 使用红色通道。 • 各向异性镜面反射模型:HDRP 使用红色和绿色通道。 HDRP 将纹理中的值解释为 0 到 1。与光照着色器的 GGX 相比,类似的 AxF 粗糙度(当 Specular Model 设置为 GGX 时)如下: axf_roughness = (1 - hdrp_lit_user_smoothness)^2 |
Specular Lobe Scale | Specular Lobe 粗糙度值的乘数。较低的值可使您的材质整体更平滑且各向异性更小。 注意:AxF 文件不包含此值。因此,如果您希望材质与 AxF 文件中预期的外观一致,则应将此值设置为 1。 |
Fresnel | 指定一个纹理(仅红色通道),用于定义表面镜面反射模型在法线 0 处的反射率。 |
Normal | 指定一个 RGB 纹理,用于在切线空间中定义法线贴图。HDRP 使用此纹理的红色、绿色和蓝色通道中的值作为三分量归一化矢量值。这取代了只能描述矢量的两个分量的常规 RG 或 AG。 |
Alpha | 指定一个纹理(仅红色通道),用于定义材质表面的透明度。材质使用此纹理的红色通道作为透明度值。 |
Is Anisotropic | 表示材质支持各向异性。 |
- Anisotropy Angle | 指定一个纹理(仅红色通道),用于定义切线帧旋转贴图。此贴图确定了切线帧的 x 和 y 轴方向,HDRP 将按这些方向对齐各向异性粗糙度属性。 HDRP 将红色通道从其原始范围(0 到 1)映射到 -pi / 2 到 pi / 2 之间。 注意:HDRP 通过内插的顶点切线确定 x 轴的原始切线帧,并通过内插的顶点法线确定 z 轴的原始切线帧,而内插的顶点切线和顶点法线均来自网格几何体。 |
Enable Clearcoat | 指示材质表面上是否有透明涂层。 |
- Clearcoat Color | 指定一个 RGB 纹理,用于调整进入和离开涂层的光线。用作透明涂层的色调。 |
- Clearcoat Normal | 指定一个 RGB 纹理,用于在切线空间中为涂层定义法线贴图。HDRP 使用此纹理的红色、绿色和蓝色通道中的值作为三分量归一化矢量值。这取代了只能描述矢量的两个分量的常规 RG 或 AG。 |
- Enable Refraction | 指示透明涂层是否折射。如果启用此复选框,则 HDRP 将使用透明涂层折射的角度来计算材质表面的底涂层。 |
- - Clearcoat IOR | 指定一个纹理(仅红色通道),用于隐式定义透明涂层的折射率 (IOR),方法是将其编码为单色(单一值)F0(也称为镜面反射颜色或者 0 度入射时的菲涅耳反射率。这种情况下还假定涂层与空气接触)。因此,该值在 0 到 1 范围内,并且 HDRP 计算出的最终 IOR 为:IOR = (1.0 + squareRoot(R) ) / (1.0 - squareRoot(R)) 其中的 R 是此纹理的红色通道中的归一化值。注意:HDRP 将此 IOR 用于涂层折射,还用于穿过涂层和涂层上的透射和反射(如果启用)。因此,启用透明涂层时,必须始终为该属性分配一个纹理。 |
BRDF Type - CAR_PAINT
属性 | 描述 |
---|---|
BRDF Color | 指定一个 RGB 纹理,用于捕获汽车油漆色调的角度相关变体,类似于对彩虹色油漆颜色进行建模。每个 UV 轴表示以下内容:u 轴表示变化,这种变化取决于中间矢量(视图方向和光方向之间的中间矢量)与表面法线之间的角度。v 轴表示视图或光线与该中间值之间的角度(也称为“差异”角度)。属性空间从左上角开始,其中 U 等于 1(最大范围),角度对应于 pi / 2。 |
BRDF Color Scale | BRDF Color 颜色值的乘数。注意:AxF 文件不包含此值。因此,如果您希望材质与 AxF 文件中预期的外观一致,则应将此值设置为 1。 |
BRDF Color Table Diagonal Clamping | 指示 Unity 是否应限制对 BRDF Color 贴图的访问权。某些 BRDF 颜色表在中央对角线区域下方的下半部分为零(全黑)。通常,在正确测量的材质上,折射率 (IOR) 贴图和折射选项的组合会阻止着色器访问零值。Unity AxF Importer 会填充 HDRP 用来强制着色器从不访问零区域的值(请参阅下面的限制)。为此,HDRP 以线性方式重新映射纹理的非黑色区域中的角域。 |
- BRDF Color Map UV Scale Restriction | 指定 HDRP 在限制 BRDF 颜色表时应用的限制的缩放。如果使用较低的值,这会阻止着色器达到较高的角度范围(更接近 pi / 2)。如果将这两个值都设置为 1,则等效于禁用对角线限制功能。 |
BTF Flake Color Texture2DArray | 指定薄片的角度切片数据测量值。这组切片代表一种双向纹理函数 (BTF)。您不应手动分配此属性。相反,应让 AxF Importer 分配此属性。 |
BTF Flake Scale | 薄片反射强度的乘数。注意:AxF 文件不包含此值。因此,如果您希望材质与 AxF 文件中预期的外观一致,则应将此值设置为 1。 |
Flakes Tiling | 用于为薄片纹理切片应用特定平铺的乘数。 |
ThetaFI Slice LUT | 指定用于将角度范围转换为切片的查找表。您不应手动分配此属性。相反,应让 AxF Importer 分配此属性。 |
Diffuse coeff | 漫射瓣形系数。CAR_PAINT AxF 模型使用混合多瓣形模型。该模型累计如下:BRDFColor * (Lambert + Cook-Torrance) + Flakes BTF 。这可以控制模型的兰伯特 (Lambert) 漫反射部分的漫射反照率。 |
CT Lobes F0s | 每个 Cook-Torrance 瓣形在 0 度入射角处的菲涅耳反射率。 |
CT Lobes coeff | Cook-Torrance 瓣形镜面反应的反射乘数系数。 |
CT Lobes spreads | Cook-Torrance 瓣形的粗糙度。 |
Enable Clearcoat | 指示材质表面上是否有透明涂层。 |
- Clearcoat Normal | 指定一个 RGB 纹理,用于在切线空间中为涂层定义法线贴图。HDRP 使用此纹理的红色、绿色和蓝色通道中的值作为三分量归一化矢量值。这取代了只能描述矢量的两个分量的常规 RG 或 AG。 使用此属性可模拟汽车油漆橘皮效果。 请注意,涂层下面的表面绝不可能有自己的法线贴图,而是会使用来自网格几何体的顶点插值法线。 |
- Clearcoat IOR | 控制透明涂层的 IOR。与 SVBRDF 不同,这是单个标量值,而不是纹理。注意:HDRP 将此 IOR 用于涂层折射,还用于穿过涂层和涂层上的透射和反射(如果启用)。 |
- Enable Refraction | 指示透明涂层是否折射。如果启用此复选框,则 HDRP 将使用透明涂层折射的角度来计算材质表面的底涂层。 |
Advanced options
属性 | 描述 |
---|---|
Enable GPU instancing | 启用此复选框可以指示 HDRP 在一个批次中使用相同的几何体和材质来渲染网格(如果可能)。这样可以加快渲染速度。如果网格具有不同的材质或者硬件不支持 GPU 实例化,则 HDRP 无法在一个批次中渲染这些网格。例如,如果游戏对象具有基于对象轴心的动画,则不能对它们进行静态批处理,但 GPU 可以实例化它们。 |
Add Precomputed Velocity | 启用此复选框可以使用存储在 Alembic 文件中的预先计算的速度信息。 |