Qt Quick 3D - 原则性材质示例

展示了如何使用原则性材质。

此示例作为 PrincipledMaterial 的交互式文档。每个 PrincipledMaterial 的属性都提供了一些解释,说明它是如何使用的,以及如何调整每个属性进行实验。

用途

此示例分为两个视图,左侧是交互式文档和控件,右侧是 3D 观察器。3D 观察器是交互式的,可以绕着目标模型进行环行。要重置对特定模型的焦点,只需触摸或点击模型即可。通过在两个视图之间拖动栏来调整两个视图之间的分割。

示例分为多个部分,将 PrincipledMaterial 的各种功能分组成可管理的块。可以通过单击解释区域顶部的选项卡访问每个部分。

SpecularGlossyMaterial

除了演示 PrincipledMaterial 提供的金属质感/粗糙度 PBR 流程之外,还可以切换到使用 Specular/Glossy 工作流程,该工作流程使用 SpecularGlossyMaterial。这可以在基础部分进行切换。

资源加载器

此示例的更复杂性质也提供了演示 ResourceLoader 组件使用的机会。当模型在场景中不可见时,与模型关联的任何资源都将由 Qt Quick 3D 释放(假设场景中的其他模型没有使用这些资源。)在这个例子中,可以隐藏窗帘模型,这样一来,2 个网格和 2 个纹理就会被从 GPU 内存中释放。但是,下次要使窗帘可见时,这些资源就需要重新上传到 GPU。在某些硬件上,此上传可能导致帧率短暂下降,因此为了减轻这种情况,BackgroundCurtain 组件中使用了一个 ResourceLoader 组件。

ResourceLoader {
    meshSources: [
        frame.source,
        curtain.source
    ]
    textures: [
        tilePatternTexture,
        curtainNormalTexture
    ]
}

Model {
    id: frame
    z: -1.95
    source: "meshes/frame.mesh"

    PrincipledMaterial {
        id: frame_material
        baseColor: "#ffcccccc"
        metalness: 1
        roughness: 0.259091
        alphaMode: PrincipledMaterial.Opaque
    }
    materials: [
        frame_material
    ]
}
Model {
    id: curtain
    y: 3.02413
    z: 2.04922
    source: "meshes/curtain.mesh"

    PrincipledMaterial {
        id: curtain_material
        baseColorMap: Texture {
            id: tilePatternTexture
            source: "maps/tilepattern.png"
            generateMipmaps: true
            mipFilter: Texture.Linear
        }
        opacityChannel: Material.A
        roughness: 0.5
        normalMap: Texture {
            id: curtainNormalTexture
            source: "maps/curtain_normal.jpg"
            generateMipmaps: true
            mipFilter: Texture.Linear
        }
        cullMode: Material.NoCulling
        alphaMode: PrincipledMaterial.Opaque
    }
    materials: [
        curtain_material
    ]
}

在这里,网格文件和纹理都注册到 ResourceLoaderResourceLoader 会确保所有已注册的资源都将始终准备就绪以供在 GPU 内存中使用,因此现在无论 BackgroundCurtain 的可见性如何,其资源都将得到保留。

还可以使用 ResourceLoader 预加载资源,如 "特殊" 选项卡下的 线 网格所示。

ResourceLoader {
    meshSources: [
        "meshes/logo_lines.mesh",
        "meshes/logo_points.mesh"
    ]
}

这里直接列出了网格文件的 QUrl。资源不必与模型关联即可由 ResourceLoader 使用。

文件

图片

© 2024 Qt公司有限公司。本文件中包含的文档贡献归其各自所有者所有。本文件所提供的文档是根据由自由软件基金会发布的 GNU自由文档许可协议第1.3版 的条款许可的。Qt及其相关标志是芬兰的Qt公司及其在全球其他国家和地区的商标。所有其他商标均为其各自所有者的财产。