你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

PBR 材料

PBR 材料是 Azure 远程渲染支持的材料类型之一。 它们用于应该接收真实照明的三角网格。 另一方面,点云不受动态照明的影响。

PBR 是 Physically Based Rendering(基于物理学的渲染)的缩写,表示材料以物理上合理的方式描述表面的视觉属性,这样,在所有照明条件下均可获得逼真的效果。 大多数新式游戏引擎和内容创建工具都支持 PBR 材料,因为这些材料被认为最接近真实场景,因此最适合用于实时渲染。

Helmet glTF sample model rendered by ARR

基于物理学的渲染的核心概念是使用 BaseColorMetalnessRoughness 属性来仿真各种真实材料。 本文不会详细介绍 PBR。 有关 PBR 的详细信息,请参阅其他源

不过,PBR 材料并非通用解决方案。 有些材料会根据视角以不同的方式反映颜色。 例如,在某些结构或汽车喷漆场景中。 此类材料不由标准 PBR 模型处理,目前不受 Azure 远程渲染的支持。 这一局限性包括 PBR 的扩展,例如薄膜(多层表面)和透明涂层(用于汽车喷漆)。

PBR 材料属性

以下材料属性在运行时 API 中公开,例如 C# PbrMaterial 类C++ PbrMaterial 类

  • PbrFlags:在此位掩码中可以组合杂项功能标志以启用以下功能:

    • TransparentMaterial:对于 PBR 材料,只有一个透明度设置:它已启用或不启用。 不透明度由 albedo 颜色的 alpha 通道定义的。 启用后,将调用更复杂的呈现方法来绘制半透明图面。 Azure 远程渲染实现真正的顺序独立透明度 (OIT)。 渲染透明几何体的资源开销很大。 如果只需在表面上绘制小孔(例如绘制树叶),则最好是改用 alpha 裁剪。

    Spheres rendered with zero to full transparency 请注意,在上图中,最右侧的球体如何完全透明,但反射仍然可见。

    重要

    如果在运行时应将任何材料从不透明切换为透明,则渲染器必须使用 TileBasedComposition渲染模式。 此项限制不适用于一开始就转换为透明材料的材料。

    • UseVertexColor:如果网格包含 vertex 颜色,并且已启用此选项,则网格 vertex 的颜色将乘以 AlbedoColorAlbedoMap。 默认会禁用 UseVertexColor
    • DoubleSided:如果将双面设置为 true,则即使相机正对背景面,也会渲染使用此材料的三角形。 对于 PBR 材料,还会正确计算背面的照明。 默认情况下,禁用此选项。 另请参阅 Single-sided rendering
    • SpecularHighlights:为此材料启用反射高光。 默认情况下, SpecularHighlights 标志处于启用状态。
    • AlphaClipped:根据低于 AlphaClipThreshold 值的 alpha 值(参阅下文),基于每个像素启用硬开孔。 这也适用于不透明材料。
    • FresnelEffect:此材料标志为对应材料启用附加的菲涅尔透镜效果。 此效果的外观由下面介绍的其他菲涅尔透镜参数 FresnelEffectColorFresnelEffectExponent 控制。
    • TransparencyWritesDepth:如果对材料设置了 TransparencyWritesDepth 标志,且材料是透明的,则使用此材料的对象也会纳入到最终深度缓冲区。 请参阅下一部分中的 PBR 材料标志 transparent。 如果用例中需要为完全透明的场景采用更加真实的后期重投影,则建议启用此功能。 对于不透明/透明的混合场景,此设置可能会引入不太真实的投影行为或投影项目。 出于此原因,对于一般用例,默认推荐设置是禁用此标志。 写入的深度值取自离相机最近的对象的每像素深度层。
  • AlbedoColor:此颜色与其他颜色(如 AlbedoMap 或 vertex 颜色)叠加。 如果对材料启用了透明度,则可以使用 alpha 通道调整不透明度,1 表示完全不透明,0 则表示完全透明。 默认的反照率颜色为不透明白色。

    注意

    当 PBR 材料完全透明时,就像一个完全干净的玻璃表面一样,它仍然反映环境。 类似于太阳的亮点仍在反射中可见。 彩色材料则与此不同。

  • AlbedoMap:与每个像素反照率值对应的 2D 纹理

  • AlphaClipThreshold:如果标志 AlphaClipped 在属性上 PbrFlags 设置,则不绘制 albedo alpha 值低于 AlphaClipThreshold 的所有像素。 即使不启用透明度,也可以使用 alpha 裁剪,并且渲染速度更快。 但是 alpha 剪裁材料的渲染速度仍比完全不透明材料要慢。 默认已禁用 alpha 剪裁。

  • TexCoordScaleTexCoordOffset:将缩放叠加到 UV 纹理坐标,并向其添加偏移量。 可用于拉伸和移动纹理。 默认缩放为 (1, 1),默认偏移量为 (0, 0)。

  • FresnelEffectColor:材料使用的菲涅尔透镜颜色。 仅在为材料设置了菲涅尔透镜效果标志时,它才变得重要(请参阅上述属性)。 此属性控制菲涅尔透镜光照的基础颜色(请参阅菲涅尔透镜效果以获取完整说明)。 目前仅 RGB 通道值是重要值,忽略 alpha 值。

  • FresnelEffectExponent:用于此材料的菲涅尔透镜指数。 仅在为材料设置了菲涅尔透镜效果标志时,它才变得重要(请参阅上述属性)。 此属性控制菲涅尔透镜光照的传播。 最小值 0.01 将使光照遍布整个对象。 最大值 10.0 会将光照限制为仅最亮的边缘可见。

  • PbrVertexAlphaMode:确定如何使用顶点颜色的 alpha 通道。 提供了以下模式:

    • Occlusion:alpha 值表示环境遮挡值,因此仅影响天空框的间接照明。
    • LightMask:alpha 值用作应用的照明总量的刻度因子,这意味着 alpha 可用于变暗区域。 这会影响间接照明和直接照明。
    • Opacity:alpha 表示材料不透明(1.0)或透明(0.0)的方式。
  • NormalMap:若要模拟细粒度的详细信息, 可以提供普通地图

  • NormalMapScale:缩放普通地图强度的标量值。 值 1.0 采用正态地图的正态,值为 0 会使图面显示为平整。 大于 1.0 的值夸大了正常地图扰动。

  • RoughnessRoughnessMap:粗糙度定义表面的粗糙度或平滑度。 与光滑表面相比,粗糙表面可朝更多方向散射光线,使反射变得更模糊而不是更清晰。 值的范围为 0.01.0。 当 Roughness 等于 0.0 时,反射将变得清晰。 当 Roughness 等于 0.5 时,反射将变得模糊。 如果同时提供了粗糙度值和粗糙度贴图,最终的值将是这两个值的积。

  • MetalnessMetalnessMap:在物理中,此属性对应于表面是可导的还是二者。 导电材料具有不同的反射属性,它们往往是在无 albedo 颜色的情况下具有反射性。 在 PBR 材料中,此属性会影响表面反映周围环境的程度。 值的范围为 0.01.0。 当金属性为 0.0时,albedo 颜色完全可见,材料看起来像塑料或陶瓷。 当 metalness 为 0.5 时,材料看起来像是喷了漆的金属。 当金属是 1.0,表面几乎完全失去它的反省颜色,只反映周围的环境。 例如,如果 metalness1.0,且 roughness0.0,则表面看起来像是真实的镜子。 如果同时提供了金属度值和金属度贴图,最终的值将是这两个值的积。

    Spheres rendered with different metalness and roughness values

    在上图中,右下角的球体看起来像是真实的金属材料,左下角的球体看起来像是陶瓷或塑料。 albedo 颜色还会根据物理属性而变化。 随着粗糙度的增加,材料将失去反射清晰度。

  • AOMapAOScale通过向遮挡区域添加阴影,环境遮挡 使具有缝隙的对象看起来更现实。 遮蔽值的范围为 0.01.0,其中,0.0 表示黑暗(遮挡),1.0 表示无遮挡物。 如果 2D 纹理作为遮挡贴图提供,则启用效果并 AOScale 充当乘数。

    An object rendered with and without ambient occlusion

