33 enum class MaterialLighting : quint8
38 enum class MaterialBlendMode : quint8
44 enum class MaterialSpecularModel : quint8
50 enum class MaterialDiffuseModel : quint8
57 enum MaterialAlphaMode : quint8
64 enum TextureChannelMapping : quint8
72 enum VertexColorMask : quint16
76 NormalStrengthMask = 2,
77 SpecularAmountMask = 4,
78 ClearcoatAmountMask = 8,
79 ClearcoatRoughnessAmountMask = 16,
80 ClearcoatNormalStrengthMask = 32,
81 HeightAmountMask = 64,
83 OcclusionAmountMask = 256,
84 ThicknessFactorMask = 512,
85 TransmissionFactorMask = 1024
87 Q_DECLARE_FLAGS(VertexColorMaskFlags, VertexColorMask)
89 QSSGRenderImage *colorMap =
nullptr;
91 QSSGRenderImage *iblProbe =
nullptr;
92 QSSGRenderImage *emissiveMap =
nullptr;
93 QSSGRenderImage *specularReflection =
nullptr;
94 QSSGRenderImage *specularMap =
nullptr;
95 QSSGRenderImage *roughnessMap =
nullptr;
96 QSSGRenderImage *opacityMap =
nullptr;
97 QSSGRenderImage *bumpMap =
nullptr;
98 QSSGRenderImage *normalMap =
nullptr;
99 QSSGRenderImage *translucencyMap =
nullptr;
100 QSSGRenderImage *metalnessMap =
nullptr;
101 QSSGRenderImage *occlusionMap =
nullptr;
102 QSSGRenderImage *heightMap =
nullptr;
103 QSSGRenderImage *clearcoatMap =
nullptr;
104 QSSGRenderImage *clearcoatRoughnessMap =
nullptr;
105 QSSGRenderImage *clearcoatNormalMap =
nullptr;
106 QSSGRenderImage *transmissionMap =
nullptr;
107 QSSGRenderImage *thicknessMap =
nullptr;
112 QVector3D specularTint{ 1.0f, 1.0f, 1.0f };
114 QVector3D emissiveColor = { 1.0f, 1.0f, 1.0f };
115 QVector4D color{ 1.0f, 1.0f, 1.0f, 1.0f };
116 float diffuseLightWrap = 0.0f;
117 float fresnelScaleBiasEnabled =
false;
118 float fresnelScale = 1.0f;
119 float fresnelBias = 0.0f;
120 float fresnelPower = 0.0f;
121 float clearcoatFresnelScaleBiasEnabled =
false;
122 float clearcoatFresnelScale = 1.0f;
123 float clearcoatFresnelBias = 0.0f;
124 float clearcoatFresnelPower = 5.0f;
125 float specularAmount = 1.0f;
126 float specularRoughness = 0.0f;
127 float metalnessAmount = 0.0f;
128 float opacity = 1.0f;
129 bool invertOpacityMapValue =
false;
130 bool baseColorSingleChannelEnabled =
false;
131 bool specularAmountSingleChannelEnabled =
false;
132 bool emissiveSingleChannelEnabled =
false;
133 float bumpAmount = 0.0f;
134 float translucentFalloff = 0.0f;
135 float occlusionAmount = 1.0f;
136 float alphaCutoff = 0.5f;
137 float heightAmount = 0.0f;
138 int minHeightSamples = 8;
139 int maxHeightSamples = 32;
140 float clearcoatAmount = 0.0f;
141 float clearcoatRoughnessAmount = 0.0f;
142 float clearcoatNormalStrength = 1.0f;
143 float transmissionFactor = 0.0f;
144 float thicknessFactor = 0.0f;
145 float attenuationDistance = std::numeric_limits<
float>::infinity();
146 QVector3D attenuationColor { 1.0f, 1.0f, 1.0f };
148 MaterialLighting lighting = MaterialLighting::FragmentLighting;
149 QSSGRenderDefaultMaterial::MaterialBlendMode blendMode = QSSGRenderDefaultMaterial::MaterialBlendMode::SourceOver;
150 QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel = QSSGRenderDefaultMaterial::MaterialSpecularModel::SchlickGGX;
151 QSSGRenderDefaultMaterial::MaterialDiffuseModel diffuseModel = QSSGRenderDefaultMaterial::MaterialDiffuseModel::Burley;
152 QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode = QSSGRenderDefaultMaterial::Default;
153 QSSGCullFaceMode cullMode = QSSGCullFaceMode::Back;
154 QSSGDepthDrawMode depthDrawMode = QSSGDepthDrawMode::OpaqueOnly;
155 bool vertexColorsEnabled =
false;
156 bool vertexColorsMaskEnabled =
false;
158 TextureChannelMapping roughnessChannel = TextureChannelMapping::R;
159 TextureChannelMapping opacityChannel = TextureChannelMapping::A;
160 TextureChannelMapping translucencyChannel = TextureChannelMapping::A;
161 TextureChannelMapping metalnessChannel = TextureChannelMapping::R;
162 TextureChannelMapping occlusionChannel = TextureChannelMapping::R;
163 TextureChannelMapping heightChannel = TextureChannelMapping::R;
164 TextureChannelMapping clearcoatChannel = TextureChannelMapping::R;
165 TextureChannelMapping clearcoatRoughnessChannel = TextureChannelMapping::G;
166 TextureChannelMapping transmissionChannel = TextureChannelMapping::R;
167 TextureChannelMapping thicknessChannel = TextureChannelMapping::G;
168 TextureChannelMapping baseColorChannel = TextureChannelMapping::R;
169 TextureChannelMapping specularAmountChannel = TextureChannelMapping::R;
170 TextureChannelMapping emissiveChannel = TextureChannelMapping::R;
171 float pointSize = 1.0f;
172 float lineWidth = 1.0f;
173 VertexColorMaskFlags vertexColorRedMask = VertexColorMask::NoMask;
174 VertexColorMaskFlags vertexColorGreenMask = VertexColorMask::NoMask;
175 VertexColorMaskFlags vertexColorBlueMask = VertexColorMask::NoMask;
176 VertexColorMaskFlags vertexColorAlphaMask = VertexColorMask::NoMask;
178 QSSGRenderDefaultMaterial(Type type = Type::DefaultMaterial);
179 ~QSSGRenderDefaultMaterial();
181 bool isSpecularEnabled()
const {
return specularAmount > .01f; }
182 bool isMetalnessEnabled()
const {
return metalnessAmount > 0.01f; }
183 bool isFresnelScaleBiasEnabled()
const {
return fresnelScaleBiasEnabled; }
184 bool isClearcoatFresnelScaleBiasEnabled()
const {
return clearcoatFresnelScaleBiasEnabled; }
185 bool isFresnelEnabled()
const {
return fresnelPower > 0.0f; }
186 bool isVertexColorsEnabled()
const {
return vertexColorsEnabled; }
187 bool isVertexColorsMaskEnabled()
const {
return vertexColorsMaskEnabled; }
188 bool isInvertOpacityMapValue()
const {
return invertOpacityMapValue; }
189 bool isBaseColorSingleChannelEnabled()
const {
return baseColorSingleChannelEnabled; }
190 bool isSpecularAmountSingleChannelEnabled()
const {
return specularAmountSingleChannelEnabled; }
191 bool isEmissiveSingleChannelEnabled()
const {
return emissiveSingleChannelEnabled; }
192 bool hasLighting()
const {
return lighting != MaterialLighting::NoLighting; }
193 bool isClearcoatEnabled()
const {
return clearcoatAmount > 0.01f; }
194 bool isTransmissionEnabled()
const {
return transmissionFactor > 0.01f; }
196 [[nodiscard]]
inline bool isDirty()
const {
return dirty; }
199 QSSGShaderMaterialAdapter *adapter =
nullptr;
201 QString debugObjectName;