PrincipledMaterial QML类型

允许使用金属/粗糙度工作流程为3D项目定义材质。更多信息... 更多信息

导入声明import QtQuick3D
继承

Material

属性

详细描述

在模型可以渲染到场景之前,它必须至少附加一个描述网格着色方式的材质。PrincipledMaterial 是一种 PBR 金属/粗糙度材质,旨在通过最少的参数集来实现易于使用。除了参数少之外,所有输入值都在 0 到 1 之间严格归一化,并有合理的默认值,这意味着即使不改变任何值,也可以使用该材质对模型进行着色。有关不同属性如何影响模型着色方式的介绍,请参阅Principled Material 例子

金属/粗糙度工作流程

Principled 材质被称为金属/粗糙度材质,在本质上这意味着材质的主要特性是通过 金属度粗糙度基础颜色 属性来控制的。

金属度

现实世界的材质分为两大类,金属和非金属材料(绝缘体)。在 Principled 材质中,材质所属的类别是由 metalness 值决定的。将 metalness 值设置为 0,表示该材质是绝缘体,而所有高于 0 的值都被认为是金属。在现实中,金属的 metalness 值将是 1,但 0 到 1 之间的值是可能的,通常用于具有降低反射率的金属。例如,为了在材质上渲染腐蚀或类似效果,应将材质的 metalness 降低,以便输出的属性更接近绝缘体材料。由于 metalness 值影响材质的反射率,可能会诱人使用金属度来调整光泽度,但首先要考虑你想描述的材质类型。提高 metalness 值以使绝缘体材料看起来更光亮,将引入对绝缘体材料不准确的特征,因此考虑是否更合适调整,例如,粗糙度 值。

粗糙度

材料的粗糙度描述了物体表面的状态。较低的粗糙度值表示物体表面光滑,因此比粗糙度值较高的材料更具反射性。

基本颜色

金属/粗糙度材料的基本颜色包含漫反射和镜面反射数据,基本颜色被解释为哪种类型主要由金属感值决定。例如,金属感值为1的材料,其大部分基本颜色解释为镜面颜色,而漫反射颜色是黑色色调。对于金属感值为0的材料,情况相反。当然,这只是一个简化了的说明,但可以大致了解基本颜色和金属感值之间的相互作用。对于那些熟悉镜面/光泽工作流程的人来说,这里有一个明显区别值得关注,即两种材料的颜色数据不直接兼容,因为在镜面/光泽材料中,漫反射颜色和镜面反射颜色来自不同的输入。

属性文档

alphaCutoff : 实数

alphaCutoff属性可用于指定使用遮罩alphaMode时的截止值。当alpha值低于阈值时,图块将完全透明(所有颜色通道均为0.0)。当alpha值等于或大于截止值时,颜色将不受任何影响。

默认值为0.5。

另请参阅alphaMode


alphaMode : 枚举

此属性指定了如何使用基本颜色基本颜色图的alpha通道。

注意:alpha截止测试仅考虑基本颜色alpha。没有考虑opacity节点不透明度

注意:采样基本颜色图时,实际alpha值是采样的alpha与基本颜色alpha的乘积。

常量描述
PrincipledMaterial.Default不应用测试,有效alpha值按原样传递。请注意,基本颜色或基本颜色图alpha小于1.0并不自动意味着alpha混合,使用该材料的对象可能仍然被视为不透明,如果没有其他相关属性(例如,不透明度小于1,存在不透明度图,或非默认的混合模式值)触发将对象视为半透明的处理。为了确保无论其他对象或材料属性如何,alpha混合都会发生,请设置Blend
PrincipledMaterial.Blend不应用截止测试,但保证alpha混合会发生。因此,具有此材料的对象永远不会被渲染器视为不透明。
PrincipledMaterial.Opaque没有应用 截止测试,渲染的对象被视为完全不透明,这意味着顶点颜色、基础颜色和基础颜色图中的 alpha 值被忽略,并替换为 1.0 的值。此模式不能保证不会发生 alpha 透明度混合。如果相关属性(例如,小于 1 的不透明度、不透明度图或非默认的 混合模式)表明如此,那么对象将被渲染管线视为半透明,就像使用 默认 alphaMode 一样。
PrincipledMaterial.Mask应用基于 alphaCutoff 的测试。如果有效 alpha 值低于 alphaCutoff,则片段变为完全透明并丢弃(所有丢弃的后果:该片段不写入深度缓冲区)。否则 alpha 值变为 1.0,因此片段将成为完全不透明。当涉及 alpha 透明度混合时,此模式的行为与 Opaque 相同,无论截止测试的结果如何。这意味着实现了 glTF 2 规范的 alpha 覆盖 实现说明。具有 alpha 截止测试的对象也可以投射阴影,因为它们默认表现为不透明对象,除非相关属性(例如,小于 1 的不透明度、不透明度图或非默认的 混合模式)意味着否则(在这种情况下,投射阴影将不可能)。

