PrincipledMaterial QML类型
允许使用金属/粗糙度工作流程为3D项目定义材质。更多信息... 更多信息
导入声明 | import QtQuick3D |
继承 |
属性
- alphaCutoff : real
- alphaMode : 枚举
- attenuationColor : 颜色
- attenuationDistance : float
- baseColor : 颜色
- baseColorMap : 纹理
- blendMode : 枚举
- clearcoatAmount : float
- clearcoatChannel : 枚举
- clearcoatMap : 纹理
- clearcoatNormalMap : 纹理
- clearcoatRoughnessAmount : float
- clearcoatRoughnessChannel : 枚举
- clearcoatRoughnessMap : 纹理
- emissiveFactor : vector3d
- emissiveMap : 纹理
- heightAmount : real
- heightChannel : 枚举
- heightMap : 纹理
- indexOfRefraction : real
- lighting : 枚举
- lineWidth : real
- maxHeightMapSamples : int
- metalness : real
- metalnessChannel : 枚举
- metalnessMap : 纹理
- minHeightMapSamples : int
- normalMap : 纹理
- normalStrength : real
- occlusionAmount : real
- occlusionChannel : 枚举
- occlusionMap : 纹理
- 不透明度 : 实数
- 不透明度通道 : 枚举类型
- 不透明度贴图 : 纹理
- 点大小 : 实数
- 粗糙度 : 实数
- 粗糙度通道 : 枚举类型
- 粗糙度贴图 : 纹理
- 镜面反射量 : 实数
- 镜面反射贴图 : 纹理
- 镜面反射映射 : 纹理
- 镜面颜色调节 : 实数
- 厚度通道 : 枚举类型
- 厚度因子 : 浮点数
- 厚度贴图 : 纹理
- 传导通道 : 枚举类型
- 传导因子 : 浮点数
- 传导贴图 : 纹理
- 启用顶点颜色 : 布尔值
(自 6.5 版起)
详细描述
在模型可以渲染到场景之前,它必须至少附加一个描述网格着色方式的材质。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。没有考虑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 : 颜色 |
blendMode : 枚举 |
此属性确定模型渲染后的颜色如何与背后的颜色混合。
常量 | 描述 |
---|---|
PrincipledMaterial.SourceOver | 默认混合模式。不透明对象遮盖其后的对象。此默认模式本身不保证使用该材质的模型在渲染管线中进行alpha混合,而是使决定取决于众多因素:如果对象的和材质的总不透明度为1.0 ,材质中没有不透明度图,并且alphaMode 未设置为强制alpha混合的值,那么该模型被视为不透明,即以启用深度测试和深度写入与其它不透明对象一起渲染,禁用混合。否则,该模型被视为半透明,并在不透明对象之后与其他半透明对象一起根据其中心与相机距离的从远到近的顺序渲染,启用alpha混合。 |
PrincipledMaterial.Screen | 颜色使用反转的乘法混合,产生较亮的结果。此混合模式是无序的;如果您在使用半透明对象且遇到‘pop’现象,即面或模型排序不同,使用屏幕混合可以产生无‘pop’的成果。 |
PrincipledMaterial.Multiply | 颜色使用乘法混合,产生较暗的结果。此混合模式也是无序的。 |
另请参阅alphaMode 和 Qt 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纹理,用于指定发射光的强度。
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.0
和3.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 |
此属性包含用于修改 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 |
当此属性启用时,材料将使用网格的顶点颜色。这些颜色将与为材料指定的任何其他颜色相乘。默认值为true。
此属性自Qt 6.5引入。
© 2024 Qt公司。此处包含的文档贡献是各自所有者的版权。此文档受