你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
PBR 材料
PBR 材料是 Azure 远程渲染支持的材料类型之一。 它们用于应该接收真实照明的三角网格。 另一方面,点云不受动态照明的影响。
PBR 是 Physically Based Rendering(基于物理学的渲染)的缩写,表示材料以物理上合理的方式描述表面的视觉属性,这样,在所有照明条件下均可获得逼真的效果。 大多数新式游戏引擎和内容创建工具都支持 PBR 材料,因为这些材料被认为最接近真实场景,因此最适合用于实时渲染。
基于物理学的渲染的核心概念是使用 BaseColor、Metalness 和 Roughness 属性来仿真各种真实材料。 本文不会详细介绍 PBR。 有关 PBR 的详细信息,请参阅其他源。
不过,PBR 材料并非通用解决方案。 有些材料会根据视角以不同的方式反映颜色。 例如,在某些结构或汽车喷漆场景中。 此类材料不由标准 PBR 模型处理,目前不受 Azure 远程渲染的支持。 这一局限性包括 PBR 的扩展,例如薄膜(多层表面)和透明涂层(用于汽车喷漆)。
PBR 材料属性
以下材料属性在运行时 API 中公开,例如分别在 C# PbrMaterial 类或 C++ PbrMaterial 类上公开。
PbrFlags
:可在此位掩码中组合其他功能标志,以启用以下功能:TransparentMaterial
:对于 PBR 材料,只有一种透明度设置:是否启用透明度。 不透明度由 albedo 颜色的 alpha 通道定义的。 启用后,会调用更复杂的渲染方法来绘制半透明表面。 Azure 远程渲染实现真正的顺序独立透明度 (OIT)。 渲染透明几何体的资源开销很大。 如果只需在表面上绘制小孔(例如绘制树叶),则最好是改用 alpha 裁剪。
在上图中可以看到,最右侧的球体是完全透明的,但反射仍然可见。
重要
如果在运行时应将任何材料从不透明切换为透明,则渲染器必须使用 TileBasedComposition 渲染模式。 此项限制不适用于一开始就转换为透明材料的材料。
UseVertexColor
:如果网格包含 vertex 颜色且已启用此选项,则会将网格的 vertex 颜色叠加到AlbedoColor
和AlbedoMap
中。 默认会禁用UseVertexColor
。DoubleSided
:如果将双面设置为 true,则即使相机正对背景面,也会渲染使用此材料的三角形。 对于 PBR 材料,还会正确计算背面的照明。 默认情况下,禁用此选项。 另请参阅 Single-sided rendering。SpecularHighlights
:为该材料启用反射高光。 默认情况下启用SpecularHighlights
标志。AlphaClipped
:根据低于AlphaClipThreshold
值的 alpha 值(参阅下文),基于每个像素启用硬开孔。 这也适用于不透明材料。FresnelEffect
:此材料标志为对应材料启用附加的菲涅尔透镜效果。 此效果的外观由下面介绍的其他菲涅尔透镜参数FresnelEffectColor
和FresnelEffectExponent
控制。TransparencyWritesDepth
:如果对材料设置了TransparencyWritesDepth
标志,且材料是透明的,则使用此材料的对象也会纳入到最终深度缓冲区。 请参阅下一部分中的 PBR 材料标志 transparent。 如果用例中需要为完全透明的场景采用更加真实的后期重投影,则建议启用此功能。 对于不透明/透明的混合场景,此设置可能会引入不太真实的投影行为或投影项目。 出于此原因,对于一般用例,默认推荐设置是禁用此标志。 写入的深度值取自离相机最近的对象的每像素深度层。
AlbedoColor
:此颜色与其他颜色(如AlbedoMap
或 vertex 颜色)叠加。 如果对材料启用了透明度,则可以使用 alpha 通道调整不透明度,1
表示完全不透明,0
则表示完全透明。 默认的反照率颜色为不透明白色。注意
当某个 PBR 材料完全透明(就像非常干净的玻璃表面)时,它仍会反映环境。 类似于太阳的亮点仍在反射中可见。 彩色材料则与此不同。
AlbedoMap
:与每个像素反照率值对应的 2D 纹理。AlphaClipThreshold
:如果在PbrFlags
属性上设置了AlphaClipped
标志,则不会绘制反照率 alpha 值低于AlphaClipThreshold
值的所有像素。 即使不启用透明度,也可以使用 alpha 裁剪,并且渲染速度更快。 但是 alpha 剪裁材料的渲染速度仍比完全不透明材料要慢。 默认已禁用 alpha 剪裁。TexCoordScale
和TexCoordOffset
:将缩放叠加到 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 的值会放大法线贴图扰动。Roughness
和RoughnessMap
:Roughness 用于定义表面的粗糙或光滑程度。 与光滑表面相比,粗糙表面可朝更多方向散射光线,使反射变得更模糊而不是更清晰。 值的范围为0.0
到1.0
。 当Roughness
等于0.0
时,反射将变得清晰。 当Roughness
等于0.5
时,反射将变得模糊。 如果同时提供了粗糙度值和粗糙度贴图,最终的值将是这两个值的积。Metalness
和MetalnessMap
:在物理学中,此属性对应于表面是导电性还是介电性的。 导电材料具有不同的反射属性,它们往往是在无 albedo 颜色的情况下具有反射性。 在 PBR 材料中,此属性会影响表面反映周围环境的程度。 值的范围为0.0
到1.0
。 当 metalness 为0.0
时,反照率颜色将完全可见,材料看起来像是塑料或陶瓷。 当 metalness 为0.5
时,材料看起来像是喷了漆的金属。 当 metalness 为1.0
时,表面将几乎完全失去其反照率颜色,只反射周围环境。 例如,如果metalness
为1.0
,且roughness
为0.0
,则表面看起来像是真实的镜子。 如果同时提供了金属度值和金属度贴图,最终的值将是这两个值的积。在上图中,右下角的球体看起来像是真实的金属材料,左下角的球体看起来像是陶瓷或塑料。 albedo 颜色还会根据物理属性而变化。 随着粗糙度的增加,材料将失去反射清晰度。
AOMap
和AOScale
:环境遮蔽可在遮挡的区域中添加阴影,使存在裂隙的物体看起来更逼真。 遮蔽值的范围为0.0
到1.0
,其中,0.0
表示黑暗(遮挡),1.0
表示无遮挡物。 如果提供 2D 纹理作为遮蔽贴图,则会启用该效果,AOScale
将充当乘数。
转换期间的颜色材料重写
在通过材料重写文件进行模型转换期间,可以重写颜色材料属性的子集。 下表显示了上面记录的运行时属性与重写文件中相应属性名称之间的映射:
材料属性名称 | 重写文件中的属性名称 |
---|---|
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 文档
- C# PbrMaterial 类
- C# RenderingConnection.CreateMaterial()
- C++ PbrMaterial 类
- C++ RenderingConnection::CreateMaterial()