Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquick3dprincipledmaterial_p.h
Go to the documentation of this file.
1// Copyright (C) 2019 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5
6#ifndef QSSGPRINCIPLEDMATERIAL_H
7#define QSSGPRINCIPLEDMATERIAL_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include <QtQuick3D/private/qquick3dmaterial_p.h>
21#include <QtQuick3D/private/qquick3dtexture_p.h>
22
23#include <QColor>
24#include <QHash>
25
27
28class Q_QUICK3D_EXPORT QQuick3DPrincipledMaterial : public QQuick3DMaterial
29{
30 Q_OBJECT
31 Q_PROPERTY(Lighting lighting READ lighting WRITE setLighting NOTIFY lightingChanged)
32 Q_PROPERTY(BlendMode blendMode READ blendMode WRITE setBlendMode NOTIFY blendModeChanged)
33
34 Q_PROPERTY(QColor baseColor READ baseColor WRITE setBaseColor NOTIFY baseColorChanged)
35 Q_PROPERTY(QQuick3DTexture *baseColorMap READ baseColorMap WRITE setBaseColorMap NOTIFY baseColorMapChanged)
36 Q_PROPERTY(bool baseColorSingleChannelEnabled READ baseColorSingleChannelEnabled WRITE setBaseColorSingleChannelEnabled NOTIFY baseColorSingleChannelEnabledChanged REVISION(6, 8))
37 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping baseColorChannel READ baseColorChannel WRITE setBaseColorChannel NOTIFY baseColorChannelChanged REVISION(6, 8))
38
39 Q_PROPERTY(float metalness READ metalness WRITE setMetalness NOTIFY metalnessChanged)
40 Q_PROPERTY(QQuick3DTexture *metalnessMap READ metalnessMap WRITE setMetalnessMap NOTIFY metalnessMapChanged)
41 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping metalnessChannel READ metalnessChannel WRITE setMetalnessChannel NOTIFY metalnessChannelChanged)
42
43 Q_PROPERTY(float specularAmount READ specularAmount WRITE setSpecularAmount NOTIFY specularAmountChanged)
44 Q_PROPERTY(QQuick3DTexture *specularMap READ specularMap WRITE setSpecularMap NOTIFY specularMapChanged)
45 Q_PROPERTY(float specularTint READ specularTint WRITE setSpecularTint NOTIFY specularTintChanged)
46 Q_PROPERTY(bool specularSingleChannelEnabled READ specularSingleChannelEnabled WRITE setSpecularSingleChannelEnabled NOTIFY specularSingleChannelEnabledChanged REVISION(6, 8))
47 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping specularChannel READ specularChannel WRITE setSpecularChannel NOTIFY specularChannelChanged REVISION(6, 8))
48
49 Q_PROPERTY(float roughness READ roughness WRITE setRoughness NOTIFY roughnessChanged)
50 Q_PROPERTY(QQuick3DTexture *roughnessMap READ roughnessMap WRITE setRoughnessMap NOTIFY roughnessMapChanged)
51 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping roughnessChannel READ roughnessChannel WRITE setRoughnessChannel NOTIFY roughnessChannelChanged)
52
53 Q_PROPERTY(QVector3D emissiveFactor READ emissiveFactor WRITE setEmissiveFactor NOTIFY emissiveFactorChanged)
54 Q_PROPERTY(QQuick3DTexture *emissiveMap READ emissiveMap WRITE setEmissiveMap NOTIFY emissiveMapChanged)
55 Q_PROPERTY(bool emissiveSingleChannelEnabled READ emissiveSingleChannelEnabled WRITE setEmissiveSingleChannelEnabled NOTIFY emissiveSingleChannelEnabledChanged REVISION(6, 8))
56 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping emissiveChannel READ emissiveChannel WRITE setEmissiveChannel NOTIFY emissiveChannelChanged REVISION(6, 8))
57
58 Q_PROPERTY(bool invertOpacityMapValue READ invertOpacityMapValue WRITE setInvertOpacityMapValue NOTIFY invertOpacityMapValueChanged REVISION(6, 8))
59 Q_PROPERTY(float opacity READ opacity WRITE setOpacity NOTIFY opacityChanged)
60 Q_PROPERTY(QQuick3DTexture *opacityMap READ opacityMap WRITE setOpacityMap NOTIFY opacityMapChanged)
61 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping opacityChannel READ opacityChannel WRITE setOpacityChannel NOTIFY opacityChannelChanged)
62
63 Q_PROPERTY(QQuick3DTexture *normalMap READ normalMap WRITE setNormalMap NOTIFY normalMapChanged)
64 Q_PROPERTY(float normalStrength READ normalStrength WRITE setNormalStrength NOTIFY normalStrengthChanged)
65
66 Q_PROPERTY(QQuick3DTexture *specularReflectionMap READ specularReflectionMap WRITE setSpecularReflectionMap NOTIFY specularReflectionMapChanged)
67
68 Q_PROPERTY(QQuick3DTexture *occlusionMap READ occlusionMap WRITE setOcclusionMap NOTIFY occlusionMapChanged)
69 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping occlusionChannel READ occlusionChannel WRITE setOcclusionChannel NOTIFY occlusionChannelChanged)
70 Q_PROPERTY(float occlusionAmount READ occlusionAmount WRITE setOcclusionAmount NOTIFY occlusionAmountChanged)
71
72 Q_PROPERTY(AlphaMode alphaMode READ alphaMode WRITE setAlphaMode NOTIFY alphaModeChanged)
73 Q_PROPERTY(float alphaCutoff READ alphaCutoff WRITE setAlphaCutoff NOTIFY alphaCutoffChanged)
74
75 Q_PROPERTY(float pointSize READ pointSize WRITE setPointSize NOTIFY pointSizeChanged)
76 Q_PROPERTY(float lineWidth READ lineWidth WRITE setLineWidth NOTIFY lineWidthChanged)
77
78 Q_PROPERTY(QQuick3DTexture *heightMap READ heightMap WRITE setHeightMap NOTIFY heightMapChanged REVISION(6, 2))
79 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping heightChannel READ heightChannel WRITE setHeightChannel NOTIFY heightChannelChanged REVISION(6, 2))
80 Q_PROPERTY(float heightAmount READ heightAmount WRITE setHeightAmount NOTIFY heightAmountChanged REVISION(6, 2))
81 Q_PROPERTY(int minHeightMapSamples READ minHeightMapSamples WRITE setMinHeightMapSamples NOTIFY minHeightMapSamplesChanged REVISION(6, 2))
82 Q_PROPERTY(int maxHeightMapSamples READ maxHeightMapSamples WRITE setMaxHeightMapSamples NOTIFY maxHeightMapSamplesChanged REVISION(6, 2))
83
84 Q_PROPERTY(float clearcoatAmount READ clearcoatAmount WRITE setClearcoatAmount NOTIFY clearcoatAmountChanged REVISION(6, 3))
85 Q_PROPERTY(QQuick3DTexture *clearcoatMap READ clearcoatMap WRITE setClearcoatMap NOTIFY clearcoatMapChanged REVISION(6, 3))
86 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping clearcoatChannel READ clearcoatChannel WRITE setClearcoatChannel NOTIFY
87 clearcoatChannelChanged REVISION(6, 3))
88 Q_PROPERTY(float clearcoatRoughnessAmount READ clearcoatRoughnessAmount WRITE setClearcoatRoughnessAmount NOTIFY
89 clearcoatRoughnessAmountChanged REVISION(6, 3))
90 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping clearcoatRoughnessChannel READ clearcoatRoughnessChannel WRITE
91 setClearcoatRoughnessChannel NOTIFY clearcoatRoughnessChannelChanged REVISION(6, 3))
92 Q_PROPERTY(QQuick3DTexture *clearcoatRoughnessMap READ clearcoatRoughnessMap WRITE setClearcoatRoughnessMap NOTIFY
93 clearcoatRoughnessMapChanged REVISION(6, 3))
94 Q_PROPERTY(QQuick3DTexture *clearcoatNormalMap READ clearcoatNormalMap WRITE setClearcoatNormalMap NOTIFY
95 clearcoatNormalMapChanged REVISION(6, 3))
96 Q_PROPERTY(float clearcoatNormalStrength READ clearcoatNormalStrength WRITE setClearcoatNormalStrength NOTIFY clearcoatNormalStrengthChanged REVISION(6, 8))
98 Q_PROPERTY(QColor sheenColor READ sheenColor WRITE setSheenColor NOTIFY sheenColorChanged REVISION(6, 13))
99 Q_PROPERTY(QQuick3DTexture *sheenColorMap READ sheenColorMap WRITE setSheenColorMap NOTIFY sheenColorMapChanged REVISION(6, 13))
100 Q_PROPERTY(float sheenRoughness READ sheenRoughness WRITE setSheenRoughness NOTIFY sheenRoughnessChanged REVISION(6, 13))
101 Q_PROPERTY(QQuick3DTexture *sheenRoughnessMap READ sheenRoughnessMap WRITE setSheenRoughnessMap NOTIFY
102 sheenRoughnessMapChanged REVISION(6, 13))
103 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping sheenRoughnessChannel READ sheenRoughnessChannel WRITE
104 setSheenRoughnessChannel NOTIFY sheenRoughnessChannelChanged REVISION(6, 13))
106 Q_PROPERTY(float anisotropyStrength READ anisotropyStrength WRITE setAnisotropyStrength NOTIFY anisotropyStrengthChanged REVISION(6, 13))
107 Q_PROPERTY(float anisotropyRotation READ anisotropyRotation WRITE setAnisotropyRotation NOTIFY anisotropyRotationChanged REVISION(6, 13))
108 Q_PROPERTY(QQuick3DTexture *anisotropyMap READ anisotropyMap WRITE setAnisotropyMap NOTIFY anisotropyMapChanged REVISION(6, 13))
110 Q_PROPERTY(float iridescenceFactor READ iridescenceFactor WRITE setIridescenceFactor NOTIFY iridescenceFactorChanged REVISION(6, 13))
111 Q_PROPERTY(QQuick3DTexture *iridescenceMap READ iridescenceMap WRITE setIridescenceMap NOTIFY iridescenceMapChanged REVISION(6, 13))
112 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping iridescenceChannel READ iridescenceChannel WRITE setIridescenceChannel NOTIFY iridescenceChannelChanged REVISION(6, 13))
113 Q_PROPERTY(float iridescenceIndexOfRefraction READ iridescenceIndexOfRefraction WRITE setIridescenceIndexOfRefraction NOTIFY iridescenceIndexOfRefractionChanged REVISION(6, 13))
114 Q_PROPERTY(float iridescenceThicknessMinimum READ iridescenceThicknessMinimum WRITE setIridescenceThicknessMinimum NOTIFY iridescenceThicknessMinimumChanged REVISION(6, 13))
115 Q_PROPERTY(float iridescenceThicknessMaximum READ iridescenceThicknessMaximum WRITE setIridescenceThicknessMaximum NOTIFY iridescenceThicknessMaximumChanged REVISION(6, 13))
116 Q_PROPERTY(QQuick3DTexture *iridescenceThicknessMap READ iridescenceThicknessMap WRITE setIridescenceThicknessMap NOTIFY iridescenceThicknessMapChanged REVISION(6, 13))
117 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping iridescenceThicknessChannel READ iridescenceThicknessChannel WRITE setIridescenceThicknessChannel NOTIFY iridescenceThicknessChannelChanged REVISION(6, 13))
119 Q_PROPERTY(float dispersion READ dispersion WRITE setDispersion NOTIFY dispersionChanged REVISION(6, 13))
121 Q_PROPERTY(float transmissionFactor READ transmissionFactor WRITE setTransmissionFactor NOTIFY transmissionFactorChanged)
122 Q_PROPERTY(QQuick3DTexture * transmissionMap READ transmissionMap WRITE setTransmissionMap NOTIFY transmissionMapChanged)
123 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping transmissionChannel READ transmissionChannel WRITE setTransmissionChannel NOTIFY transmissionChannelChanged)
125 Q_PROPERTY(float thicknessFactor READ thicknessFactor WRITE setThicknessFactor NOTIFY thicknessFactorChanged REVISION(6, 3))
126 Q_PROPERTY(QQuick3DTexture *thicknessMap READ thicknessMap WRITE setThicknessMap NOTIFY thicknessMapChanged REVISION(6, 3))
127 Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping thicknessChannel READ thicknessChannel WRITE setThicknessChannel NOTIFY
128 thicknessChannelChanged REVISION(6, 3))
129 Q_PROPERTY(float attenuationDistance READ attenuationDistance WRITE setAttenuationDistance NOTIFY attenuationDistanceChanged REVISION(6, 3))
130 Q_PROPERTY(QColor attenuationColor READ attenuationColor WRITE setAttenuationColor NOTIFY attenuationColorChanged REVISION(6, 3))
132 Q_PROPERTY(float indexOfRefraction READ indexOfRefraction WRITE setIndexOfRefraction NOTIFY indexOfRefractionChanged REVISION(6, 3))
134 Q_PROPERTY(bool vertexColorsEnabled READ vertexColorsEnabled WRITE setVertexColorsEnabled NOTIFY vertexColorsEnabledChanged REVISION(6, 5))
136 Q_PROPERTY(bool fresnelScaleBiasEnabled READ fresnelScaleBiasEnabled WRITE setFresnelScaleBiasEnabled NOTIFY fresnelScaleBiasEnabledChanged REVISION(6, 8))
137 Q_PROPERTY(float fresnelScale READ fresnelScale WRITE setFresnelScale NOTIFY fresnelScaleChanged REVISION(6, 8))
138 Q_PROPERTY(float fresnelBias READ fresnelBias WRITE setFresnelBias NOTIFY fresnelBiasChanged REVISION(6, 8))
139 Q_PROPERTY(float fresnelPower READ fresnelPower WRITE setFresnelPower NOTIFY fresnelPowerChanged REVISION(6, 8))
141 Q_PROPERTY(bool clearcoatFresnelScaleBiasEnabled READ clearcoatFresnelScaleBiasEnabled WRITE setClearcoatFresnelScaleBiasEnabled NOTIFY clearcoatFresnelScaleBiasEnabledChanged REVISION(6, 8))
142 Q_PROPERTY(float clearcoatFresnelScale READ clearcoatFresnelScale WRITE setClearcoatFresnelScale NOTIFY clearcoatFresnelScaleChanged REVISION(6, 8))
143 Q_PROPERTY(float clearcoatFresnelBias READ clearcoatFresnelBias WRITE setClearcoatFresnelBias NOTIFY clearcoatFresnelBiasChanged REVISION(6, 8))
144 Q_PROPERTY(float clearcoatFresnelPower READ clearcoatFresnelPower WRITE setClearcoatFresnelPower NOTIFY clearcoatFresnelPowerChanged REVISION(6, 8))
145
146 Q_PROPERTY(bool vertexColorsMaskEnabled READ vertexColorsMaskEnabled WRITE setVertexColorsMaskEnabled NOTIFY vertexColorsMaskEnabledChanged REVISION(6, 8))
147 Q_PROPERTY(VertexColorMaskFlags vertexColorRedMask READ vertexColorRedMask WRITE setVertexColorRedMask NOTIFY vertexColorRedMaskChanged REVISION(6, 8))
148 Q_PROPERTY(VertexColorMaskFlags vertexColorGreenMask READ vertexColorGreenMask WRITE setVertexColorGreenMask NOTIFY vertexColorGreenMaskChanged REVISION(6, 8))
149 Q_PROPERTY(VertexColorMaskFlags vertexColorBlueMask READ vertexColorBlueMask WRITE setVertexColorBlueMask NOTIFY vertexColorBlueMaskChanged REVISION(6, 8))
150 Q_PROPERTY(VertexColorMaskFlags vertexColorAlphaMask READ vertexColorAlphaMask WRITE setVertexColorAlphaMask NOTIFY vertexColorAlphaMaskChanged REVISION(6, 8))
151
152 QML_NAMED_ELEMENT(PrincipledMaterial)
154public:
155 enum Lighting {
156 NoLighting = 0,
157 FragmentLighting
158 };
159 Q_ENUM(Lighting)
161 enum BlendMode {
162 SourceOver = 0,
163 Screen,
164 Multiply
165 };
166 Q_ENUM(BlendMode)
167
168 enum AlphaMode {
169 Default = 0,
170 Mask,
171 Blend,
172 Opaque
173 };
174 Q_ENUM(AlphaMode)
176 enum VertexColorMask {
177 NoMask = QQuick3DMaterial::NoMask,
178 RoughnessMask = QQuick3DMaterial::RoughnessMask,
179 NormalStrengthMask = QQuick3DMaterial::NormalStrengthMask,
180 SpecularAmountMask = QQuick3DMaterial::SpecularAmountMask,
181 ClearcoatAmountMask = QQuick3DMaterial::ClearcoatAmountMask,
182 ClearcoatRoughnessAmountMask = QQuick3DMaterial::ClearcoatRoughnessAmountMask,
183 ClearcoatNormalStrengthMask = QQuick3DMaterial::ClearcoatNormalStrengthMask,
184 HeightAmountMask = QQuick3DMaterial::HeightAmountMask,
185 MetalnessMask = QQuick3DMaterial::MetalnessMask,
186 OcclusionAmountMask = QQuick3DMaterial::OcclusionAmountMask,
187 ThicknessFactorMask = QQuick3DMaterial::ThicknessFactorMask,
188 TransmissionFactorMask = QQuick3DMaterial::TransmissionFactorMask
189 };
190 Q_ENUM(VertexColorMask)
191 Q_DECLARE_FLAGS(VertexColorMaskFlags, VertexColorMask)
192 Q_FLAG(VertexColorMaskFlags)
194 explicit QQuick3DPrincipledMaterial(QQuick3DObject *parent = nullptr);
195 ~QQuick3DPrincipledMaterial() override;
197 Lighting lighting() const;
198 BlendMode blendMode() const;
199 QColor baseColor() const;
200 QQuick3DTexture *baseColorMap() const;
201 Q_REVISION(6, 8) bool baseColorSingleChannelEnabled() const;
202 Q_REVISION(6, 8) TextureChannelMapping baseColorChannel() const;
203 Q_REVISION(6, 8) bool specularSingleChannelEnabled() const;
204 Q_REVISION(6, 8) TextureChannelMapping specularChannel() const;
205 Q_REVISION(6, 8) bool emissiveSingleChannelEnabled() const;
206 Q_REVISION(6, 8) TextureChannelMapping emissiveChannel() const;
207 QQuick3DTexture *emissiveMap() const;
208 QVector3D emissiveFactor() const;
209 QQuick3DTexture *specularReflectionMap() const;
210 QQuick3DTexture *specularMap() const;
211 float specularTint() const;
212 float specularAmount() const;
213 float roughness() const;
214 QQuick3DTexture *roughnessMap() const;
215 Q_REVISION(6, 8) bool invertOpacityMapValue() const;
216 float opacity() const;
217 QQuick3DTexture *opacityMap() const;
218 QQuick3DTexture *normalMap() const;
219 float metalness() const;
220 QQuick3DTexture *metalnessMap() const;
221 float normalStrength() const;
222 QQuick3DTexture *occlusionMap() const;
223 float occlusionAmount() const;
224 AlphaMode alphaMode() const;
225 float alphaCutoff() const;
226 TextureChannelMapping metalnessChannel() const;
227 TextureChannelMapping roughnessChannel() const;
228 TextureChannelMapping opacityChannel() const;
229 TextureChannelMapping occlusionChannel() const;
230 float pointSize() const;
231 float lineWidth() const;
232 Q_REVISION(6, 2) QQuick3DTexture *heightMap() const;
233 Q_REVISION(6, 2) TextureChannelMapping heightChannel() const;
234 Q_REVISION(6, 2) float heightAmount() const;
235 Q_REVISION(6, 2) int minHeightMapSamples() const;
236 Q_REVISION(6, 2) int maxHeightMapSamples() const;
238 Q_REVISION(6, 3) float clearcoatAmount() const;
239 Q_REVISION(6, 3) QQuick3DTexture *clearcoatMap() const;
240 Q_REVISION(6, 3) TextureChannelMapping clearcoatChannel() const;
241 Q_REVISION(6, 3) float clearcoatRoughnessAmount() const;
242 Q_REVISION(6, 3) TextureChannelMapping clearcoatRoughnessChannel() const;
243 Q_REVISION(6, 3) QQuick3DTexture *clearcoatRoughnessMap() const;
244 Q_REVISION(6, 3) QQuick3DTexture *clearcoatNormalMap() const;
245 Q_REVISION(6, 8) float clearcoatNormalStrength() const;
247 Q_REVISION(6, 13) const QColor &sheenColor() const;
248 Q_REVISION(6, 13) QQuick3DTexture *sheenColorMap() const;
249 Q_REVISION(6, 13) float sheenRoughness() const;
250 Q_REVISION(6, 13) QQuick3DTexture *sheenRoughnessMap() const;
251 Q_REVISION(6, 13) TextureChannelMapping sheenRoughnessChannel() const;
253 Q_REVISION(6, 13) float anisotropyStrength() const;
254 Q_REVISION(6, 13) float anisotropyRotation() const;
255 Q_REVISION(6, 13) QQuick3DTexture *anisotropyMap() const;
257 Q_REVISION(6, 13) float iridescenceFactor() const;
258 Q_REVISION(6, 13) QQuick3DTexture *iridescenceMap() const;
259 Q_REVISION(6, 13) TextureChannelMapping iridescenceChannel() const;
260 Q_REVISION(6, 13) float iridescenceIndexOfRefraction() const;
261 Q_REVISION(6, 13) float iridescenceThicknessMinimum() const;
262 Q_REVISION(6, 13) float iridescenceThicknessMaximum() const;
263 Q_REVISION(6, 13) QQuick3DTexture *iridescenceThicknessMap() const;
264 Q_REVISION(6, 13) TextureChannelMapping iridescenceThicknessChannel() const;
266 Q_REVISION(6, 13) float dispersion() const;
268 Q_REVISION(6, 3) float transmissionFactor() const;
269 Q_REVISION(6, 3) QQuick3DTexture *transmissionMap() const;
270 Q_REVISION(6, 3) TextureChannelMapping transmissionChannel() const;
272 Q_REVISION(6, 3) float thicknessFactor() const;
273 Q_REVISION(6, 3) QQuick3DTexture *thicknessMap() const;
274 Q_REVISION(6, 3) const TextureChannelMapping &thicknessChannel() const;
275 Q_REVISION(6, 3) float attenuationDistance() const;
276 Q_REVISION(6, 3) const QColor &attenuationColor() const;
278 Q_REVISION(6, 3) float indexOfRefraction() const;
279 Q_REVISION(6, 8) bool fresnelScaleBiasEnabled() const;
280 Q_REVISION(6, 8) float fresnelScale() const;
281 Q_REVISION(6, 8) float fresnelBias() const;
282 Q_REVISION(6, 8) float fresnelPower() const;
284 Q_REVISION(6, 8) bool clearcoatFresnelScaleBiasEnabled() const;
285 Q_REVISION(6, 8) float clearcoatFresnelScale() const;
286 Q_REVISION(6, 8) float clearcoatFresnelBias() const;
287 Q_REVISION(6, 8) float clearcoatFresnelPower() const;
289 Q_REVISION(6, 5) bool vertexColorsEnabled() const;
290
291 Q_REVISION(6, 8) bool vertexColorsMaskEnabled() const;
292
293 Q_REVISION(6, 8) VertexColorMaskFlags vertexColorRedMask() const;
294 Q_REVISION(6, 8) VertexColorMaskFlags vertexColorGreenMask() const;
295 Q_REVISION(6, 8) VertexColorMaskFlags vertexColorBlueMask() const;
296 Q_REVISION(6, 8) VertexColorMaskFlags vertexColorAlphaMask() const;
298public Q_SLOTS:
299 void setLighting(QQuick3DPrincipledMaterial::Lighting lighting);
300 void setBlendMode(QQuick3DPrincipledMaterial::BlendMode blendMode);
301 void setBaseColor(QColor baseColor);
302 void setBaseColorMap(QQuick3DTexture *baseColorMap);
303 Q_REVISION(6, 8) void setBaseColorSingleChannelEnabled(bool baseColorSingleChannelEnabled);
304 Q_REVISION(6, 8) void setBaseColorChannel(QQuick3DMaterial::TextureChannelMapping channel);
305 Q_REVISION(6, 8) void setSpecularSingleChannelEnabled(bool specularSingleChannelEnabled);
306 Q_REVISION(6, 8) void setSpecularChannel(QQuick3DMaterial::TextureChannelMapping channel);
307 Q_REVISION(6, 8) void setEmissiveSingleChannelEnabled(bool emissiveSingleChannelEnabled);
308 Q_REVISION(6, 8) void setEmissiveChannel(QQuick3DMaterial::TextureChannelMapping channel);
309 void setEmissiveMap(QQuick3DTexture *emissiveMap);
310 void setEmissiveFactor(QVector3D emissiveFactor);
311 void setSpecularReflectionMap(QQuick3DTexture *specularReflectionMap);
312 void setSpecularMap(QQuick3DTexture *specularMap);
313 void setSpecularTint(float specularTint);
314 void setSpecularAmount(float specularAmount);
315 void setRoughness(float roughness);
316 void setRoughnessMap(QQuick3DTexture *roughnessMap);
317 Q_REVISION(6, 8) void setInvertOpacityMapValue(bool invertOpacityMapValue);
318 void setOpacity(float opacity);
319 void setOpacityMap(QQuick3DTexture *opacityMap);
320 void setNormalMap(QQuick3DTexture *normalMap);
321 void setMetalness(float metalnessAmount);
322 void setMetalnessMap(QQuick3DTexture *metalnessMap);
323 void setNormalStrength(float normalStrength);
324 void setOcclusionMap(QQuick3DTexture *occlusionMap);
325 void setOcclusionAmount(float occlusionAmount);
326 void setAlphaMode(QQuick3DPrincipledMaterial::AlphaMode alphaMode);
327 void setAlphaCutoff(float alphaCutoff);
328 void setMetalnessChannel(QQuick3DMaterial::TextureChannelMapping channel);
329 void setRoughnessChannel(QQuick3DMaterial::TextureChannelMapping channel);
330 void setOpacityChannel(QQuick3DMaterial::TextureChannelMapping channel);
331 void setOcclusionChannel(QQuick3DMaterial::TextureChannelMapping channel);
332 void setPointSize(float size);
333 void setLineWidth(float width);
334 Q_REVISION(6, 2) void setHeightMap(QQuick3DTexture *heightMap);
335 Q_REVISION(6, 2) void setHeightChannel(QQuick3DMaterial::TextureChannelMapping channel);
336 Q_REVISION(6, 2) void setHeightAmount(float heightAmount);
337 Q_REVISION(6, 2) void setMinHeightMapSamples(int samples);
338 Q_REVISION(6, 2) void setMaxHeightMapSamples(int samples);
340 Q_REVISION(6, 3) void setClearcoatAmount(float newClearcoatAmount);
341 Q_REVISION(6, 3) void setClearcoatMap(QQuick3DTexture *newClearcoatMap);
342 Q_REVISION(6, 3) void setClearcoatChannel(QQuick3DMaterial::TextureChannelMapping newClearcoatChannel);
343 Q_REVISION(6, 3) void setClearcoatRoughnessAmount(float newClearcoatRoughnessAmount);
344 Q_REVISION(6, 3) void setClearcoatRoughnessChannel(QQuick3DMaterial::TextureChannelMapping newClearcoatRoughnessChannel);
345 Q_REVISION(6, 3) void setClearcoatRoughnessMap(QQuick3DTexture *newClearcoatRoughnessMap);
346 Q_REVISION(6, 3) void setClearcoatNormalMap(QQuick3DTexture *newClearcoatNormalMap);
347 Q_REVISION(6, 8) void setClearcoatNormalStrength(float clearcoatNormalStrength);
349 Q_REVISION(6, 13) void setSheenColor(const QColor &newSheenColor);
350 Q_REVISION(6, 13) void setSheenColorMap(QQuick3DTexture *newSheenColorMap);
351 Q_REVISION(6, 13) void setSheenRoughness(float newSheenRoughness);
352 Q_REVISION(6, 13) void setSheenRoughnessMap(QQuick3DTexture *newSheenRoughnessMap);
353 Q_REVISION(6, 13) void setSheenRoughnessChannel(QQuick3DMaterial::TextureChannelMapping newSheenRoughnessChannel);
355 Q_REVISION(6, 13) void setAnisotropyStrength(float newAnisotropyStrength);
356 Q_REVISION(6, 13) void setAnisotropyRotation(float newAnisotropyRotation);
357 Q_REVISION(6, 13) void setAnisotropyMap(QQuick3DTexture *newAnisotropyMap);
358
359 Q_REVISION(6, 13) void setIridescenceFactor(float newIridescenceFactor);
360 Q_REVISION(6, 13) void setIridescenceMap(QQuick3DTexture *newIridescenceMap);
361 Q_REVISION(6, 13) void setIridescenceChannel(QQuick3DMaterial::TextureChannelMapping newIridescenceChannel);
362 Q_REVISION(6, 13) void setIridescenceIndexOfRefraction(float newIridescenceIndexOfRefraction);
363 Q_REVISION(6, 13) void setIridescenceThicknessMinimum(float newIridescenceThicknessMinimum);
364 Q_REVISION(6, 13) void setIridescenceThicknessMaximum(float newIridescenceThicknessMaximum);
365 Q_REVISION(6, 13) void setIridescenceThicknessMap(QQuick3DTexture *newIridescenceThicknessMap);
366 Q_REVISION(6, 13) void setIridescenceThicknessChannel(QQuick3DMaterial::TextureChannelMapping newIridescenceThicknessChannel);
368 Q_REVISION(6, 13) void setDispersion(float newDispersion);
370 Q_REVISION(6, 3) void setTransmissionFactor(float newTransmissionFactor);
371 Q_REVISION(6, 3) void setTransmissionMap(QQuick3DTexture *newTransmissionMap);
372 Q_REVISION(6, 3) void setTransmissionChannel(QQuick3DMaterial::TextureChannelMapping newTransmissionChannel);
374 Q_REVISION(6, 3) void setThicknessFactor(float newThicknessFactor);
375 Q_REVISION(6, 3) void setThicknessMap(QQuick3DTexture *newThicknessMap);
376 Q_REVISION(6, 3) void setThicknessChannel(const QQuick3DMaterial::TextureChannelMapping &newThicknessChannel);
377 Q_REVISION(6, 3) void setAttenuationDistance(float newAttenuationDistance);
378 Q_REVISION(6, 3) void setAttenuationColor(const QColor &newAttenuationColor);
380 Q_REVISION(6, 3) void setIndexOfRefraction(float indexOfRefraction);
381 Q_REVISION(6, 8) void setFresnelScaleBiasEnabled(bool fresnelScaleBias);
382 Q_REVISION(6, 8) void setFresnelScale(float fresnelScale);
383 Q_REVISION(6, 8) void setFresnelBias(float fresnelBias);
384 Q_REVISION(6, 8) void setFresnelPower(float fresnelPower);
386 Q_REVISION(6, 8) void setClearcoatFresnelScaleBiasEnabled(bool clearcoatFresnelScaleBias);
387 Q_REVISION(6, 8) void setClearcoatFresnelScale(float clearcoatFresnelScale);
388 Q_REVISION(6, 8) void setClearcoatFresnelBias(float clearcoatFresnelBias);
389 Q_REVISION(6, 8) void setClearcoatFresnelPower(float clearcoatFresnelPower);
390
391 Q_REVISION(6, 5) void setVertexColorsEnabled(bool vertexColorsEnabled);
393 Q_REVISION(6, 8) void setVertexColorsMaskEnabled(bool vertexColorsMaskEnabled);
394 Q_REVISION(6, 8) void setVertexColorRedMask(VertexColorMaskFlags vertexColorRedMask);
395 Q_REVISION(6, 8) void setVertexColorGreenMask(VertexColorMaskFlags vertexColorGreenMask);
396 Q_REVISION(6, 8) void setVertexColorBlueMask(VertexColorMaskFlags vertexColorBlueMask);
397 Q_REVISION(6, 8) void setVertexColorAlphaMask(VertexColorMaskFlags vertexColorAlphaMask);
399Q_SIGNALS:
400 void lightingChanged(QQuick3DPrincipledMaterial::Lighting lighting);
401 void blendModeChanged(QQuick3DPrincipledMaterial::BlendMode blendMode);
402 void baseColorChanged(QColor baseColor);
403 void baseColorMapChanged(QQuick3DTexture *baseColorMap);
404 Q_REVISION(6, 8) void baseColorSingleChannelEnabledChanged(bool baseColorSingleChannelEnabled);
405 Q_REVISION(6, 8) void baseColorChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
406 Q_REVISION(6, 8) void specularSingleChannelEnabledChanged(bool specularColorSingleChannelEnabled);
407 Q_REVISION(6, 8) void specularChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
408 Q_REVISION(6, 8) void emissiveSingleChannelEnabledChanged(bool emissiveColorSingleChannelEnabled);
409 Q_REVISION(6, 8) void emissiveChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
410 void emissiveMapChanged(QQuick3DTexture *emissiveMap);
411 void emissiveFactorChanged(QVector3D emissiveFactor);
412 void specularReflectionMapChanged(QQuick3DTexture *specularReflectionMap);
413 void specularMapChanged(QQuick3DTexture *specularMap);
414 void specularTintChanged(float specularTint);
415 void specularAmountChanged(float specularAmount);
416 void roughnessChanged(float roughness);
417 void roughnessMapChanged(QQuick3DTexture *roughnessMap);
418 Q_REVISION(6, 8) void invertOpacityMapValueChanged(bool invertOpacityMapValue);
419 void opacityChanged(float opacity);
420 void opacityMapChanged(QQuick3DTexture *opacityMap);
421 void normalMapChanged(QQuick3DTexture *normalMap);
422 void metalnessChanged(float metalness);
423 void metalnessMapChanged(QQuick3DTexture *metalnessMap);
424 void normalStrengthChanged(float normalStrength);
425 void occlusionMapChanged(QQuick3DTexture *occlusionMap);
426 void occlusionAmountChanged(float occlusionAmount);
427 void alphaModeChanged(QQuick3DPrincipledMaterial::AlphaMode alphaMode);
428 void alphaCutoffChanged(float alphaCutoff);
429 void metalnessChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
430 void roughnessChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
431 void opacityChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
432 void occlusionChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
433 void pointSizeChanged();
434 void lineWidthChanged();
435 Q_REVISION(6, 2) void heightMapChanged(QQuick3DTexture *heightMap);
436 Q_REVISION(6, 2) void heightChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
437 Q_REVISION(6, 2) void heightAmountChanged(float heightAmount);
438 Q_REVISION(6, 2) void minHeightMapSamplesChanged(int samples);
439 Q_REVISION(6, 2) void maxHeightMapSamplesChanged(int samples);
441 Q_REVISION(6, 3) void clearcoatAmountChanged(float amount);
442 Q_REVISION(6, 3) void clearcoatMapChanged(QQuick3DTexture *texture);
443 Q_REVISION(6, 3) void clearcoatChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
444 Q_REVISION(6, 3) void clearcoatRoughnessAmountChanged(float amount);
445 Q_REVISION(6, 3) void clearcoatRoughnessChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
446 Q_REVISION(6, 3) void clearcoatRoughnessMapChanged(QQuick3DTexture *texture);
447 Q_REVISION(6, 3) void clearcoatNormalMapChanged(QQuick3DTexture *texture);
448 Q_REVISION(6, 8) void clearcoatNormalStrengthChanged(float clearcoatNormalStrength);
450 Q_REVISION(6, 13) void sheenColorChanged(QColor color);
451 Q_REVISION(6, 13) void sheenColorMapChanged(QQuick3DTexture *texture);
452 Q_REVISION(6, 13) void sheenRoughnessChanged(float amount);
453 Q_REVISION(6, 13) void sheenRoughnessMapChanged(QQuick3DTexture *texture);
454 Q_REVISION(6, 13) void sheenRoughnessChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
456 Q_REVISION(6, 13) void anisotropyStrengthChanged(float strength);
457 Q_REVISION(6, 13) void anisotropyRotationChanged(float rotation);
458 Q_REVISION(6, 13) void anisotropyMapChanged(QQuick3DTexture *texture);
459
460 Q_REVISION(6, 13) void iridescenceFactorChanged(float factor);
461 Q_REVISION(6, 13) void iridescenceMapChanged(QQuick3DTexture *texture);
462 Q_REVISION(6, 13) void iridescenceChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
463 Q_REVISION(6, 13) void iridescenceIndexOfRefractionChanged(float ior);
464 Q_REVISION(6, 13) void iridescenceThicknessMinimumChanged(float thickness);
465 Q_REVISION(6, 13) void iridescenceThicknessMaximumChanged(float thickness);
466 Q_REVISION(6, 13) void iridescenceThicknessMapChanged(QQuick3DTexture *texture);
467 Q_REVISION(6, 13) void iridescenceThicknessChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
469 Q_REVISION(6, 13) void dispersionChanged(float dispersion);
471 Q_REVISION(6, 3) void transmissionFactorChanged(float amount);
472 Q_REVISION(6, 3) void transmissionMapChanged(QQuick3DTexture *texture);
473 Q_REVISION(6, 3) void transmissionChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
475 Q_REVISION(6, 3) void thicknessFactorChanged(float amount);
476 Q_REVISION(6, 3) void thicknessMapChanged(QQuick3DTexture *texture);
477 Q_REVISION(6, 3) void thicknessChannelChanged(QQuick3DMaterial::TextureChannelMapping channel);
478 Q_REVISION(6, 3) void attenuationDistanceChanged(float distance);
479 Q_REVISION(6, 3) void attenuationColorChanged(QColor color);
481 Q_REVISION(6, 3) void indexOfRefractionChanged(float indexOfRefraction);
482 Q_REVISION(6, 8) void fresnelScaleBiasEnabledChanged(bool fresnelScaleBiasEnabled);
483 Q_REVISION(6, 8) void fresnelScaleChanged(float fresnelScale);
484 Q_REVISION(6, 8) void fresnelBiasChanged(float fresnelBias);
485 Q_REVISION(6, 8) void fresnelPowerChanged(float fresnelPower);
487 Q_REVISION(6, 8) void clearcoatFresnelScaleBiasEnabledChanged(bool clearcoatFresnelScaleBiasEnabled);
488 Q_REVISION(6, 8) void clearcoatFresnelScaleChanged(float clearcoatFresnelScale);
489 Q_REVISION(6, 8) void clearcoatFresnelBiasChanged(float clearcoatFresnelBias);
490 Q_REVISION(6, 8) void clearcoatFresnelPowerChanged(float clearcoatFresnelPower);
491
492 Q_REVISION(6, 5) void vertexColorsEnabledChanged(bool vertexColorsEnabled);
493
494 Q_REVISION(6, 8) void vertexColorsMaskEnabledChanged();
495 Q_REVISION(6, 8) void vertexColorRedMaskChanged();
496 Q_REVISION(6, 8) void vertexColorGreenMaskChanged();
497 Q_REVISION(6, 8) void vertexColorBlueMaskChanged();
498 Q_REVISION(6, 8) void vertexColorAlphaMaskChanged();
499
500protected:
501 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
502 void markAllDirty() override;
503 void itemChange(ItemChange, const ItemChangeData &) override;
504private:
505 enum DirtyType {
506 LightingModeDirty = 0x00000001,
507 BlendModeDirty = 0x00000002,
508 BaseColorDirty = 0x00000004,
509 EmissiveDirty = 0x00000008,
510 SpecularDirty = 0x00000010,
511 OpacityDirty = 0x00000020,
512 NormalDirty = 0x00000040,
513 MetalnessDirty = 0x00000080,
514 RoughnessDirty = 0x00000100,
515 OcclusionDirty = 0x00000200,
516 AlphaModeDirty = 0x00000400,
517 PointSizeDirty = 0x00000800,
518 LineWidthDirty = 0x00001000,
519 HeightDirty = 0x00002000,
520 ClearcoatDirty = 0x00004000,
521 TransmissionDirty = 0x00008000,
522 VolumeDirty = 0x00010000,
523 VertexColorsDirty = 0x00020000,
524 SheenDirty = 0x00040000,
525 AnisotropyDirty = 0x00080000,
526 IridescenceDirty = 0x00100000,
527 DispersionDirty = 0x00200000
528 };
529
530 void updateSceneManager(QQuick3DSceneManager *window);
531
532 // Note: The default values for properties that are also present in
533 // QSSGShaderCustomMaterialAdapter must match the values there, because a
534 // PrincipledMaterial { } and CustomMaterial { } must be identical. Same
535 // goes for the custom shader defaults in generateFragmentShader(), keep
536 // them in sync.
537
538 Lighting m_lighting = FragmentLighting;
539 BlendMode m_blendMode = SourceOver;
540 AlphaMode m_alphaMode = Default;
541 QColor m_baseColor = Qt::white;
542 QQuick3DTexture *m_baseColorMap = nullptr;
543 bool m_baseColorSingleChannelEnabled = false;
544 TextureChannelMapping m_baseColorChannel = QQuick3DMaterial::R;
545 bool m_specularSingleChannelEnabled = false;
546 TextureChannelMapping m_specularChannel = QQuick3DMaterial::R;
547 TextureChannelMapping m_emissiveChannel = QQuick3DMaterial::R;
548 bool m_emissiveSingleChannelEnabled = false;
549 QVector3D m_emissiveFactor;
550 QQuick3DTexture *m_emissiveMap = nullptr;
551
552 QQuick3DTexture *m_specularReflectionMap = nullptr;
553 QQuick3DTexture *m_specularMap = nullptr;
554 QQuick3DTexture *m_roughnessMap = nullptr;
555 QQuick3DTexture *m_opacityMap = nullptr;
556 QQuick3DTexture *m_normalMap = nullptr;
557 QQuick3DTexture *m_metalnessMap = nullptr;
558 QQuick3DTexture *m_occlusionMap = nullptr;
559 float m_specularTint = 0.0f;
560 float m_specularAmount = 1.0f;
561 float m_roughness = 0.0f;
562 bool m_invertOpacityMapValue = false;
563 float m_opacity = 1.0f;
564 float m_metalnessAmount = 0.0f;
565 float m_normalStrength = 1.0f;
566 float m_occlusionAmount = 1.0f;
567 float m_alphaCutoff = 0.5f;
568 TextureChannelMapping m_metalnessChannel = QQuick3DMaterial::B;
569 TextureChannelMapping m_roughnessChannel = QQuick3DMaterial::G;
570 TextureChannelMapping m_opacityChannel = QQuick3DMaterial::A;
571 TextureChannelMapping m_occlusionChannel = QQuick3DMaterial::R;
572 float m_pointSize = 1.0f;
573 float m_lineWidth = 1.0f;
574 QQuick3DTexture *m_heightMap = nullptr;
575 TextureChannelMapping m_heightChannel = QQuick3DMaterial::R;
576 float m_heightAmount = 0.0f;
577 int m_minHeightMapSamples = 8;
578 int m_maxHeightMapSamples = 32;
579 float m_clearcoatAmount = 0.0f;
580 QQuick3DTexture *m_clearcoatMap = nullptr;
581 TextureChannelMapping m_clearcoatChannel = QQuick3DMaterial::R;
582 float m_clearcoatRoughnessAmount = 0.0f;
583 float m_clearcoatNormalStrength = 1.0f;
584 TextureChannelMapping m_clearcoatRoughnessChannel = QQuick3DMaterial::G;
585 QQuick3DTexture *m_clearcoatRoughnessMap = nullptr;
586 QQuick3DTexture *m_clearcoatNormalMap = nullptr;
587 QColor m_sheenColor = Qt::black;
588 QQuick3DTexture *m_sheenColorMap = nullptr;
589 float m_sheenRoughness = 0.0f;
590 QQuick3DTexture *m_sheenRoughnessMap = nullptr;
591 TextureChannelMapping m_sheenRoughnessChannel = QQuick3DMaterial::A;
592 float m_anisotropyStrength = 0.0f;
593 float m_anisotropyRotation = 0.0f; // degrees
594 QQuick3DTexture *m_anisotropyMap = nullptr;
595 float m_iridescenceFactor = 0.0f;
596 QQuick3DTexture *m_iridescenceMap = nullptr;
597 TextureChannelMapping m_iridescenceChannel = QQuick3DMaterial::R;
598 float m_iridescenceIndexOfRefraction = 1.3f;
599 float m_iridescenceThicknessMinimum = 100.0f; // nanometers
600 float m_iridescenceThicknessMaximum = 400.0f; // nanometers
601 QQuick3DTexture *m_iridescenceThicknessMap = nullptr;
602 TextureChannelMapping m_iridescenceThicknessChannel = QQuick3DMaterial::G;
603 float m_dispersion = 0.0f;
604 float m_transmissionFactor = 0.0f;
605 QQuick3DTexture *m_transmissionMap = nullptr;
606 TextureChannelMapping m_transmissionChannel = QQuick3DMaterial::R;
607 float m_thicknessFactor = 0.0f;
608 QQuick3DTexture *m_thicknessMap = nullptr;
609 TextureChannelMapping m_thicknessChannel = QQuick3DMaterial::G;
610 float m_attenuationDistance = std::numeric_limits<float>::infinity();
611 QColor m_attenuationColor = Qt::white;
612 float m_indexOfRefraction = 1.5f;
613 bool m_fresnelScaleBiasEnabled = false;
614 float m_fresnelScale = 1.0f;
615 float m_fresnelBias = 0.0f;
616 float m_fresnelPower = 5.0f;
617 bool m_clearcoatFresnelScaleBiasEnabled = false;
618 float m_clearcoatFresnelScale = 1.0f;
619 float m_clearcoatFresnelBias = 0.0f;
620 float m_clearcoatFresnelPower = 5.0f;
621 bool m_vertexColorsEnabled = true;
622
623 bool m_vertexColorsMaskEnabled = false;
624 VertexColorMaskFlags m_vertexColorRedMask = NoMask;
625 VertexColorMaskFlags m_vertexColorGreenMask = NoMask;
626 VertexColorMaskFlags m_vertexColorBlueMask = NoMask;
627 VertexColorMaskFlags m_vertexColorAlphaMask = NoMask;
628
629 quint32 m_dirtyAttributes = 0xffffffff; // all dirty by default
630 void markDirty(DirtyType type);
631
632 static constexpr float ensureNormalized(float val) { return qBound(0.0f, val, 1.0f); }
633};
634
635QT_END_NAMESPACE
636
637#endif // QSSGPRINCIPLEDMATERIAL_H
Combined button and popup list for selecting options.