另请参阅 alphaCutoff混合模式


attenuationColor : 颜色

此属性定义了由于吸收而变成的颜色,当白光达到衰减距离时。默认值为 Qt.White


attenuationDistance : 浮点

此属性定义了介质的密度,以光在介质中与粒子相互作用之前旅行的平均距离给出。值为世界空间。默认值为 +infinity


baseColor : 颜色

此属性设置材质的基础颜色。根据指定的材料类型(金属或介电),会适当设置漫反射和镜面通道。例如,介电材料将具有与其基础颜色相同的漫反射颜色,而其镜面颜色(取决于镜面数量)将具有明亮的镜面颜色。对于金属,漫反射和镜面通道将来自基础颜色并混合,具有暗淡的漫反射通道和接近基础颜色的镜面通道。

另请参阅 基础颜色图alphaMode


baseColorMap : 纹理

此属性定义用于设置材质基础颜色的纹理。

另请参阅 基础颜色alphaMode


blendMode : 枚举

此属性确定模型渲染后的颜色如何与背后的颜色混合。

常量描述
PrincipledMaterial.SourceOver默认混合模式。不透明对象遮盖其后的对象。此默认模式本身不保证使用该材质的模型在渲染管线中进行alpha混合,而是使决定取决于众多因素:如果对象的和材质的总不透明度为1.0,材质中没有不透明度图,并且alphaMode 未设置为强制alpha混合的值,那么该模型被视为不透明,即以启用深度测试和深度写入与其它不透明对象一起渲染,禁用混合。否则,该模型被视为半透明,并在不透明对象之后与其他半透明对象一起根据其中心与相机距离的从远到近的顺序渲染,启用alpha混合。
PrincipledMaterial.Screen颜色使用反转的乘法混合,产生较亮的结果。此混合模式是无序的;如果您在使用半透明对象且遇到‘pop’现象,即面或模型排序不同,使用屏幕混合可以产生无‘pop’的成果。
PrincipledMaterial.Multiply颜色使用乘法混合,产生较暗的结果。此混合模式也是无序的。

另请参阅alphaModeQt Quick 3D 架构


clearcoatAmount : float

此属性定义了清漆层的强度。

默认值是 0.0


clearcoatChannel : 枚举

此属性定义了从clearcoatMap中读取清漆层量的纹理通道。默认值是Material.R

常量描述
Material.R从纹理R通道读取值。
Material.G从纹理G通道读取值。
Material.B从纹理B通道读取值。
Material.A从纹理A通道读取值。

clearcoatMap : Texture

此属性定义了用于确定清漆层强度的纹理。clearcoatAmount的值将乘以从此纹理中读取的值。


clearcoatNormalMap : Texture

此属性定义了用于确定应用于清漆层的法线贴图的纹理。


clearcoatRoughnessAmount : float

此属性定义了清漆层的粗糙度。默认值是0.0


clearcoatRoughnessChannel : 枚举

此属性定义了从clearcoatRoughnessMap中读取清漆层粗糙度量的纹理通道。默认值是Material.G

常量描述
Material.R从纹理R通道读取值。
Material.G从纹理G通道读取值。
Material.B从纹理B通道读取值。
Material.A从纹理A通道读取值。

clearcoatRoughnessMap : Texture

此属性定义了用于确定清漆层粗糙度的纹理。clearcoatRoughnessAmount的值将乘以从此纹理中读取的值。


emissiveFactor : vector3d

此属性确定该材料的自发光颜色。如果设置了自发光图,x、y和z分量分别用作纹理的R、G和B通道的因子(乘数)。默认值是 (0, 0, 0),表示完全不贡献自发光。

注意:将照明模式设置为DefaultMaterial.NoLighting意味着自发光因子对场景没有影响。


emissiveMap : Texture

此属性设置一个RGB纹理,用于指定发射光的强度。


heightAmount : real

此属性包含了用于修改heightMap纹理的因数。值应该在0.0到1.0之间。默认值为0.0,这意味着即使设置了高度图,高度位移也将被禁用。


heightChannel : enumeration

此属性定义从heightMap中读取高度值的纹理通道。默认值是Material.R

常量描述
Material.R从纹理R通道读取值。
Material.G从纹理G通道读取值。
Material.B从纹理B通道读取值。
Material.A从纹理A通道读取值。

heightMap : Texture

此属性定义一个纹理,用于确定在通过透视映射渲染时纹理将被位移到的高度。值预期为从0.0到1.0的线性值,其中0.0表示无位移,1.0表示最大位移。


