Qt Quick 3D - Level of Detail Helper Example
// Copyright (C) 2022 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause import QtQuick import QtQuick3D import QtQuick3D.Helpers Window { id: window width: 1280 height: 720 visible: true View3D { id: view anchors.fill: parent environment: SceneEnvironment { clearColor: "black" backgroundMode: SceneEnvironment.Color antialiasingMode: SceneEnvironment.MSAA antialiasingQuality: SceneEnvironment.High } PerspectiveCamera { id: camera position: Qt.vector3d(0, 10, 300) clipNear: 1.0 NumberAnimation on z { from: 200 to: -100 duration: 40 * 1000 } } DirectionalLight { eulerRotation.x: -30 eulerRotation.y: -70 ambientColor: Qt.rgba(0.5, 0.5, 0.5, 1.0) } RandomInstancing { id: randomInstancing instanceCount: 800 position: InstanceRange { from: Qt.vector3d(-200, 0, -200) to: Qt.vector3d(200, 1, 200) } scale: InstanceRange { from: Qt.vector3d(10, 10, 10) to: Qt.vector3d(10, 10, 10) } rotation: InstanceRange { from: Qt.vector3d(0, 0, 0) to: Qt.vector3d(0, 0, 0) } color: InstanceRange { from: "grey" to: "white" proportional: true } randomSeed: 2021 } PrincipledMaterial { id: marbleMaterial baseColorMap: Texture { source: "maps/baseColor.png" generateMipmaps: true mipFilter: Texture.Linear } opacityChannel: Material.A metalnessMap: Texture { source: "maps/occlusionRoughnessMetallic.png" generateMipmaps: true mipFilter: Texture.Linear } metalnessChannel: Material.B roughnessMap: Texture { source: "maps/occlusionRoughnessMetallic.png" generateMipmaps: true mipFilter: Texture.Linear } roughnessChannel: Material.G metalness: 1 roughness: 1 normalMap: Texture { source: "maps/normal.png" generateMipmaps: true mipFilter: Texture.Linear } } LodManager { camera: camera distances: [100, 140, 180] fadeDistance: 10 Model { scale: Qt.vector3d(100, 100, 100); source: "meshes/marble_bust_01_LOD_0.mesh" materials: marbleMaterial } Model { scale: Qt.vector3d(100, 100, 100); source: "meshes/marble_bust_01_LOD_1.mesh" materials: marbleMaterial } Model { scale: Qt.vector3d(100, 100, 100); source: "meshes/marble_bust_01_LOD_2.mesh" materials: marbleMaterial } Model { scale: Qt.vector3d(100, 100, 100); source: "meshes/marble_bust_01_LOD_3.mesh" materials: marbleMaterial } } LodManager { camera: camera distances: [50, 100, 150] Model { instancing: randomInstancing source: "#Sphere" materials: [ PrincipledMaterial { metalness: 0 roughness: 1 baseColor: "red" } ] scale: Qt.vector3d(0.005, 0.005, 0.005) } Model { instancing: randomInstancing source: "#Cylinder" materials: [ PrincipledMaterial { metalness: 0 roughness: 1 baseColor: "orange" } ] scale: Qt.vector3d(0.005, 0.005, 0.005) } Model { instancing: randomInstancing source: "#Cube" materials: [ PrincipledMaterial { metalness: 0 roughness: 1 baseColor: "yellow" } ] scale: Qt.vector3d(0.005, 0.005, 0.005) } Model { instancing: randomInstancing source: "#Rectangle" materials: [ PrincipledMaterial { metalness: 0 roughness: 1 baseColor: "green" } ] scale: Qt.vector3d(0.005, 0.005, 0.005) } } } DebugView { source: view } }