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 ] }
在这里,网格文件和纹理都注册到 ResourceLoader 。ResourceLoader 会确保所有已注册的资源都将始终准备就绪以供在 GPU 内存中使用,因此现在无论 BackgroundCurtain 的可见性如何,其资源都将得到保留。
还可以使用 ResourceLoader 预加载资源,如 "特殊" 选项卡下的 点 和 线 网格所示。
ResourceLoader { meshSources: [ "meshes/logo_lines.mesh", "meshes/logo_points.mesh" ] }
这里直接列出了网格文件的 QUrl。资源不必与模型关联即可由 ResourceLoader 使用。
文件
- principledmaterial/AlphaPane.qml
- principledmaterial/BackgroundCurtain.qml
- principledmaterial/BasicsPane.qml
- principledmaterial/CMakeLists.txt
- principledmaterial/ClearcoatPane.qml
- principledmaterial/DemoPane.qml
- principledmaterial/DetailsPane.qml
- principledmaterial/MarkdownLabel.qml
- principledmaterial/RefractionPane.qml
- principledmaterial/SpecialPane.qml
- principledmaterial/TextureSourceControl.qml
- principledmaterial/VerticalSectionSeparator.qml
- principledmaterial/assets.qrc
- principledmaterial/imagehelper.cpp
- principledmaterial/imagehelper.h
- principledmaterial/main.cpp
- principledmaterial/main.qml
- principledmaterial/principledmaterial.pro
- principledmaterial/qml.qrc
图片
- principledmaterial/maps/alpha_gradient.png
- principledmaterial/maps/curtain_normal.jpg
- principledmaterial/maps/grid.png
- principledmaterial/maps/metallic/basecolor.jpg
- principledmaterial/maps/metallic/metallic.jpg
- principledmaterial/maps/metallic/normal.jpg
- principledmaterial/maps/metallic/roughness.jpg
- principledmaterial/maps/monkey_ao.jpg
- principledmaterial/maps/monkey_thickness.jpg
- principledmaterial/maps/noise.png
- principledmaterial/maps/normal_stamp.png
- principledmaterial/maps/small_envmap.jpg
- principledmaterial/maps/tilepattern.png
© 2024 Qt公司有限公司。本文件中包含的文档贡献归其各自所有者所有。本文件所提供的文档是根据由自由软件基金会发布的 GNU自由文档许可协议第1.3版 的条款许可的。Qt及其相关标志是芬兰的Qt公司及其在全球其他国家和地区的商标。所有其他商标均为其各自所有者的财产。