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
}
}