转换期间的颜色材料重写

在通过材料重写文件进行模型转换期间,可以重写颜色材料属性的子集。 下表显示了上面记录的运行时属性与重写文件中相应属性名称之间的映射:

材料属性名称 重写文件中的属性名称
PbrFlags.TransparentMaterial transparent
PbrFlags.AlphaClipped alphaClipEnabled
PbrFlags.UseVertexColor useVertexColor
PbrFlags.DoubleSided isDoubleSided
PbrFlags.TransparencyWritesDepth transparencyWritesDepth
AlbedoColor albedoColor
TexCoordScale textureCoordinateScale
TexCoordOffset textureCoordinateOffset
NormalmapScale normalMapScale
Metalness metalness
Roughness roughness
AlphaClipThreshold alphaClipThreshold

技术详细信息

Azure 远程渲染使用了 Cook-Torrance 微面 BRDF、GGX NDF、Schlick Fresnel 和 GGX Smith 相关可见性术语以及 Lambert 漫射术语。 目前,此模型是事实上的行业标准。 有关更深入的详细信息,请参阅以下文章:基于物理学的渲染 - Cook Torrance

可以在 Azure 远程渲染中使用“镜面反射-光泽度”PBR 模型来替代“金属度-粗糙度”PBR 模型。 此模型能够表示各种不同的材料。 不过,它的开销更大,且通常不适用于实时案例。 并非始终可以从“镜面反射-光泽度”转换为“金属度-粗糙度”,因为某些 (Diffuse, Specular) 值对无法转换为 (BaseColor, Metalness) 其他方向的转换更简单且更精确,因为所有 (BaseColor, Metalness) 对都对应于妥善定义的 (Diffuse, Specular) 对。

API 文档

后续步骤