你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
颜色材料
颜色材料是 Azure 远程渲染支持的材料类型之一。 它们用于不应接收任何类型的照明的网格,而是始终以全亮度显示。 这可能适用于“发光”材料,如汽车仪表板、电灯泡或已引入静态照明的数据(例如通过摄影测量获取的模型)。
颜色材料比 PBR 材料能够更加有效地渲染,因为它的底纹模型更为简单。 它们还支持不同的透明模式。
颜色材料属性
以下材料属性在运行时 API 中公开,例如分别在 C# ColorMaterial 类或 C++ ColorMaterial 类上公开。
ColorFlags
:可在此位掩码中组合其他功能标志,以启用以下功能:UseVertexColor
:如果网格包含 vertex 颜色且已启用此选项,则会将网格的 vertex 颜色叠加到AlbedoColor
和AlbedoMap
中。 默认会禁用UseVertexColor
。DoubleSided
:如果将双面设置为 true,则即使相机正对背景面,也会渲染使用此材料的三角形。 默认情况下,禁用此选项。 另请参阅 Single-sided rendering。AlphaClipped
:根据低于AlphaClipThreshold
值的 alpha 值(参阅下文),基于每个像素启用硬开孔。 这也适用于不透明材料。TransparencyWritesDepth
:如果对材料设置了TransparencyWritesDepth
标志,且材料是透明的,则使用此材料的对象也会纳入到最终深度缓冲区。 请参阅下一部分中的颜色材料属性ColorTransparencyMode
。 如果用例中需要为完全透明的场景采用更加真实的后期重投影,则建议启用此功能。 对于不透明/透明的混合场景,此设置可能会引入不太真实的投影行为或投影项目。 出于此原因,对于一般用例,默认推荐设置是禁用此标志。 写入的深度值取自离相机最近的对象的每像素深度层。FresnelEffect
:此材料标志为对应材料启用附加的菲涅尔透镜效果。 此效果的外观由下面介绍的其他菲涅尔透镜参数FresnelEffectColor
和FresnelEffectExponent
控制。
AlbedoColor
:此颜色与其他颜色(如AlbedoMap
或 vertex 颜色)叠加。 如果对材料启用了透明度,则可以使用 alpha 通道调整不透明度,1
表示完全不透明,0
则表示完全透明。 默认的反照率颜色为不透明白色。注意
由于颜色材料不反映环境,因此完全透明的颜色材料是不可见的。 这与 PBR 材料不同。
AlbedoMap
:与每个像素反照率值对应的 2D 纹理。AlphaClipThreshold
:如果在ColorFlags
属性上设置了AlphaClipped
标志,则不会绘制反照率 alpha 值低于AlphaClipThreshold
值的所有像素。 即使不启用透明度,也可以使用 alpha 裁剪,并且渲染速度更快。 但是 alpha 剪裁材料的渲染速度仍比完全不透明材料要慢。 默认已禁用 alpha 剪裁。TexCoordMode
:定义用于生成反照率纹理的纹理坐标的模式。 如果此材料不使用纹理,则忽略此模式。 默认情况下,纹理坐标提取自网格的输入顶点流(模式TextureCoordinateGenerationMode.SourceUv0
或TextureCoordinateGenerationMode.SourceUv1
),然后通过TexCoordScale
和TexCoordOffset
进行转换。 通过代码设置材质时,也可以将此模式设置为TextureCoordinateGenerationMode.PlanarObjectSpace
或TextureCoordinateGenerationMode.PlanarWorldSpace
以生成将坐标,此坐标可作为两个可配置 3D 平面(TexCoordPlaneU
和TexCoordPlaneV
)的顶点距离。 这称为“平面纹理贴图”。TexCoordScale
和TexCoordOffset
:对于源网格中的纹理坐标,可以应用额外的线性转换。 将缩放叠加到 UV 纹理坐标,并向其添加偏移量。 可用于拉伸和移动纹理。 默认缩放为 (1, 1),默认偏移量为 (0, 0)。TexCoordPlaneU
和TexCoordPlaneV
:对于平面映射模式,这些模式分别定义 u 坐标和 v 坐标的纹理平面。 平面以标准法线形式 (A,B,C,D) 定义,因此坐标计算为 t = Ax + By + C*z + D,其中 (x,y,z) 是世界空间或物体空间中的顶点位置。FresnelEffectColor
:材料使用的菲涅尔透镜颜色。 仅在为材料设置了菲涅尔透镜效果标志时,它才变得重要(请参阅上述属性)。 此属性控制菲涅尔透镜光照的基础颜色(请参阅菲涅尔透镜效果以获取完整说明)。 目前仅 RGB 通道值是重要值,忽略 alpha 值。FresnelEffectExponent
:用于此材料的菲涅尔透镜指数。 仅在为材料设置了菲涅尔透镜效果标志时,它才变得重要(请参阅上述属性)。 此属性控制菲涅尔透镜光照的传播。 最小值 0.01 将使光照遍布整个对象。 最大值 10.0 会将光照限制为仅最亮的边缘可见。VertexMix
:此值介于0
和1
之间,指定网格中 vertex 颜色对最终颜色的作用程度。 默认值为 1,将 vertex 颜色完全叠加到反照率颜色。 将值设置为 0,将完全忽略 vertex 颜色。ColorTransparencyMode
:与 PBR 材料相反,颜色材料区分不同的透明模式:Opaque
:默认模式禁用透明度。 但仍然可以使用 alpha 剪裁,且应将其作为首选(如果空间足够)。AlphaBlended
:此模式类似于 PBR 材料的透明模式。 它应该用于透明材料(例如玻璃)。Additive
:此模式是最简单、最有效的透明模式。 向已渲染的图像添加材料效果。 此模式可用于模拟发光(但仍透明)对象,例如用于突出显示重要对象的标记。
转换期间的颜色材料重写
在通过材料重写文件进行模型转换期间,可以重写颜色材料属性的子集。 下表显示了上面记录的运行时属性与重写文件中相应属性名称之间的映射:
材料属性名称 | 重写文件中的属性名称 |
---|---|
ColorFlags.AlphaClipped |
alphaClipEnabled |
ColorFlags.UseVertexColor |
useVertexColor |
ColorFlags.DoubleSided |
isDoubleSided |
ColorFlags.TransparencyWritesDepth |
transparencyWritesDepth |
AlbedoColor |
albedoColor |
TexCoordScale |
textureCoordinateScale |
TexCoordOffset |
textureCoordinateOffset |
ColorTransparencyMode |
transparent |
AlphaClipThreshold |
alphaClipThreshold |
API 文档
- C# ColorMaterial 类
- C# RenderingConnection.CreateMaterial()
- C++ ColorMaterial 类
- C++ RenderingConnection::CreateMaterial()