你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
材质
材料是定义如何渲染三角网格的共享资源。 另一方面,点云不会公开任何材料。
材料用于指定
- 要应用哪些纹理,
- 是否要使对象透明,
- 光线如何与表面交互。
材料在模型转换期间自动创建,可在运行时访问。 还可以通过代码创建自定义材料并替换现有材料。 如果要跨许多网格共享相同资料,此方案特别有意义。 由于对材料的修改在每个引用它的网格上可见,因此此方法可用于轻松应用更改。
注意
某些用例(例如突出显示已选取的对象)可以通过修改材料来完成,但通过 HierarchicalStateOverrideComponent 实现会轻松得多。
材料类型
Azure 远程渲染具有两种不同的材料类型:
PBR 材料用于应尽可能在物理方面正确渲染的曲面。 使用基于物理方式的渲染 (PBR) 为这些材料计算现实照明。 若要充分利用此材料类型,必须提供高质量输入数据,例如,粗糙度和法线贴图。
颜色材料用于不需要额外照明的情况。 这些材料始终全亮,更易于设置。 颜色材料用于根本不应有照明或是已合并静态照明的数据,例如通过 photogrammetry 获取的模型。
网格与MeshComponent 材料分配
三角网格具有一个或多个子网格。 每个子网格都引用一个材料。 可以更改材料以在网格上直接使用,也可以在 MeshComponent 上替代要用于子网格的材料。
直接在网格资源上修改材料时,此更改会影响该网格的所有实例。 但在 MeshComponent 上更改它只会影响这一个网格实例。 更合适的方法取决于所需行为,但修改 MeshComponent 是更常见的方法。
材料重复数据删除
在转换过程中,多个具有相同属性和纹理的材料会自动进行重复数据删除,转变为单个材料。 可以在转换设置中禁用此功能,但建议使它保持打开状态以获得最佳性能。
Material 类
API 提供的所有材料都派生自基类 Material
。 可以通过 Material.MaterialSubType
或直接强制转换来查询其类型:
void SetMaterialColorToGreen(Material material)
{
if (material.MaterialSubType == MaterialType.Color)
{
ColorMaterial colorMaterial = material as ColorMaterial;
colorMaterial.AlbedoColor = new Color4(0, 1, 0, 1);
return;
}
PbrMaterial pbrMat = material as PbrMaterial;
if (pbrMat != null)
{
pbrMat.AlbedoColor = new Color4(0, 1, 0, 1);
return;
}
}
void SetMaterialColorToGreen(ApiHandle<Material> material)
{
if (material->GetMaterialSubType() == MaterialType::Color)
{
ApiHandle<ColorMaterial> colorMaterial = material.as<ColorMaterial>();
colorMaterial->SetAlbedoColor({ 0, 1, 0, 1 });
return;
}
if (material->GetMaterialSubType() == MaterialType::Pbr)
{
ApiHandle<PbrMaterial> pbrMat = material.as<PbrMaterial>();
pbrMat->SetAlbedoColor({ 0, 1, 0, 1 });
return;
}
}
API 文档
- C# Material 类
- C# ColorMaterial 类
- C# PbrMaterial 类
- C# RenderingConnection.CreateMaterial()
- C++ Material 类
- C++ ColorMaterial 类
- C++ PbrMaterial 类
- C++ RenderingConnection::CreateMaterial()