indexOfRefraction : real

此属性定义了材料的折射率。默认值1.5将是塑料或玻璃等材料理想的值,但如水、沥青、蓝宝石或钻石等其他材料则需要调整值以显得更逼真。对于逼真的材料,折射率通常应该在1.03.0之间。

一些常见材料的折射率示例

Material折射率
空气1.0
1.33
玻璃1.55
蓝宝石1.76
钻石2.42

注意:世界上已知的材料中,折射率没有大于3.0的。


lighting : enumeration

此属性定义用于生成此材料时使用的光照方法。

默认值为PrincipledMaterial.FragmentLighting

使用PrincipledMaterial.FragmentLighting时,会为每个渲染像素计算漫反射和镜面光照。某些效果(如菲涅耳或法线贴图)需要使用PrincipledMaterial.FragmentLighting才能正常工作。

使用PrincipledMaterial.NoLighting时,不会进行光照计算。该模式(可预测地)非常快,当使用的图像贴图不需要光照着色时相当有效。除了baseColor值、alpha值和外带颜色以外的所有着色属性都将被忽略。

常量
PrincipledMaterial.NoLighting
PrincipledMaterial.FragmentLighting

lineWidth : real

此属性确定当几何体使用线的原始类型或线线带时,渲染的线的宽度。默认值是1.0。当渲染三角形网格等其他类型的几何体时,此属性不相关。

警告:除1以外的线宽可能在运行时不被支持,这取决于底层的图形API。在这种情况下,更改宽度的请求被忽略。例如,以下都不会支持宽带:Direct3D、Metal、OpenGL core profile contexts。


maxHeightMapSamples : int

此属性定义使用heightMap执行透视遮挡映射时使用的最大样本数。maxHeightMapSamples值是当表面看起来平行时使用的heightMap样本数。默认值为32。

每个片段使用的实际样本数将在 minHeightMapSamples 和 maxHeightMapSamples 之间,具体取决于相机与渲染表面之间的角度。

注意:只有在出现不希望出现的伪影时,才应对此值进行调整以微调使用 heightMap 的材料。


金属度 : real

金属度属性定义了材料的 金属度。该值是归一化的,其中 0.0 表示材料是 介电体(非金属)材料,1.0 表示材料是金属。

注意:原则上,材料要么是金属度为 0 的介电体,要么是金属度为 1 的金属。允许金属度值在 0 和 1 之间,这将给出不同模型之间的混合材料。

范围为 [0.0, 1.0]。默认值为 0。


金属度通道 : enumeration

此属性定义了从 metalnessMap 读取金属度值的纹理通道。默认值是 Material.B

常量描述
Material.R从纹理R通道读取值。
Material.G从纹理G通道读取值。
Material.B从纹理B通道读取值。
Material.A从纹理A通道读取值。

金属度贴图 : Texture

此属性设置了一个 Texture,用于设置材料不同部分的金属度量。


minHeightMapSamples : int

此属性定义了进行并行遮挡贴图映射时使用 heightMap 的最小样本数。minHeightMapSamples 值是当直接观察表面时(当相机视图垂直于片段时)使用的 heightMap 中的样本数。默认值是 8。

每个片段使用的实际样本数将在 minHeightMapSamples 和 maxHeightMapSamples 之间,具体取决于相机与渲染表面之间的角度。

注意:只有在出现不希望出现的伪影时,才应对此值进行调整以微调使用 heightMap 的材料。


法线图 : Texture

此属性定义了一个用于模拟材料表面细小几何位移的 RGB 图像。RGB 通道表示 XYZ 法线偏移。

注意:法线图不会影响模型的轮廓。


法线强度 : real

此属性控制 normalMap 的模拟位移量。


遮挡量 : real

此属性包含用于修改 occlusionMap 纹织值的因素。值应在 0.0 到 1.0 之间。默认是 1.0


遮挡通道 : enumeration

此属性定义了从 occlusionMap 读取遮挡值的纹理通道。默认值是 Material.R

常量描述
Material.R从纹理R通道读取值。
Material.G从纹理G通道读取值。
Material.B从纹理B通道读取值。
Material.A从纹理A通道读取值。

遮挡贴图 : Texture

此属性定义了一个纹理,用于确定材料不同区域应接收多少光照。值应从 0.0 线性到 1.0,其中 0.0 表示无光照,1.0 表示光照效果不变。

另请参阅 occlusionAmount.


不透明度 : 实数

此属性降低材质的不透明度,与模型分离。


不透明度通道 : 枚举

此属性定义从 opacityMap 中读取不透明值的纹理通道。默认值为 Material.A

