自定义效果和材质

Qt Quick 3D Effects 和 Qt Quick 3D Materials 模块包含了一套您可以应用于 3D 模型的现成效果和材质。如果现成效果和材质不符合您的需求,您可以创建自定义效果和材质。每个效果或材质都必须有一个片段着色器,用于实现所有计算着色颜色的功能。材质系统还提供现成的函数来帮助您实现材质。如果 3D 效果和材质没有在“组件”中显示,您应该将“QtQuick3D.Effects”和“QtQuick3D.Materials”模块添加到项目中,具体说明请见添加和删除模块

材质系统支持介质、金属和透明材质,点光源、区域光源、环境遮蔽、阴影、双面多边形、折射率以及片段截止(屏蔽)。有关更多信息,请参阅Qt Quick 3D 自定义材质参考

使用“组件” > “QtQuick3D” > “Qt Quick 3D 自定义着色器工具”中的组件来创建自定义效果和材质。您可以在“组件” > “QtQuick3D Effects” > “Qt Quick 3D 自定义着色器工具”中找到“Effect”组件,在“组件” > “QtQuick3D Materials” > “Qt Quick 3D 自定义着色器工具”中找到“Custom Material”组件。有关着色器工具和命令及其属性的更多信息,请参阅自定义着色器

注意:您必须使用其他工具创建实际的着色器源文件并将它们复制到项目文件夹中。然后您可以在自定义效果或材质属性中指定源文件名。要在着色器文件中使用自定义统一变量,您必须在自定义效果或材质组件中将它们指定为 QML 属性。Qt Design Studio 将根据属性值自动生成着色器的统一变量。

创建自定义效果

默认情况下,自定义效果组件在片段阶段包含一个通行组件和着色器组件。您可以将通行、着色器和其他着色器实用工具添加到效果中。

"Custom effect in Navigator"

片段着色器组件创建时包含一个着色器文件路径的占位符。请在着色器属性中指定要使用的着色器文件路径。

要创建自定义效果

  1. 从组件的“Qt Quick 3D 自定义着色器工具”选项卡拖放一个“Effect”组件到导航器中的模型组件。
  2. 在编码器中选择自定义效果组件,以编辑“属性”视图中的属性值。

    "Custom effect properties"

  3. 在“通行”字段中,选择效果的通行组件。
  4. 在编码器中选择通行组件,以指定“属性”中其属性的值。

    "Pass properties"

  5. 要执行通行期间的命令,将从组件拖放到自定义材料中的以下命令组件:混合缓冲区块拷贝缓冲区输入剔除模式渲染状态设置统一值。然后选择“命令”字段中的命令。
  6. 要为通行分配缓冲区,将“缓冲区”组件拖放到自定义材料中。然后在“缓冲区”字段中选择缓冲区。
  7. 在编码器中选择着色器组件,以在属性中的“”字段设置着色器文件路径。

    "Shader properties"

创建自定义材料

默认情况下,自定义材料组件包含两个着色器组件、一个着色器信息组件和一个通行组件。您可以为材料添加着色器、通行和其他着色器实用工具。

"Custom material in Navigator"

默认情况下,片段和顶点着色器会创建一个着色器文件路径的占位符。请在着色器属性中指定要使用的着色器文件路径。

着色器信息组件指定着色器组件和版本,以及基于选定的着色器键值使用的选项,例如漫反射或反射照明、折射、透明度、位移、透射性、光泽和alpha裁剪。

着色器与通行组件一起使用,以创建结果材料。通行可以包含多个渲染通行和其他命令。您可以使用缓冲区组件分配用于存储中间渲染结果的缓冲区。

要创建自定义材料

  1. 将组件的“Qt Quick 3D 自定义着色器工具”选项卡中的“Custom Material”组件拖放到导航器中的模型组件。
  2. 在编码器中选择自定义材料组件,以编辑属性视图中的属性值。

    "Custom material properties"

  3. 选择“透明度”复选框以使材料透明。
  4. 选择“折射”复选框以指定材料是反射的。
  5. 选择“始终脏”复选框以确定每次使用材料时都需要刷新它。
  6. 在“Shader Info”字段中,选择要使用的着色器信息组件。
  7. 在“通行”字段中,选择效果的通行组件。
  8. 在“Material”组中,选择要使用的光照探针位移贴图和数量以及剔除模式
  9. 在编码器中选择着色器信息组件,以指定属性中其属性的值。

    "Shader Info properties"

  10. 在编码器中选择通行组件,以指定“属性”中其属性的值。

    "Pass properties"

  11. 在过过程中执行命令时,将以下命令组件从组件拖放到导航器中的过组件:混合缓冲区绘制缓冲区输入剔除模式深度输入渲染状态设置统一变量。命令组件将在与过组件相同级别的位置创建,并自动添加到命令字段。
  12. 要为通行分配缓冲区,将“缓冲区”组件拖放到自定义材料中。然后在“缓冲区”字段中选择缓冲区。
  13. 要将着色器添加到过中,将着色器组件从组件拖放到导航器中的过组件。着色器组件将在与过组件相同级别的位置创建,并自动添加到着色器字段。
  14. 导航器中选择着色器组件,以在属性中的字段设置着色器文件的路径。

    "Shader properties"

创建着色器文件

您可以在自定义效果和材料中使用的着色器的要求已在Qt Quick 3D自定义材料参考中描述。

如果您在着色器文件中使用自定义统一变量,则必须将它们指定为自定义效果或材料组件的QML属性。Qt Design Studio将根据属性值自动生成统一变量。

例如,下面的代码片段显示了使用两个统一变量(uTextureInUseuInputTexture)的片段着色器代码。

out vec4 fragColor;

in vec3 pos;
in vec3 texCoord0;

void main() {

    vec4 textCol;
    if (uTextureInUse)
        textCol = texture( uInputTexture, texCoord0.xy );

    fragColor = vec4(pos.x * 0.02 * textCol.x, pos.y * 0.02 * textCol.y, pos.z * 0.02, 1.0);
}

要在自定义效果或材料组件中使用上面的片段着色器,您必须从着色器代码中删除统一变量,并在属性标签页上的连接视图中定义它们作为组件的属性。

"Uniforms as properties in Connections view Properties tab"

有关添加属性的更多信息,请参阅指定自定义属性

在特定的Qt许可证下提供。
了解更多信息。