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