常量描述
Material.R从纹理R通道读取值。
Material.G从纹理G通道读取值。
Material.B从纹理B通道读取值。
Material.A从纹理A通道读取值。

不透明度贴图 : 纹理

此属性定义用于控制在材质不同部分的透明度差异的纹理。


点大小 : 实数

当几何形状使用点类型的基本类型时,此属性确定渲染点的大小。默认值为 1.0。当渲染其他类型的几何形状(如三角形网格)时,此属性不相关。

警告:除了 1 以外的点大小在运行时可能不受支持,这取决于底层图形 API。例如,设置非 1 的大小在 Direct 3D 中没有任何效果。


粗糙度 : 实数

此属性控制从光源产生的镜面高光的大小和整体反射的清晰度。较大的值增加粗糙度,软化镜面高光并模糊反射。范围是 [0.0, 1.0]。默认值为 0。


粗糙度通道 : 枚举

此属性定义从 roughnessMap 中读取粗糙度值的纹理通道。默认值为 Material.G

常量描述
Material.R从纹理R通道读取值。
Material.G从纹理G通道读取值。
Material.B从纹理B通道读取值。
Material.A从纹理A通道读取值。

粗糙度贴图 : 纹理

此属性定义用于控制材质镜面粗糙度的纹理。


镜面强度 : 实数

此属性控制镜面强度的强度(高光和反射)。

范围是 [0.0, 1.0]。默认值为 1.0

注意:对于非电介质(金属),此属性没有作用。

注意:此属性不影响 specularReflectionMap,但影响来自场景 SceneEnvironment::lightProbe 的反射量。


镜面贴图 : 纹理

该属性定义一个 RGB 纹理,用于在材质表面调节镜面强度和颜色。这些值乘以 specularAmount

注意:除非材质为电介质,否则将忽略镜面贴图。


镜面反射贴图 : 纹理

此属性设置用于材质上镜面高光的纹理。

通常用于进行环境映射:当模型旋转时,贴图将表现为像是在环境中反射。为了按预期工作,需要将纹理的 mappingMode 设置为 Texture.Environment。镜面反射贴图是添加高质量视觉效果且成本相对较低的一种简单方法。

注意:光探针场景环境关联,从而依赖基于图像的光照,可以实现类似的环境反射效果。然而,光探针是一个概念上不同的,且在性能方面可能更昂贵的解决方案。每种方法都有自己的特定用途,具体使用哪种需要根据情况而定。对于属性中设置的纹理集,specularReflectionMap有自己的优势,因为它没有限制,并支持所有类型的纹理,包括那些通过sourceItem从Qt Quick子场景获取数据的纹理。

注意:清晰的图像会导致你的材质看起来非常光滑;你越模糊图像,你的材质就会看起来越柔和。

另请参阅Texture::mappingMode


specularTint : real

此属性定义了基本颜色对镜面反射的贡献程度。

注意:此属性仅适用于电介质材料。


thicknessChannel : enumeration

此属性定义用于从transmissionMap中读取厚度值的纹理通道。默认值为Material.G

常量描述
Material.R从纹理R通道读取值。
Material.G从纹理G通道读取值。
Material.B从纹理B通道读取值。
Material.A从纹理A通道读取值。

thicknessFactor : float

此属性定义了表面下体积的厚度。与PrincipledMaterial的许多其他属性不同,厚度Factor中的值定义了从模型坐标系中0.0到+infinity的厚度。0.0的值表示该材料是薄壁的。默认值是 0.0


thicknessMap : Texture

此属性定义一个用于定义材料体积厚度的纹理。厚度Factor的值将乘以从此纹理中读取的值。


transmissionChannel : enumeration

此属性定义用于从transmissionMap中读取透射百分比的纹理通道。默认值是Material.R

常量描述
Material.R从纹理R通道读取值。
Material.G从纹理G通道读取值。
Material.B从纹理B通道读取值。
Material.A从纹理A通道读取值。

transmissionFactor : float

此属性定义通过材料表面的光照透射百分比。默认值是0.0


transmissionMap : Texture

此属性定义一个用于确定通过表面的光线透射百分比的纹理。透射Factor的值将乘以从此纹理中读取的值。


vertexColorsEnabled : bool [since 6.5]

当此属性启用时,材料将使用网格的顶点颜色。这些颜色将与为材料指定的任何其他颜色相乘。默认值为true。

此属性自Qt 6.5引入。


© 2024 Qt公司。此处包含的文档贡献是各自所有者的版权。此文档受GNU自由文档许可证版本1.3的条款约束,由自由基金会发布。Qt及其相关标志是芬兰及其它在世界各地的Qt公司注册商标。所有其他标志是各自所有者的财产。