1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include "qquick3dbakedlightmap_p.h"
5
6QT_BEGIN_NAMESPACE
7
8/*!
9 \qmltype BakedLightmap
10 \inherits Object
11 \inqmlmodule QtQuick3D
12 \brief Specifies baked lightmap settings for a model.
13 \since 6.4
14
15 A BakedLightmap object can be used to enable:
16
17 \list
18 \li persistently storing the baked lightmap data - during baking, or
19 \li loading the previously generated and stored lightmaps - at run time.
20 \endlist
21
22 A Model with \l{Model::usedInBakedLighting}{usedInBakedLighting} set to
23 true is considered to be part of the raytraced scene when baking lightmaps,
24 meaning the model's geometry and material contribute to direct and indirect
25 lighting. This on its own does not however enable generating, including
26 full calculation of bounced indirect lighting, and finally saving a
27 lightmap for the model. To do that, the model also needs to be associated
28 with an \l enabled BakedLightmap object with a unique key set.
29
30 When running in normal mode, the same BakedLightmap object indicates that
31 the Model has lightmap data, and that the engine should attempt to load
32 this data (based on the unique key) and use it when rendering.
33
34 For more information on how to bake lightmaps, see the \l Lightmapper
35 documentation.
36
37 \note As of Qt 6.4, lightmap baking is in an early technical preview state.
38 Changes to features, quality, and API are likely happen in future releases.
39
40 \sa Lightmapper, Model::usedInBakedLighting
41 */
42
43/*!
44 \qmlproperty bool BakedLightmap::enabled
45
46 When false, the lightmap generated for the model is not stored during
47 lightmap baking, even though \l key is set to a non-empty value.
48
49 The default value is true.
50 */
51
52/*!
53 \qmlproperty string BakedLightmap::key
54
55 When non-empty and \l enabled is true, the lightmap generated for the model
56 is stored persistently during lightmap baking. The value should be a unique
57 string that is fit to be included in the name of a file in the filesystem.
58 No other Model in the scene must use the same key.
59
60 The default value is empty.
61
62 \sa loadPrefix
63 */
64
65/*!
66 \qmlproperty string BakedLightmap::loadPrefix
67
68 When non-empty, the value is prepended as a path to the value of \l key
69 when loading the lightmap for the Model. This allows shipping the generated
70 lightmaps in different location than they were written to, for example as
71 embedded resources via the Qt resource system.
72
73 For example, the following enables lightmap generation for a static model,
74 using a unique key for identifying the lightmap data between baking and
75 real runs of the application. Once baking is performed, the generated file
76 can be listed in the application's CMake project as a resource under the
77 \c{/lightmaps} PREFIX, letting the build process pick up the file and
78 include it in the executable.
79
80 \qml
81 Model {
82 source: "model.mesh"
83 y: 10
84 bakedLightmap: BakedLightmap {
85 key: "model34156"
86 loadPrefix: "qrc:/lightmaps"
87 // will attempt to load from :/lightmaps/qlm_model34156.exr at run time
88 }
89 }
90 \endqml
91
92 The default value is empty.
93
94 \sa key
95 */
96
97bool QQuick3DBakedLightmap::isEnabled() const
98{
99 return m_enabled;
100}
101
102void QQuick3DBakedLightmap::setEnabled(bool enabled)
103{
104 if (m_enabled == enabled)
105 return;
106
107 m_enabled = enabled;
108 emit enabledChanged();
109 emit changed();
110}
111
112QString QQuick3DBakedLightmap::key() const
113{
114 return m_key;
115}
116
117void QQuick3DBakedLightmap::setKey(const QString &key)
118{
119 if (m_key == key)
120 return;
121
122 m_key = key;
123 emit keyChanged();
124 emit changed();
125}
126
127QString QQuick3DBakedLightmap::loadPrefix() const
128{
129 return m_loadPrefix;
130}
131
132void QQuick3DBakedLightmap::setLoadPrefix(const QString &loadPrefix)
133{
134 if (m_loadPrefix == loadPrefix)
135 return;
136
137 m_loadPrefix = loadPrefix;
138 emit loadPrefixChanged();
139 emit changed();
140}
141
142QT_END_NAMESPACE
143

source code of qtquick3d/src/quick3d/qquick3dbakedlightmap.cpp