14:24:44: Checking available ports... 14:24:44: Found 1001 free ports. 14:24:44: Starting C:\Qt\Examples\Qt-6.9.1\demos\robotarm\build\Desktop_Qt_6_8_3_MinGW_64_bit-Debug\RobotArmApp.exe "-qmljsdebugger=port:30000,block,services:CanvasFrameRate,EngineControl,DebugMessages,DebugTranslation"... QML debugging is enabled. Only use this in a safe environment. QML debugging is enabled. Adding QML debugging arguments... Application arguments: QList(C:\Qt\Examples\Qt-6.9.1\demos\robotarm\build\Desktop_Qt_6_8_3_MinGW_64_bit-Debug\RobotArmApp.exe, -qmljsdebugger=port:30000,block,services:CanvasFrameRate,EngineControl,DebugMessages,DebugTranslation, -qmljsdebugger=port:30000,block,services:CanvasFrameRate,EngineControl,DebugMessages,DebugTranslation) Number of arguments: 3 QML Debugger: Waiting for connection on port 30000... Attempting to seed material shader cache from C:/Users/81808/AppData/Local/RobotArmApp/cache/q3dshadercache-x86_64-little_endian-llp64/q3dshadercache.qsbc qsbc file is for a different Qt version Ignoring qsbc file C:/Users/81808/AppData/Local/RobotArmApp/cache/q3dshadercache-x86_64-little_endian-llp64/q3dshadercache.qsbc VERTEX SHADER: ***** 1 #version 440 2 //Shader name -mesh default material pipeline-- ;hasLighting=true;lightCount=3;light2HasPosition=true;light0ShadowMapSize=256;light1ShadowMapSize=256;light2ShadowMapSize=256;light3ShadowMapSize=0;light4ShadowMapSize=0;light5ShadowMapSize=0;light6ShadowMapSize=0;light7ShadowMapSize=0;light8ShadowMapSize=0;light9ShadowMapSize=0;light10ShadowMapSize=0;light11ShadowMapSize=0;light12ShadowMapSize=0;light13ShadowMapSize=0;light14ShadowMapSize=0;light0SoftShadowQuality=1;light1SoftShadowQuality=1;light2SoftShadowQuality=1;light3SoftShadowQuality=0;light4SoftShadowQuality=0;light5SoftShadowQuality=0;light6SoftShadowQuality=0;light7SoftShadowQuality=0;light8SoftShadowQuality=0;light9SoftShadowQuality=0;light10SoftShadowQuality=0;light11SoftShadowQuality=0;light12SoftShadowQuality=0;light13SoftShadowQuality=0;light14SoftShadowQuality=0;vertexColorRedMask=0;vertexColorGreenMask=0;vertexColorBlueMask=0;vertexColorAlphaMask=0;specularModel=Default;;diffuseMap={enabled=true;;;identity=true;;};emissiveMap={;;;;;};specularMap={;;;;;};baseColorMap={;;;;;};bumpMap={;;;;;};specularAmountMap={;;;;;};normalMap={;;;;;};clearcoatNormalMap={;;;;;};opacityMap={;;;;;};roughnessMap={;;;;;};metalnessMap={;;;;;};occlusionMap={;;;;;};translucencyMap={;;;;;};heightMap={;;;;;};clearcoatMap={;;;;;};clearcoatRoughnessMap={;;;;;};transmissionMap={;;;;;};thicknessMap={;;;;;};opacityMap_channel=R;roughnessMap_channel=R;metalnessMap_channel=R;occlusionMap_channel=R;translucencyMap_channel=R;heightMap_channel=R;clearcoatMap_channel=R;clearcoatRoughnessMap_channel=R;transmissionMap_channel=R;thicknessMap_channel=R;baseColorMap_channel=R;specularAmountMap_channel=R;=R;boneCount=0;alphaMode=Default;;vertexAttributes={position=true;normal=true;texcoord0=true;;;;;}};targetCount=0;targetPositionOffset=255;targetNormalOffset=255;targetTangentOffset=255;targetBinormalOffset=255;targetTexCoord0Offset=255;targetTexCoord1Offset=255;targetColorOffset=255;debugMode=0;viewCount=1 3 #define texture2D texture 4 #define QSHADER_VIEW_COUNT 1 5 #define QSSG_ENABLE_LIGHT_PROBE 0 6 #define QSSG_ENABLE_IBL_ORIENTATION 0 7 #define QSSG_ENABLE_SSM 0 8 #define QSSG_ENABLE_SSAO 0 9 #define QSSG_ENABLE_DEPTH_PASS 0 10 #define QSSG_ENABLE_ORTHO_SHADOW_PASS 0 11 #define QSSG_ENABLE_PERSPECTIVE_SHADOW_PASS 0 12 #define QSSG_ENABLE_LINEAR_TONEMAPPING 1 13 #define QSSG_ENABLE_ACES_TONEMAPPING 0 14 #define QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 0 15 #define QSSG_ENABLE_FILMIC_TONEMAPPING 0 16 #define QSSG_ENABLE_RGBE_LIGHT_PROBE 0 17 #define QSSG_ENABLE_OPAQUE_DEPTH_PRE_PASS 0 18 #define QSSG_ENABLE_REFLECTION_PROBE 0 19 #define QSSG_REDUCE_MAX_NUM_LIGHTS 0 20 #define QSSG_ENABLE_LIGHTMAP 0 21 #define QSSG_DISABLE_MULTIVIEW 0 22 #define QSSG_FORCE_IBL_EXPOSURE 0 23 24 layout(location = 0) in vec3 attr_norm; 25 layout(location = 1) in vec3 attr_pos; 26 layout(location = 2) in vec2 attr_uv0; 27 28 29 layout(binding = 3) uniform sampler2D qt_DiffuseMap_sampler; 30 layout(std140, binding = 0) uniform cbMain { 31 vec3 qt_cameraPosition; 32 vec3 qt_light_ambient_total; 33 vec4 qt_material_base_color; 34 float qt_material_clearcoat_fresnel_power; 35 float qt_material_clearcoat_normal_strength; 36 vec3 qt_material_emissive_color; 37 vec4 qt_material_properties; 38 vec4 qt_material_properties2; 39 vec4 qt_material_properties3; 40 vec4 qt_material_specular; 41 mat4 qt_modelMatrix; 42 mat4 qt_modelViewProjection; 43 mat3 qt_normalMatrix; 44 vec4 qt_rhi_properties; 45 mat4 qt_viewMatrix; 46 }; 47 48 49 50 51 layout(location = 0) out vec3 qt_varNormal; 52 layout(location = 1) out vec2 qt_varTexCoord0; 53 layout(location = 2) out vec3 qt_varWorldPos; 54 55 void main() 56 { 57 vec4 qt_vertPosition = vec4(attr_pos, 1.0); 58 vec3 qt_vertNormal = vec3(0.0); 59 vec3 qt_vertTangent = vec3(0.0); 60 vec3 qt_vertBinormal = vec3(0.0); 61 vec2 qt_vertUV0 = vec2(0.0); 62 qt_vertNormal = attr_norm; 63 qt_vertUV0 = attr_uv0; 64 vec3 qt_uTransform; 65 vec3 qt_vTransform; 66 gl_Position = qt_modelViewProjection * qt_vertPosition; 67 vec3 qt_local_model_world_position = (qt_modelMatrix * qt_vertPosition).xyz; 68 qt_varWorldPos = qt_local_model_world_position; 69 vec3 qt_world_normal = normalize(qt_normalMatrix * qt_vertNormal); 70 qt_varNormal = qt_world_normal; 71 qt_varTexCoord0 = qt_vertUV0; 72 } 73 ***** FRAGMENT SHADER: ***** 1 #version 440 2 //Shader name -mesh default material pipeline-- ;hasLighting=true;lightCount=3;light2HasPosition=true;light0ShadowMapSize=256;light1ShadowMapSize=256;light2ShadowMapSize=256;light3ShadowMapSize=0;light4ShadowMapSize=0;light5ShadowMapSize=0;light6ShadowMapSize=0;light7ShadowMapSize=0;light8ShadowMapSize=0;light9ShadowMapSize=0;light10ShadowMapSize=0;light11ShadowMapSize=0;light12ShadowMapSize=0;light13ShadowMapSize=0;light14ShadowMapSize=0;light0SoftShadowQuality=1;light1SoftShadowQuality=1;light2SoftShadowQuality=1;light3SoftShadowQuality=0;light4SoftShadowQuality=0;light5SoftShadowQuality=0;light6SoftShadowQuality=0;light7SoftShadowQuality=0;light8SoftShadowQuality=0;light9SoftShadowQuality=0;light10SoftShadowQuality=0;light11SoftShadowQuality=0;light12SoftShadowQuality=0;light13SoftShadowQuality=0;light14SoftShadowQuality=0;vertexColorRedMask=0;vertexColorGreenMask=0;vertexColorBlueMask=0;vertexColorAlphaMask=0;specularModel=Default;;diffuseMap={enabled=true;;;identity=true;;};emissiveMap={;;;;;};specularMap={;;;;;};baseColorMap={;;;;;};bumpMap={;;;;;};specularAmountMap={;;;;;};normalMap={;;;;;};clearcoatNormalMap={;;;;;};opacityMap={;;;;;};roughnessMap={;;;;;};metalnessMap={;;;;;};occlusionMap={;;;;;};translucencyMap={;;;;;};heightMap={;;;;;};clearcoatMap={;;;;;};clearcoatRoughnessMap={;;;;;};transmissionMap={;;;;;};thicknessMap={;;;;;};opacityMap_channel=R;roughnessMap_channel=R;metalnessMap_channel=R;occlusionMap_channel=R;translucencyMap_channel=R;heightMap_channel=R;clearcoatMap_channel=R;clearcoatRoughnessMap_channel=R;transmissionMap_channel=R;thicknessMap_channel=R;baseColorMap_channel=R;specularAmountMap_channel=R;=R;boneCount=0;alphaMode=Default;;vertexAttributes={position=true;normal=true;texcoord0=true;;;;;}};targetCount=0;targetPositionOffset=255;targetNormalOffset=255;targetTangentOffset=255;targetBinormalOffset=255;targetTexCoord0Offset=255;targetTexCoord1Offset=255;targetColorOffset=255;debugMode=0;viewCount=1 3 #define texture2D texture 4 #define QSHADER_VIEW_COUNT 1 5 #define QSSG_ENABLE_LIGHT_PROBE 0 6 #define QSSG_ENABLE_IBL_ORIENTATION 0 7 #define QSSG_ENABLE_SSM 0 8 #define QSSG_ENABLE_SSAO 0 9 #define QSSG_ENABLE_DEPTH_PASS 0 10 #define QSSG_ENABLE_ORTHO_SHADOW_PASS 0 11 #define QSSG_ENABLE_PERSPECTIVE_SHADOW_PASS 0 12 #define QSSG_ENABLE_LINEAR_TONEMAPPING 1 13 #define QSSG_ENABLE_ACES_TONEMAPPING 0 14 #define QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 0 15 #define QSSG_ENABLE_FILMIC_TONEMAPPING 0 16 #define QSSG_ENABLE_RGBE_LIGHT_PROBE 0 17 #define QSSG_ENABLE_OPAQUE_DEPTH_PRE_PASS 0 18 #define QSSG_ENABLE_REFLECTION_PROBE 0 19 #define QSSG_REDUCE_MAX_NUM_LIGHTS 0 20 #define QSSG_ENABLE_LIGHTMAP 0 21 #define QSSG_DISABLE_MULTIVIEW 0 22 #define QSSG_FORCE_IBL_EXPOSURE 0 23 layout(location = 0) out vec4 fragOutput; 24 25 26 layout(location = 0) in vec3 qt_varNormal; 27 layout(location = 1) in vec2 qt_varTexCoord0; 28 layout(location = 2) in vec3 qt_varWorldPos; 29 30 31 layout(binding = 3) uniform sampler2D qt_DiffuseMap_sampler; 32 layout(std140, binding = 0) uniform cbMain { 33 vec3 qt_cameraPosition; 34 vec3 qt_light_ambient_total; 35 vec4 qt_material_base_color; 36 float qt_material_clearcoat_fresnel_power; 37 float qt_material_clearcoat_normal_strength; 38 vec3 qt_material_emissive_color; 39 vec4 qt_material_properties; 40 vec4 qt_material_properties2; 41 vec4 qt_material_properties3; 42 vec4 qt_material_specular; 43 mat4 qt_modelMatrix; 44 mat4 qt_modelViewProjection; 45 mat3 qt_normalMatrix; 46 vec4 qt_rhi_properties; 47 mat4 qt_viewMatrix; 48 }; 49 50 51 52 53 // begin "funccalculatePointLightAttenuation.glsllib" 54 // Copyright (C) 2023 The Qt Company Ltd. 55 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only 56 57 float qt_calculatePointLightAttenuation(vec3 attenuationConstants, float lightDistance) 58 { 59 return 1.0 / (attenuationConstants.x + attenuationConstants.y * lightDistance 60 + attenuationConstants.z * lightDistance * lightDistance); 61 } 62 63 // end "funccalculatePointLightAttenuation.glsllib" 64 65 66 // begin "funcdiffuseReflectionBSDF.glsllib" 67 // Copyright (C) 2023 The Qt Company Ltd. 68 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only 69 70 // All our vectors have been normalized 71 vec4 qt_diffuseReflectionBSDF(in vec3 N, in vec3 L, in vec3 lightDiffuse) 72 { 73 float factor = max(0.0, dot(N, L)); 74 return vec4(factor * lightDiffuse, 1.0); 75 } 76 77 // end "funcdiffuseReflectionBSDF.glsllib" 78 79 80 // begin "funcsampleLightVars.glsllib" 81 // Copyright (C) 2023 The Qt Company Ltd. 82 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only 83 84 // RHI version, note the explicit binding (1) 85 86 #if QSSG_REDUCE_MAX_NUM_LIGHTS 87 #define MAX_NUM_LIGHTS 5 88 #else 89 #define MAX_NUM_LIGHTS 15 90 #endif 91 92 #define MAX_NUM_SHADOWS 8 93 94 struct LightSource 95 { 96 vec4 position; 97 vec4 direction; // Specifies the light direction in world coordinates. 98 vec4 diffuse; 99 vec4 specular; 100 float coneAngle; // Specifies the intensity distribution of the light. 101 float innerConeAngle; // Specifies the maximum spread angle of the light. 102 float constantAttenuation; // Specifies the constant light attenuation factor. 103 float linearAttenuation; // Specifies the linear light attenuation factor. 104 float quadraticAttenuation; // Specifies the quadratic light attenuation factor. 105 }; 106 107 struct ShadowData { 108 mat4 matrices[4]; 109 vec4 dimensionsInverted[4]; // (x, y, z, 0) 110 vec4 csmSplits; 111 vec4 csmActive; 112 113 float bias; 114 float factor; 115 float isYUp; // 1.0 = true, 0.0 = false 116 float clipNear; // Used for Point light + Spot light 117 118 float shadowMapFar; // Used for Point light + Spot light 119 int layerIndex; 120 int csmNumSplits; 121 float csmBlendRatio; 122 123 float pcfFactor; 124 }; 125 126 layout (std140, binding = 1) uniform cbLights 127 { 128 int uNumLights; 129 LightSource lights[MAX_NUM_LIGHTS]; 130 } ubLights; 131 132 layout (std140, binding = 2) uniform cbShadows 133 { 134 int uNumShadows; 135 ShadowData shadowData[MAX_NUM_SHADOWS]; 136 } ubShadows; 137 138 // end "funcsampleLightVars.glsllib" 139 140 141 // begin "tonemapping.glsllib" 142 // Copyright (C) 2023 The Qt Company Ltd. 143 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only 144 145 #ifndef TONEMAPPPING_GLSLIB 146 #define TONEMAPPPING_GLSLIB 1 147 148 // This file is also included from the static shader skybox.frag, therefore pay 149 // attention that it should be suitable both as a generator-included and as a 150 // static-shader-included snippet. It may also be included from post-processing 151 // effect fragment shaders. 152 153 // Any changes to the calculations must be reflected in qssgcputonemapper_p.h. 154 155 #ifndef QSSG_ENABLE_LINEAR_TONEMAPPING 156 #define QSSG_ENABLE_LINEAR_TONEMAPPING 0 157 #endif 158 #ifndef QSSG_ENABLE_ACES_TONEMAPPING 159 #define QSSG_ENABLE_ACES_TONEMAPPING 0 160 #endif 161 #ifndef QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 162 #define QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 0 163 #endif 164 #ifndef QSSG_ENABLE_FILMIC_TONEMAPPING 165 #define QSSG_ENABLE_FILMIC_TONEMAPPING 0 166 #endif 167 #ifndef QSSG_FORCE_IBL_EXPOSURE 168 #define QSSG_FORCE_IBL_EXPOSURE 0 169 #endif 170 171 // The following methods are described in this article: 172 // http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html 173 174 // The following 4 methods are the most accurate approximations 175 vec3 qt_linearTosRGB(vec3 color) 176 { 177 vec3 S1 = sqrt(color); 178 vec3 S2 = sqrt(S1); 179 vec3 S3 = sqrt(S2); 180 return 0.585122381 * S1 + 0.783140355 * S2 - 0.368262736 * S3; 181 } 182 183 vec3 qt_sRGBToLinear(vec3 srgbIn) 184 { 185 return srgbIn * (srgbIn * (srgbIn * 0.305306011 + 0.682171111) + 0.012522878); 186 } 187 188 vec4 qt_linearTosRGB(vec4 color) 189 { 190 return vec4(qt_linearTosRGB(color.rgb), color.a); 191 } 192 193 vec4 qt_sRGBToLinear(vec4 srgbIn) 194 { 195 return vec4(qt_sRGBToLinear(srgbIn.rgb), srgbIn.a); 196 } 197 198 const float GAMMA = 2.2; 199 const float INV_GAMMA = 1.0 / GAMMA; 200 201 // The following 4 methods are the fastest, but less accurate 202 203 vec3 qt_linearTosRGBFast(vec3 color) 204 { 205 return pow(color, vec3(INV_GAMMA)); 206 } 207 208 vec3 qt_sRGBToLinearFast(vec3 srgbIn) 209 { 210 return vec3(pow(srgbIn.xyz, vec3(GAMMA))); 211 } 212 213 vec4 qt_linearTosRGBFast(vec4 color) 214 { 215 return vec4(pow(color.rgb, vec3(INV_GAMMA)), color.a); 216 } 217 218 vec4 qt_sRGBToLinearFast(vec4 srgbIn) 219 { 220 return vec4(pow(srgbIn.rgb, vec3(GAMMA)), srgbIn.a); 221 } 222 223 #if QSSG_ENABLE_ACES_TONEMAPPING 224 vec3 qt_toneMapACES(vec3 color) 225 { 226 const float A = 2.51; 227 const float B = 0.03; 228 const float C = 2.43; 229 const float D = 0.59; 230 const float E = 0.14; 231 return qt_linearTosRGB(clamp((color * (A * color + B)) / (color * (C * color + D) + E), 0.0, 1.0)); 232 } 233 #endif 234 235 #if QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 236 vec3 qt_tonemapHejlDawson(vec3 color) 237 { 238 color = max(vec3(0.0), color - vec3(0.004)); 239 return (color * (6.2 * color + 0.5)) / (color * (6.2 * color + 1.7) + 0.06); 240 } 241 #endif 242 243 #if QSSG_ENABLE_FILMIC_TONEMAPPING 244 vec3 qt_toneMapFilmicSub(vec3 color) 245 { 246 const float A = 0.15; 247 const float B = 0.50; 248 const float C = 0.10; 249 const float D = 0.20; 250 const float E = 0.02; 251 const float F = 0.30; 252 return ((color * ( A * color + C * B) + D * E) / (color * (A * color + B) + D * F)) - E / F; 253 } 254 255 vec3 qt_toneMapFilmic(vec3 color) 256 { 257 color = qt_toneMapFilmicSub(color * 2.0); 258 vec3 whiteScale = 1.0 / qt_toneMapFilmicSub(vec3(11.2, 11.2, 11.2)); 259 return qt_linearTosRGB(color * whiteScale); 260 } 261 #endif 262 263 // Call this method to perform tonemapping with the correct tonemapper 264 vec3 qt_tonemap(vec3 color) 265 { 266 // ACES 267 #if QSSG_ENABLE_ACES_TONEMAPPING 268 return qt_toneMapACES(color); 269 #endif 270 // Hejl-Dawson 271 #if QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 272 return qt_tonemapHejlDawson(color); 273 #endif 274 275 // Filmic 276 #if QSSG_ENABLE_FILMIC_TONEMAPPING 277 return qt_toneMapFilmic(color); 278 #endif 279 280 // Linear 281 #if QSSG_ENABLE_LINEAR_TONEMAPPING 282 return qt_linearTosRGB(color); 283 #endif 284 285 return color; 286 } 287 288 vec4 qt_tonemap(vec4 color) 289 { 290 return vec4(qt_tonemap(color.rgb), color.a); 291 } 292 293 vec3 qt_exposure(vec3 color, float exposure) 294 { 295 #if QSSG_ENABLE_ACES_TONEMAPPING || QSSG_ENABLE_HEJLDAWSON_TONEMAPPING || QSSG_ENABLE_FILMIC_TONEMAPPING || QSSG_ENABLE_LINEAR_TONEMAPPING || QSSG_FORCE_IBL_EXPOSURE 296 return vec3(vec3(1.0) - exp(-color * exposure)); 297 #else 298 return color; 299 #endif 300 } 301 302 #endif // TONEMAPPPING_GLSLIB 303 304 // end "tonemapping.glsllib" 305 306 void main() 307 { 308 float qt_objectOpacity = qt_material_properties.a; 309 vec4 qt_vertColorMask = vec4(1.0); 310 vec4 qt_vertColor = vec4(1.0); 311 vec3 qt_uTransform; 312 vec3 qt_vTransform; 313 vec3 qt_view_vector = normalize(qt_cameraPosition - qt_varWorldPos); 314 vec3 qt_world_normal = normalize(qt_varNormal); 315 vec4 qt_diffuseColor = qt_material_base_color * qt_vertColor; 316 vec3 qt_global_emission = qt_material_emissive_color; 317 float qt_iOR = qt_material_specular.w; 318 vec3 tmp_light_color; 319 vec3 qt_specularBase; 320 vec3 qt_specularTint = qt_material_specular.rgb; 321 vec2 qt_texCoord0 = qt_varTexCoord0; 322 vec4 qt_base_texture_color = texture2D(qt_DiffuseMap_sampler, qt_texCoord0); 323 qt_base_texture_color = qt_sRGBToLinear(qt_base_texture_color); 324 qt_diffuseColor *= qt_base_texture_color; 325 float qt_metalnessAmount = qt_material_properties.z; 326 vec4 global_diffuse_light = vec4(0.0); 327 global_diffuse_light = vec4(qt_light_ambient_total.rgb * (1.0 - qt_metalnessAmount) * qt_diffuseColor.rgb, 0.0); 328 vec3 global_specular_light = vec3(0.0); 329 float qt_shadow_map_occl = 1.0; 330 float qt_lightAttenuation = 1.0; 331 float qt_aoFactor; 332 qt_aoFactor = 1.0; 333 float qt_roughnessAmount = qt_material_properties.y; 334 335 #if QSHADER_VIEW_COUNT >= 2 336 float qt_zDepthViewSpace = abs((qt_viewMatrix[0] * vec4(qt_varWorldPos, 1.0)).z); 337 #else 338 float qt_zDepthViewSpace = abs((qt_viewMatrix * vec4(qt_varWorldPos, 1.0)).z); 339 #endif 340 //Light 0 [directional] 341 qt_shadow_map_occl = 1.0; 342 tmp_light_color = ubLights.lights[0].diffuse.rgb * (1.0 - qt_metalnessAmount); 343 global_diffuse_light.rgb += qt_diffuseColor.rgb * qt_shadow_map_occl * qt_diffuseReflectionBSDF(qt_world_normal, -ubLights.lights[0].direction.xyz, tmp_light_color).rgb; 344 345 //Light 1 [directional] 346 qt_shadow_map_occl = 1.0; 347 tmp_light_color = ubLights.lights[1].diffuse.rgb * (1.0 - qt_metalnessAmount); 348 global_diffuse_light.rgb += qt_diffuseColor.rgb * qt_shadow_map_occl * qt_diffuseReflectionBSDF(qt_world_normal, -ubLights.lights[1].direction.xyz, tmp_light_color).rgb; 349 350 //Light 2 [point] 351 qt_shadow_map_occl = 1.0; 352 tmp_light_color = ubLights.lights[2].diffuse.rgb * (1.0 - qt_metalnessAmount); 353 vec3 light2_relativeDirection = qt_varWorldPos - ubLights.lights[2].position.xyz; 354 float light2_distance = length(light2_relativeDirection); 355 vec3 light2_relativeDirection_normalized = light2_relativeDirection / light2_distance; 356 qt_lightAttenuation = qt_calculatePointLightAttenuation(vec3(ubLights.lights[2].constantAttenuation, ubLights.lights[2].linearAttenuation, ubLights.lights[2].quadraticAttenuation), light2_distance); 357 global_diffuse_light.rgb += qt_diffuseColor.rgb * qt_lightAttenuation * qt_shadow_map_occl * qt_diffuseReflectionBSDF(qt_world_normal, -light2_relativeDirection_normalized.xyz, tmp_light_color).rgb; 358 359 global_diffuse_light = vec4(global_diffuse_light.rgb * qt_aoFactor, qt_objectOpacity * qt_diffuseColor.a); 360 vec4 qt_color_sum = vec4(global_diffuse_light.rgb + global_specular_light + qt_global_emission, global_diffuse_light.a); 361 fragOutput = vec4(qt_tonemap(qt_color_sum)); 362 } 363 ***** Compilation for vertex and fragment stages succeeded VERTEX SHADER: ***** 1 #version 440 2 //Shader name -mesh default material pipeline-- ;hasLighting=true;lightCount=3;light2HasPosition=true;light0ShadowMapSize=256;light1ShadowMapSize=256;light2ShadowMapSize=256;light3ShadowMapSize=0;light4ShadowMapSize=0;light5ShadowMapSize=0;light6ShadowMapSize=0;light7ShadowMapSize=0;light8ShadowMapSize=0;light9ShadowMapSize=0;light10ShadowMapSize=0;light11ShadowMapSize=0;light12ShadowMapSize=0;light13ShadowMapSize=0;light14ShadowMapSize=0;light0SoftShadowQuality=1;light1SoftShadowQuality=1;light2SoftShadowQuality=1;light3SoftShadowQuality=0;light4SoftShadowQuality=0;light5SoftShadowQuality=0;light6SoftShadowQuality=0;light7SoftShadowQuality=0;light8SoftShadowQuality=0;light9SoftShadowQuality=0;light10SoftShadowQuality=0;light11SoftShadowQuality=0;light12SoftShadowQuality=0;light13SoftShadowQuality=0;light14SoftShadowQuality=0;vertexColorRedMask=0;vertexColorGreenMask=0;vertexColorBlueMask=0;vertexColorAlphaMask=0;specularModel=Default;;diffuseMap={;;;;;};emissiveMap={;;;;;};specularMap={;;;;;};baseColorMap={;;;;;};bumpMap={;;;;;};specularAmountMap={;;;;;};normalMap={;;;;;};clearcoatNormalMap={;;;;;};opacityMap={;;;;;};roughnessMap={;;;;;};metalnessMap={;;;;;};occlusionMap={;;;;;};translucencyMap={;;;;;};heightMap={;;;;;};clearcoatMap={;;;;;};clearcoatRoughnessMap={;;;;;};transmissionMap={;;;;;};thicknessMap={;;;;;};opacityMap_channel=R;roughnessMap_channel=R;metalnessMap_channel=R;occlusionMap_channel=R;translucencyMap_channel=R;heightMap_channel=R;clearcoatMap_channel=R;clearcoatRoughnessMap_channel=R;transmissionMap_channel=R;thicknessMap_channel=R;baseColorMap_channel=R;specularAmountMap_channel=R;=R;boneCount=0;alphaMode=Default;;vertexAttributes={position=true;normal=true;;;;;;}};targetCount=0;targetPositionOffset=255;targetNormalOffset=255;targetTangentOffset=255;targetBinormalOffset=255;targetTexCoord0Offset=255;targetTexCoord1Offset=255;targetColorOffset=255;debugMode=0;viewCount=1 3 #define texture2D texture 4 #define QSHADER_VIEW_COUNT 1 5 #define QSSG_ENABLE_LIGHT_PROBE 0 6 #define QSSG_ENABLE_IBL_ORIENTATION 0 7 #define QSSG_ENABLE_SSM 0 8 #define QSSG_ENABLE_SSAO 0 9 #define QSSG_ENABLE_DEPTH_PASS 0 10 #define QSSG_ENABLE_ORTHO_SHADOW_PASS 0 11 #define QSSG_ENABLE_PERSPECTIVE_SHADOW_PASS 0 12 #define QSSG_ENABLE_LINEAR_TONEMAPPING 1 13 #define QSSG_ENABLE_ACES_TONEMAPPING 0 14 #define QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 0 15 #define QSSG_ENABLE_FILMIC_TONEMAPPING 0 16 #define QSSG_ENABLE_RGBE_LIGHT_PROBE 0 17 #define QSSG_ENABLE_OPAQUE_DEPTH_PRE_PASS 0 18 #define QSSG_ENABLE_REFLECTION_PROBE 0 19 #define QSSG_REDUCE_MAX_NUM_LIGHTS 0 20 #define QSSG_ENABLE_LIGHTMAP 0 21 #define QSSG_DISABLE_MULTIVIEW 0 22 #define QSSG_FORCE_IBL_EXPOSURE 0 23 24 layout(location = 0) in vec3 attr_norm; 25 layout(location = 1) in vec3 attr_pos; 26 27 28 layout(std140, binding = 0) uniform cbMain { 29 vec3 qt_cameraPosition; 30 vec3 qt_light_ambient_total; 31 vec4 qt_material_base_color; 32 float qt_material_clearcoat_fresnel_power; 33 float qt_material_clearcoat_normal_strength; 34 vec3 qt_material_emissive_color; 35 vec4 qt_material_properties; 36 vec4 qt_material_properties2; 37 vec4 qt_material_properties3; 38 mat4 qt_modelMatrix; 39 mat4 qt_modelViewProjection; 40 mat3 qt_normalMatrix; 41 vec4 qt_rhi_properties; 42 mat4 qt_viewMatrix; 43 }; 44 45 46 47 48 layout(location = 0) out vec3 qt_varNormal; 49 layout(location = 1) out vec3 qt_varWorldPos; 50 51 void main() 52 { 53 vec4 qt_vertPosition = vec4(attr_pos, 1.0); 54 vec3 qt_vertNormal = vec3(0.0); 55 vec3 qt_vertTangent = vec3(0.0); 56 vec3 qt_vertBinormal = vec3(0.0); 57 qt_vertNormal = attr_norm; 58 vec3 qt_uTransform; 59 vec3 qt_vTransform; 60 gl_Position = qt_modelViewProjection * qt_vertPosition; 61 vec3 qt_local_model_world_position = (qt_modelMatrix * qt_vertPosition).xyz; 62 qt_varWorldPos = qt_local_model_world_position; 63 vec3 qt_world_normal = normalize(qt_normalMatrix * qt_vertNormal); 64 qt_varNormal = qt_world_normal; 65 } 66 ***** FRAGMENT SHADER: ***** 1 #version 440 2 //Shader name -mesh default material pipeline-- ;hasLighting=true;lightCount=3;light2HasPosition=true;light0ShadowMapSize=256;light1ShadowMapSize=256;light2ShadowMapSize=256;light3ShadowMapSize=0;light4ShadowMapSize=0;light5ShadowMapSize=0;light6ShadowMapSize=0;light7ShadowMapSize=0;light8ShadowMapSize=0;light9ShadowMapSize=0;light10ShadowMapSize=0;light11ShadowMapSize=0;light12ShadowMapSize=0;light13ShadowMapSize=0;light14ShadowMapSize=0;light0SoftShadowQuality=1;light1SoftShadowQuality=1;light2SoftShadowQuality=1;light3SoftShadowQuality=0;light4SoftShadowQuality=0;light5SoftShadowQuality=0;light6SoftShadowQuality=0;light7SoftShadowQuality=0;light8SoftShadowQuality=0;light9SoftShadowQuality=0;light10SoftShadowQuality=0;light11SoftShadowQuality=0;light12SoftShadowQuality=0;light13SoftShadowQuality=0;light14SoftShadowQuality=0;vertexColorRedMask=0;vertexColorGreenMask=0;vertexColorBlueMask=0;vertexColorAlphaMask=0;specularModel=Default;;diffuseMap={;;;;;};emissiveMap={;;;;;};specularMap={;;;;;};baseColorMap={;;;;;};bumpMap={;;;;;};specularAmountMap={;;;;;};normalMap={;;;;;};clearcoatNormalMap={;;;;;};opacityMap={;;;;;};roughnessMap={;;;;;};metalnessMap={;;;;;};occlusionMap={;;;;;};translucencyMap={;;;;;};heightMap={;;;;;};clearcoatMap={;;;;;};clearcoatRoughnessMap={;;;;;};transmissionMap={;;;;;};thicknessMap={;;;;;};opacityMap_channel=R;roughnessMap_channel=R;metalnessMap_channel=R;occlusionMap_channel=R;translucencyMap_channel=R;heightMap_channel=R;clearcoatMap_channel=R;clearcoatRoughnessMap_channel=R;transmissionMap_channel=R;thicknessMap_channel=R;baseColorMap_channel=R;specularAmountMap_channel=R;=R;boneCount=0;alphaMode=Default;;vertexAttributes={position=true;normal=true;;;;;;}};targetCount=0;targetPositionOffset=255;targetNormalOffset=255;targetTangentOffset=255;targetBinormalOffset=255;targetTexCoord0Offset=255;targetTexCoord1Offset=255;targetColorOffset=255;debugMode=0;viewCount=1 3 #define texture2D texture 4 #define QSHADER_VIEW_COUNT 1 5 #define QSSG_ENABLE_LIGHT_PROBE 0 6 #define QSSG_ENABLE_IBL_ORIENTATION 0 7 #define QSSG_ENABLE_SSM 0 8 #define QSSG_ENABLE_SSAO 0 9 #define QSSG_ENABLE_DEPTH_PASS 0 10 #define QSSG_ENABLE_ORTHO_SHADOW_PASS 0 11 #define QSSG_ENABLE_PERSPECTIVE_SHADOW_PASS 0 12 #define QSSG_ENABLE_LINEAR_TONEMAPPING 1 13 #define QSSG_ENABLE_ACES_TONEMAPPING 0 14 #define QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 0 15 #define QSSG_ENABLE_FILMIC_TONEMAPPING 0 16 #define QSSG_ENABLE_RGBE_LIGHT_PROBE 0 17 #define QSSG_ENABLE_OPAQUE_DEPTH_PRE_PASS 0 18 #define QSSG_ENABLE_REFLECTION_PROBE 0 19 #define QSSG_REDUCE_MAX_NUM_LIGHTS 0 20 #define QSSG_ENABLE_LIGHTMAP 0 21 #define QSSG_DISABLE_MULTIVIEW 0 22 #define QSSG_FORCE_IBL_EXPOSURE 0 23 layout(location = 0) out vec4 fragOutput; 24 25 26 layout(location = 0) in vec3 qt_varNormal; 27 layout(location = 1) in vec3 qt_varWorldPos; 28 29 30 layout(std140, binding = 0) uniform cbMain { 31 vec3 qt_cameraPosition; 32 vec3 qt_light_ambient_total; 33 vec4 qt_material_base_color; 34 float qt_material_clearcoat_fresnel_power; 35 float qt_material_clearcoat_normal_strength; 36 vec3 qt_material_emissive_color; 37 vec4 qt_material_properties; 38 vec4 qt_material_properties2; 39 vec4 qt_material_properties3; 40 mat4 qt_modelMatrix; 41 mat4 qt_modelViewProjection; 42 mat3 qt_normalMatrix; 43 vec4 qt_rhi_properties; 44 mat4 qt_viewMatrix; 45 }; 46 47 48 49 50 // begin "funccalculatePointLightAttenuation.glsllib" 51 // Copyright (C) 2023 The Qt Company Ltd. 52 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only 53 54 float qt_calculatePointLightAttenuation(vec3 attenuationConstants, float lightDistance) 55 { 56 return 1.0 / (attenuationConstants.x + attenuationConstants.y * lightDistance 57 + attenuationConstants.z * lightDistance * lightDistance); 58 } 59 60 // end "funccalculatePointLightAttenuation.glsllib" 61 62 63 // begin "funcdiffuseReflectionBSDF.glsllib" 64 // Copyright (C) 2023 The Qt Company Ltd. 65 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only 66 67 // All our vectors have been normalized 68 vec4 qt_diffuseReflectionBSDF(in vec3 N, in vec3 L, in vec3 lightDiffuse) 69 { 70 float factor = max(0.0, dot(N, L)); 71 return vec4(factor * lightDiffuse, 1.0); 72 } 73 74 // end "funcdiffuseReflectionBSDF.glsllib" 75 76 77 // begin "funcsampleLightVars.glsllib" 78 // Copyright (C) 2023 The Qt Company Ltd. 79 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only 80 81 // RHI version, note the explicit binding (1) 82 83 #if QSSG_REDUCE_MAX_NUM_LIGHTS 84 #define MAX_NUM_LIGHTS 5 85 #else 86 #define MAX_NUM_LIGHTS 15 87 #endif 88 89 #define MAX_NUM_SHADOWS 8 90 91 struct LightSource 92 { 93 vec4 position; 94 vec4 direction; // Specifies the light direction in world coordinates. 95 vec4 diffuse; 96 vec4 specular; 97 float coneAngle; // Specifies the intensity distribution of the light. 98 float innerConeAngle; // Specifies the maximum spread angle of the light. 99 float constantAttenuation; // Specifies the constant light attenuation factor. 100 float linearAttenuation; // Specifies the linear light attenuation factor. 101 float quadraticAttenuation; // Specifies the quadratic light attenuation factor. 102 }; 103 104 struct ShadowData { 105 mat4 matrices[4]; 106 vec4 dimensionsInverted[4]; // (x, y, z, 0) 107 vec4 csmSplits; 108 vec4 csmActive; 109 110 float bias; 111 float factor; 112 float isYUp; // 1.0 = true, 0.0 = false 113 float clipNear; // Used for Point light + Spot light 114 115 float shadowMapFar; // Used for Point light + Spot light 116 int layerIndex; 117 int csmNumSplits; 118 float csmBlendRatio; 119 120 float pcfFactor; 121 }; 122 123 layout (std140, binding = 1) uniform cbLights 124 { 125 int uNumLights; 126 LightSource lights[MAX_NUM_LIGHTS]; 127 } ubLights; 128 129 layout (std140, binding = 2) uniform cbShadows 130 { 131 int uNumShadows; 132 ShadowData shadowData[MAX_NUM_SHADOWS]; 133 } ubShadows; 134 135 // end "funcsampleLightVars.glsllib" 136 137 138 // begin "tonemapping.glsllib" 139 // Copyright (C) 2023 The Qt Company Ltd. 140 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only 141 142 #ifndef TONEMAPPPING_GLSLIB 143 #define TONEMAPPPING_GLSLIB 1 144 145 // This file is also included from the static shader skybox.frag, therefore pay 146 // attention that it should be suitable both as a generator-included and as a 147 // static-shader-included snippet. It may also be included from post-processing 148 // effect fragment shaders. 149 150 // Any changes to the calculations must be reflected in qssgcputonemapper_p.h. 151 152 #ifndef QSSG_ENABLE_LINEAR_TONEMAPPING 153 #define QSSG_ENABLE_LINEAR_TONEMAPPING 0 154 #endif 155 #ifndef QSSG_ENABLE_ACES_TONEMAPPING 156 #define QSSG_ENABLE_ACES_TONEMAPPING 0 157 #endif 158 #ifndef QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 159 #define QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 0 160 #endif 161 #ifndef QSSG_ENABLE_FILMIC_TONEMAPPING 162 #define QSSG_ENABLE_FILMIC_TONEMAPPING 0 163 #endif 164 #ifndef QSSG_FORCE_IBL_EXPOSURE 165 #define QSSG_FORCE_IBL_EXPOSURE 0 166 #endif 167 168 // The following methods are described in this article: 169 // http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html 170 171 // The following 4 methods are the most accurate approximations 172 vec3 qt_linearTosRGB(vec3 color) 173 { 174 vec3 S1 = sqrt(color); 175 vec3 S2 = sqrt(S1); 176 vec3 S3 = sqrt(S2); 177 return 0.585122381 * S1 + 0.783140355 * S2 - 0.368262736 * S3; 178 } 179 180 vec3 qt_sRGBToLinear(vec3 srgbIn) 181 { 182 return srgbIn * (srgbIn * (srgbIn * 0.305306011 + 0.682171111) + 0.012522878); 183 } 184 185 vec4 qt_linearTosRGB(vec4 color) 186 { 187 return vec4(qt_linearTosRGB(color.rgb), color.a); 188 } 189 190 vec4 qt_sRGBToLinear(vec4 srgbIn) 191 { 192 return vec4(qt_sRGBToLinear(srgbIn.rgb), srgbIn.a); 193 } 194 195 const float GAMMA = 2.2; 196 const float INV_GAMMA = 1.0 / GAMMA; 197 198 // The following 4 methods are the fastest, but less accurate 199 200 vec3 qt_linearTosRGBFast(vec3 color) 201 { 202 return pow(color, vec3(INV_GAMMA)); 203 } 204 205 vec3 qt_sRGBToLinearFast(vec3 srgbIn) 206 { 207 return vec3(pow(srgbIn.xyz, vec3(GAMMA))); 208 } 209 210 vec4 qt_linearTosRGBFast(vec4 color) 211 { 212 return vec4(pow(color.rgb, vec3(INV_GAMMA)), color.a); 213 } 214 215 vec4 qt_sRGBToLinearFast(vec4 srgbIn) 216 { 217 return vec4(pow(srgbIn.rgb, vec3(GAMMA)), srgbIn.a); 218 } 219 220 #if QSSG_ENABLE_ACES_TONEMAPPING 221 vec3 qt_toneMapACES(vec3 color) 222 { 223 const float A = 2.51; 224 const float B = 0.03; 225 const float C = 2.43; 226 const float D = 0.59; 227 const float E = 0.14; 228 return qt_linearTosRGB(clamp((color * (A * color + B)) / (color * (C * color + D) + E), 0.0, 1.0)); 229 } 230 #endif 231 232 #if QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 233 vec3 qt_tonemapHejlDawson(vec3 color) 234 { 235 color = max(vec3(0.0), color - vec3(0.004)); 236 return (color * (6.2 * color + 0.5)) / (color * (6.2 * color + 1.7) + 0.06); 237 } 238 #endif 239 240 #if QSSG_ENABLE_FILMIC_TONEMAPPING 241 vec3 qt_toneMapFilmicSub(vec3 color) 242 { 243 const float A = 0.15; 244 const float B = 0.50; 245 const float C = 0.10; 246 const float D = 0.20; 247 const float E = 0.02; 248 const float F = 0.30; 249 return ((color * ( A * color + C * B) + D * E) / (color * (A * color + B) + D * F)) - E / F; 250 } 251 252 vec3 qt_toneMapFilmic(vec3 color) 253 { 254 color = qt_toneMapFilmicSub(color * 2.0); 255 vec3 whiteScale = 1.0 / qt_toneMapFilmicSub(vec3(11.2, 11.2, 11.2)); 256 return qt_linearTosRGB(color * whiteScale); 257 } 258 #endif 259 260 // Call this method to perform tonemapping with the correct tonemapper 261 vec3 qt_tonemap(vec3 color) 262 { 263 // ACES 264 #if QSSG_ENABLE_ACES_TONEMAPPING 265 return qt_toneMapACES(color); 266 #endif 267 // Hejl-Dawson 268 #if QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 269 return qt_tonemapHejlDawson(color); 270 #endif 271 272 // Filmic 273 #if QSSG_ENABLE_FILMIC_TONEMAPPING 274 return qt_toneMapFilmic(color); 275 #endif 276 277 // Linear 278 #if QSSG_ENABLE_LINEAR_TONEMAPPING 279 return qt_linearTosRGB(color); 280 #endif 281 282 return color; 283 } 284 285 vec4 qt_tonemap(vec4 color) 286 { 287 return vec4(qt_tonemap(color.rgb), color.a); 288 } 289 290 vec3 qt_exposure(vec3 color, float exposure) 291 { 292 #if QSSG_ENABLE_ACES_TONEMAPPING || QSSG_ENABLE_HEJLDAWSON_TONEMAPPING || QSSG_ENABLE_FILMIC_TONEMAPPING || QSSG_ENABLE_LINEAR_TONEMAPPING || QSSG_FORCE_IBL_EXPOSURE 293 return vec3(vec3(1.0) - exp(-color * exposure)); 294 #else 295 return color; 296 #endif 297 } 298 299 #endif // TONEMAPPPING_GLSLIB 300 301 // end "tonemapping.glsllib" 302 303 void main() 304 { 305 float qt_objectOpacity = qt_material_properties.a; 306 vec4 qt_vertColorMask = vec4(1.0); 307 vec4 qt_vertColor = vec4(1.0); 308 vec3 qt_view_vector = normalize(qt_cameraPosition - qt_varWorldPos); 309 vec3 qt_world_normal = normalize(qt_varNormal); 310 vec4 qt_diffuseColor = qt_material_base_color * qt_vertColor; 311 vec3 qt_global_emission = qt_material_emissive_color; 312 vec3 tmp_light_color; 313 float qt_metalnessAmount = qt_material_properties.z; 314 vec4 global_diffuse_light = vec4(0.0); 315 global_diffuse_light = vec4(qt_light_ambient_total.rgb * (1.0 - qt_metalnessAmount) * qt_diffuseColor.rgb, 0.0); 316 vec3 global_specular_light = vec3(0.0); 317 float qt_shadow_map_occl = 1.0; 318 float qt_lightAttenuation = 1.0; 319 float qt_aoFactor; 320 qt_aoFactor = 1.0; 321 float qt_roughnessAmount = qt_material_properties.y; 322 323 #if QSHADER_VIEW_COUNT >= 2 324 float qt_zDepthViewSpace = abs((qt_viewMatrix[0] * vec4(qt_varWorldPos, 1.0)).z); 325 #else 326 float qt_zDepthViewSpace = abs((qt_viewMatrix * vec4(qt_varWorldPos, 1.0)).z); 327 #endif 328 //Light 0 [directional] 329 qt_shadow_map_occl = 1.0; 330 tmp_light_color = ubLights.lights[0].diffuse.rgb * (1.0 - qt_metalnessAmount); 331 global_diffuse_light.rgb += qt_diffuseColor.rgb * qt_shadow_map_occl * qt_diffuseReflectionBSDF(qt_world_normal, -ubLights.lights[0].direction.xyz, tmp_light_color).rgb; 332 333 //Light 1 [directional] 334 qt_shadow_map_occl = 1.0; 335 tmp_light_color = ubLights.lights[1].diffuse.rgb * (1.0 - qt_metalnessAmount); 336 global_diffuse_light.rgb += qt_diffuseColor.rgb * qt_shadow_map_occl * qt_diffuseReflectionBSDF(qt_world_normal, -ubLights.lights[1].direction.xyz, tmp_light_color).rgb; 337 338 //Light 2 [point] 339 qt_shadow_map_occl = 1.0; 340 tmp_light_color = ubLights.lights[2].diffuse.rgb * (1.0 - qt_metalnessAmount); 341 vec3 light2_relativeDirection = qt_varWorldPos - ubLights.lights[2].position.xyz; 342 float light2_distance = length(light2_relativeDirection); 343 vec3 light2_relativeDirection_normalized = light2_relativeDirection / light2_distance; 344 qt_lightAttenuation = qt_calculatePointLightAttenuation(vec3(ubLights.lights[2].constantAttenuation, ubLights.lights[2].linearAttenuation, ubLights.lights[2].quadraticAttenuation), light2_distance); 345 global_diffuse_light.rgb += qt_diffuseColor.rgb * qt_lightAttenuation * qt_shadow_map_occl * qt_diffuseReflectionBSDF(qt_world_normal, -light2_relativeDirection_normalized.xyz, tmp_light_color).rgb; 346 347 global_diffuse_light = vec4(global_diffuse_light.rgb * qt_aoFactor, qt_objectOpacity * qt_diffuseColor.a); 348 vec4 qt_color_sum = vec4(global_diffuse_light.rgb + global_specular_light + qt_global_emission, global_diffuse_light.a); 349 fragOutput = vec4(qt_tonemap(qt_color_sum)); 350 } 351 ***** Compilation for vertex and fragment stages succeeded VERTEX SHADER: ***** 1 #version 440 2 //Shader name -mesh default material pipeline-- ;hasLighting=true;lightCount=3;light2HasPosition=true;light0ShadowMapSize=256;light1ShadowMapSize=256;light2ShadowMapSize=256;light3ShadowMapSize=0;light4ShadowMapSize=0;light5ShadowMapSize=0;light6ShadowMapSize=0;light7ShadowMapSize=0;light8ShadowMapSize=0;light9ShadowMapSize=0;light10ShadowMapSize=0;light11ShadowMapSize=0;light12ShadowMapSize=0;light13ShadowMapSize=0;light14ShadowMapSize=0;light0SoftShadowQuality=1;light1SoftShadowQuality=1;light2SoftShadowQuality=1;light3SoftShadowQuality=0;light4SoftShadowQuality=0;light5SoftShadowQuality=0;light6SoftShadowQuality=0;light7SoftShadowQuality=0;light8SoftShadowQuality=0;light9SoftShadowQuality=0;light10SoftShadowQuality=0;light11SoftShadowQuality=0;light12SoftShadowQuality=0;light13SoftShadowQuality=0;light14SoftShadowQuality=0;vertexColorRedMask=0;vertexColorGreenMask=0;vertexColorBlueMask=0;vertexColorAlphaMask=0;specularModel=Default;;diffuseMap={;;;;;};emissiveMap={;;;;;};specularMap={;;;;;};baseColorMap={;;;;;};bumpMap={;;;;;};specularAmountMap={;;;;;};normalMap={;;;;;};clearcoatNormalMap={;;;;;};opacityMap={;;;;;};roughnessMap={;;;;;};metalnessMap={;;;;;};occlusionMap={;;;;;};translucencyMap={;;;;;};heightMap={;;;;;};clearcoatMap={;;;;;};clearcoatRoughnessMap={;;;;;};transmissionMap={;;;;;};thicknessMap={;;;;;};opacityMap_channel=R;roughnessMap_channel=R;metalnessMap_channel=R;occlusionMap_channel=R;translucencyMap_channel=R;heightMap_channel=R;clearcoatMap_channel=R;clearcoatRoughnessMap_channel=R;transmissionMap_channel=R;thicknessMap_channel=R;baseColorMap_channel=R;specularAmountMap_channel=R;=R;boneCount=0;alphaMode=Default;;vertexAttributes={position=true;normal=true;texcoord0=true;;;;;}};targetCount=0;targetPositionOffset=255;targetNormalOffset=255;targetTangentOffset=255;targetBinormalOffset=255;targetTexCoord0Offset=255;targetTexCoord1Offset=255;targetColorOffset=255;debugMode=0;viewCount=1 3 #define texture2D texture 4 #define QSHADER_VIEW_COUNT 1 5 #define QSSG_ENABLE_LIGHT_PROBE 0 6 #define QSSG_ENABLE_IBL_ORIENTATION 0 7 #define QSSG_ENABLE_SSM 0 8 #define QSSG_ENABLE_SSAO 0 9 #define QSSG_ENABLE_DEPTH_PASS 0 10 #define QSSG_ENABLE_ORTHO_SHADOW_PASS 0 11 #define QSSG_ENABLE_PERSPECTIVE_SHADOW_PASS 0 12 #define QSSG_ENABLE_LINEAR_TONEMAPPING 1 13 #define QSSG_ENABLE_ACES_TONEMAPPING 0 14 #define QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 0 15 #define QSSG_ENABLE_FILMIC_TONEMAPPING 0 16 #define QSSG_ENABLE_RGBE_LIGHT_PROBE 0 17 #define QSSG_ENABLE_OPAQUE_DEPTH_PRE_PASS 0 18 #define QSSG_ENABLE_REFLECTION_PROBE 0 19 #define QSSG_REDUCE_MAX_NUM_LIGHTS 0 20 #define QSSG_ENABLE_LIGHTMAP 0 21 #define QSSG_DISABLE_MULTIVIEW 0 22 #define QSSG_FORCE_IBL_EXPOSURE 0 23 24 layout(location = 0) in vec3 attr_norm; 25 layout(location = 1) in vec3 attr_pos; 26 layout(location = 2) in vec2 attr_uv0; 27 28 29 layout(std140, binding = 0) uniform cbMain { 30 vec3 qt_cameraPosition; 31 vec3 qt_light_ambient_total; 32 vec4 qt_material_base_color; 33 float qt_material_clearcoat_fresnel_power; 34 float qt_material_clearcoat_normal_strength; 35 vec3 qt_material_emissive_color; 36 vec4 qt_material_properties; 37 vec4 qt_material_properties2; 38 vec4 qt_material_properties3; 39 mat4 qt_modelMatrix; 40 mat4 qt_modelViewProjection; 41 mat3 qt_normalMatrix; 42 vec4 qt_rhi_properties; 43 mat4 qt_viewMatrix; 44 }; 45 46 47 48 49 layout(location = 0) out vec3 qt_varNormal; 50 layout(location = 1) out vec3 qt_varWorldPos; 51 52 void main() 53 { 54 vec4 qt_vertPosition = vec4(attr_pos, 1.0); 55 vec3 qt_vertNormal = vec3(0.0); 56 vec3 qt_vertTangent = vec3(0.0); 57 vec3 qt_vertBinormal = vec3(0.0); 58 vec2 qt_vertUV0 = vec2(0.0); 59 qt_vertNormal = attr_norm; 60 qt_vertUV0 = attr_uv0; 61 vec3 qt_uTransform; 62 vec3 qt_vTransform; 63 gl_Position = qt_modelViewProjection * qt_vertPosition; 64 vec3 qt_local_model_world_position = (qt_modelMatrix * qt_vertPosition).xyz; 65 qt_varWorldPos = qt_local_model_world_position; 66 vec3 qt_world_normal = normalize(qt_normalMatrix * qt_vertNormal); 67 qt_varNormal = qt_world_normal; 68 } 69 ***** FRAGMENT SHADER: ***** 1 #version 440 2 //Shader name -mesh default material pipeline-- ;hasLighting=true;lightCount=3;light2HasPosition=true;light0ShadowMapSize=256;light1ShadowMapSize=256;light2ShadowMapSize=256;light3ShadowMapSize=0;light4ShadowMapSize=0;light5ShadowMapSize=0;light6ShadowMapSize=0;light7ShadowMapSize=0;light8ShadowMapSize=0;light9ShadowMapSize=0;light10ShadowMapSize=0;light11ShadowMapSize=0;light12ShadowMapSize=0;light13ShadowMapSize=0;light14ShadowMapSize=0;light0SoftShadowQuality=1;light1SoftShadowQuality=1;light2SoftShadowQuality=1;light3SoftShadowQuality=0;light4SoftShadowQuality=0;light5SoftShadowQuality=0;light6SoftShadowQuality=0;light7SoftShadowQuality=0;light8SoftShadowQuality=0;light9SoftShadowQuality=0;light10SoftShadowQuality=0;light11SoftShadowQuality=0;light12SoftShadowQuality=0;light13SoftShadowQuality=0;light14SoftShadowQuality=0;vertexColorRedMask=0;vertexColorGreenMask=0;vertexColorBlueMask=0;vertexColorAlphaMask=0;specularModel=Default;;diffuseMap={;;;;;};emissiveMap={;;;;;};specularMap={;;;;;};baseColorMap={;;;;;};bumpMap={;;;;;};specularAmountMap={;;;;;};normalMap={;;;;;};clearcoatNormalMap={;;;;;};opacityMap={;;;;;};roughnessMap={;;;;;};metalnessMap={;;;;;};occlusionMap={;;;;;};translucencyMap={;;;;;};heightMap={;;;;;};clearcoatMap={;;;;;};clearcoatRoughnessMap={;;;;;};transmissionMap={;;;;;};thicknessMap={;;;;;};opacityMap_channel=R;roughnessMap_channel=R;metalnessMap_channel=R;occlusionMap_channel=R;translucencyMap_channel=R;heightMap_channel=R;clearcoatMap_channel=R;clearcoatRoughnessMap_channel=R;transmissionMap_channel=R;thicknessMap_channel=R;baseColorMap_channel=R;specularAmountMap_channel=R;=R;boneCount=0;alphaMode=Default;;vertexAttributes={position=true;normal=true;texcoord0=true;;;;;}};targetCount=0;targetPositionOffset=255;targetNormalOffset=255;targetTangentOffset=255;targetBinormalOffset=255;targetTexCoord0Offset=255;targetTexCoord1Offset=255;targetColorOffset=255;debugMode=0;viewCount=1 3 #define texture2D texture 4 #define QSHADER_VIEW_COUNT 1 5 #define QSSG_ENABLE_LIGHT_PROBE 0 6 #define QSSG_ENABLE_IBL_ORIENTATION 0 7 #define QSSG_ENABLE_SSM 0 8 #define QSSG_ENABLE_SSAO 0 9 #define QSSG_ENABLE_DEPTH_PASS 0 10 #define QSSG_ENABLE_ORTHO_SHADOW_PASS 0 11 #define QSSG_ENABLE_PERSPECTIVE_SHADOW_PASS 0 12 #define QSSG_ENABLE_LINEAR_TONEMAPPING 1 13 #define QSSG_ENABLE_ACES_TONEMAPPING 0 14 #define QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 0 15 #define QSSG_ENABLE_FILMIC_TONEMAPPING 0 16 #define QSSG_ENABLE_RGBE_LIGHT_PROBE 0 17 #define QSSG_ENABLE_OPAQUE_DEPTH_PRE_PASS 0 18 #define QSSG_ENABLE_REFLECTION_PROBE 0 19 #define QSSG_REDUCE_MAX_NUM_LIGHTS 0 20 #define QSSG_ENABLE_LIGHTMAP 0 21 #define QSSG_DISABLE_MULTIVIEW 0 22 #define QSSG_FORCE_IBL_EXPOSURE 0 23 layout(location = 0) out vec4 fragOutput; 24 25 26 layout(location = 0) in vec3 qt_varNormal; 27 layout(location = 1) in vec3 qt_varWorldPos; 28 29 30 layout(std140, binding = 0) uniform cbMain { 31 vec3 qt_cameraPosition; 32 vec3 qt_light_ambient_total; 33 vec4 qt_material_base_color; 34 float qt_material_clearcoat_fresnel_power; 35 float qt_material_clearcoat_normal_strength; 36 vec3 qt_material_emissive_color; 37 vec4 qt_material_properties; 38 vec4 qt_material_properties2; 39 vec4 qt_material_properties3; 40 mat4 qt_modelMatrix; 41 mat4 qt_modelViewProjection; 42 mat3 qt_normalMatrix; 43 vec4 qt_rhi_properties; 44 mat4 qt_viewMatrix; 45 }; 46 47 48 49 50 // begin "funccalculatePointLightAttenuation.glsllib" 51 // Copyright (C) 2023 The Qt Company Ltd. 52 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only 53 54 float qt_calculatePointLightAttenuation(vec3 attenuationConstants, float lightDistance) 55 { 56 return 1.0 / (attenuationConstants.x + attenuationConstants.y * lightDistance 57 + attenuationConstants.z * lightDistance * lightDistance); 58 } 59 60 // end "funccalculatePointLightAttenuation.glsllib" 61 62 63 // begin "funcdiffuseReflectionBSDF.glsllib" 64 // Copyright (C) 2023 The Qt Company Ltd. 65 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only 66 67 // All our vectors have been normalized 68 vec4 qt_diffuseReflectionBSDF(in vec3 N, in vec3 L, in vec3 lightDiffuse) 69 { 70 float factor = max(0.0, dot(N, L)); 71 return vec4(factor * lightDiffuse, 1.0); 72 } 73 74 // end "funcdiffuseReflectionBSDF.glsllib" 75 76 77 // begin "funcsampleLightVars.glsllib" 78 // Copyright (C) 2023 The Qt Company Ltd. 79 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only 80 81 // RHI version, note the explicit binding (1) 82 83 #if QSSG_REDUCE_MAX_NUM_LIGHTS 84 #define MAX_NUM_LIGHTS 5 85 #else 86 #define MAX_NUM_LIGHTS 15 87 #endif 88 89 #define MAX_NUM_SHADOWS 8 90 91 struct LightSource 92 { 93 vec4 position; 94 vec4 direction; // Specifies the light direction in world coordinates. 95 vec4 diffuse; 96 vec4 specular; 97 float coneAngle; // Specifies the intensity distribution of the light. 98 float innerConeAngle; // Specifies the maximum spread angle of the light. 99 float constantAttenuation; // Specifies the constant light attenuation factor. 100 float linearAttenuation; // Specifies the linear light attenuation factor. 101 float quadraticAttenuation; // Specifies the quadratic light attenuation factor. 102 }; 103 104 struct ShadowData { 105 mat4 matrices[4]; 106 vec4 dimensionsInverted[4]; // (x, y, z, 0) 107 vec4 csmSplits; 108 vec4 csmActive; 109 110 float bias; 111 float factor; 112 float isYUp; // 1.0 = true, 0.0 = false 113 float clipNear; // Used for Point light + Spot light 114 115 float shadowMapFar; // Used for Point light + Spot light 116 int layerIndex; 117 int csmNumSplits; 118 float csmBlendRatio; 119 120 float pcfFactor; 121 }; 122 123 layout (std140, binding = 1) uniform cbLights 124 { 125 int uNumLights; 126 LightSource lights[MAX_NUM_LIGHTS]; 127 } ubLights; 128 129 layout (std140, binding = 2) uniform cbShadows 130 { 131 int uNumShadows; 132 ShadowData shadowData[MAX_NUM_SHADOWS]; 133 } ubShadows; 134 135 // end "funcsampleLightVars.glsllib" 136 137 138 // begin "tonemapping.glsllib" 139 // Copyright (C) 2023 The Qt Company Ltd. 140 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only 141 142 #ifndef TONEMAPPPING_GLSLIB 143 #define TONEMAPPPING_GLSLIB 1 144 145 // This file is also included from the static shader skybox.frag, therefore pay 146 // attention that it should be suitable both as a generator-included and as a 147 // static-shader-included snippet. It may also be included from post-processing 148 // effect fragment shaders. 149 150 // Any changes to the calculations must be reflected in qssgcputonemapper_p.h. 151 152 #ifndef QSSG_ENABLE_LINEAR_TONEMAPPING 153 #define QSSG_ENABLE_LINEAR_TONEMAPPING 0 154 #endif 155 #ifndef QSSG_ENABLE_ACES_TONEMAPPING 156 #define QSSG_ENABLE_ACES_TONEMAPPING 0 157 #endif 158 #ifndef QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 159 #define QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 0 160 #endif 161 #ifndef QSSG_ENABLE_FILMIC_TONEMAPPING 162 #define QSSG_ENABLE_FILMIC_TONEMAPPING 0 163 #endif 164 #ifndef QSSG_FORCE_IBL_EXPOSURE 165 #define QSSG_FORCE_IBL_EXPOSURE 0 166 #endif 167 168 // The following methods are described in this article: 169 // http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html 170 171 // The following 4 methods are the most accurate approximations 172 vec3 qt_linearTosRGB(vec3 color) 173 { 174 vec3 S1 = sqrt(color); 175 vec3 S2 = sqrt(S1); 176 vec3 S3 = sqrt(S2); 177 return 0.585122381 * S1 + 0.783140355 * S2 - 0.368262736 * S3; 178 } 179 180 vec3 qt_sRGBToLinear(vec3 srgbIn) 181 { 182 return srgbIn * (srgbIn * (srgbIn * 0.305306011 + 0.682171111) + 0.012522878); 183 } 184 185 vec4 qt_linearTosRGB(vec4 color) 186 { 187 return vec4(qt_linearTosRGB(color.rgb), color.a); 188 } 189 190 vec4 qt_sRGBToLinear(vec4 srgbIn) 191 { 192 return vec4(qt_sRGBToLinear(srgbIn.rgb), srgbIn.a); 193 } 194 195 const float GAMMA = 2.2; 196 const float INV_GAMMA = 1.0 / GAMMA; 197 198 // The following 4 methods are the fastest, but less accurate 199 200 vec3 qt_linearTosRGBFast(vec3 color) 201 { 202 return pow(color, vec3(INV_GAMMA)); 203 } 204 205 vec3 qt_sRGBToLinearFast(vec3 srgbIn) 206 { 207 return vec3(pow(srgbIn.xyz, vec3(GAMMA))); 208 } 209 210 vec4 qt_linearTosRGBFast(vec4 color) 211 { 212 return vec4(pow(color.rgb, vec3(INV_GAMMA)), color.a); 213 } 214 215 vec4 qt_sRGBToLinearFast(vec4 srgbIn) 216 { 217 return vec4(pow(srgbIn.rgb, vec3(GAMMA)), srgbIn.a); 218 } 219 220 #if QSSG_ENABLE_ACES_TONEMAPPING 221 vec3 qt_toneMapACES(vec3 color) 222 { 223 const float A = 2.51; 224 const float B = 0.03; 225 const float C = 2.43; 226 const float D = 0.59; 227 const float E = 0.14; 228 return qt_linearTosRGB(clamp((color * (A * color + B)) / (color * (C * color + D) + E), 0.0, 1.0)); 229 } 230 #endif 231 232 #if QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 233 vec3 qt_tonemapHejlDawson(vec3 color) 234 { 235 color = max(vec3(0.0), color - vec3(0.004)); 236 return (color * (6.2 * color + 0.5)) / (color * (6.2 * color + 1.7) + 0.06); 237 } 238 #endif 239 240 #if QSSG_ENABLE_FILMIC_TONEMAPPING 241 vec3 qt_toneMapFilmicSub(vec3 color) 242 { 243 const float A = 0.15; 244 const float B = 0.50; 245 const float C = 0.10; 246 const float D = 0.20; 247 const float E = 0.02; 248 const float F = 0.30; 249 return ((color * ( A * color + C * B) + D * E) / (color * (A * color + B) + D * F)) - E / F; 250 } 251 252 vec3 qt_toneMapFilmic(vec3 color) 253 { 254 color = qt_toneMapFilmicSub(color * 2.0); 255 vec3 whiteScale = 1.0 / qt_toneMapFilmicSub(vec3(11.2, 11.2, 11.2)); 256 return qt_linearTosRGB(color * whiteScale); 257 } 258 #endif 259 260 // Call this method to perform tonemapping with the correct tonemapper 261 vec3 qt_tonemap(vec3 color) 262 { 263 // ACES 264 #if QSSG_ENABLE_ACES_TONEMAPPING 265 return qt_toneMapACES(color); 266 #endif 267 // Hejl-Dawson 268 #if QSSG_ENABLE_HEJLDAWSON_TONEMAPPING 269 return qt_tonemapHejlDawson(color); 270 #endif 271 272 // Filmic 273 #if QSSG_ENABLE_FILMIC_TONEMAPPING 274 return qt_toneMapFilmic(color); 275 #endif 276 277 // Linear 278 #if QSSG_ENABLE_LINEAR_TONEMAPPING 279 return qt_linearTosRGB(color); 280 #endif 281 282 return color; 283 } 284 285 vec4 qt_tonemap(vec4 color) 286 { 287 return vec4(qt_tonemap(color.rgb), color.a); 288 } 289 290 vec3 qt_exposure(vec3 color, float exposure) 291 { 292 #if QSSG_ENABLE_ACES_TONEMAPPING || QSSG_ENABLE_HEJLDAWSON_TONEMAPPING || QSSG_ENABLE_FILMIC_TONEMAPPING || QSSG_ENABLE_LINEAR_TONEMAPPING || QSSG_FORCE_IBL_EXPOSURE 293 return vec3(vec3(1.0) - exp(-color * exposure)); 294 #else 295 return color; 296 #endif 297 } 298 299 #endif // TONEMAPPPING_GLSLIB 300 301 // end "tonemapping.glsllib" 302 303 void main() 304 { 305 float qt_objectOpacity = qt_material_properties.a; 306 vec4 qt_vertColorMask = vec4(1.0); 307 vec4 qt_vertColor = vec4(1.0); 308 vec3 qt_view_vector = normalize(qt_cameraPosition - qt_varWorldPos); 309 vec3 qt_world_normal = normalize(qt_varNormal); 310 vec4 qt_diffuseColor = qt_material_base_color * qt_vertColor; 311 vec3 qt_global_emission = qt_material_emissive_color; 312 vec3 tmp_light_color; 313 float qt_metalnessAmount = qt_material_properties.z; 314 vec4 global_diffuse_light = vec4(0.0); 315 global_diffuse_light = vec4(qt_light_ambient_total.rgb * (1.0 - qt_metalnessAmount) * qt_diffuseColor.rgb, 0.0); 316 vec3 global_specular_light = vec3(0.0); 317 float qt_shadow_map_occl = 1.0; 318 float qt_lightAttenuation = 1.0; 319 float qt_aoFactor; 320 qt_aoFactor = 1.0; 321 float qt_roughnessAmount = qt_material_properties.y; 322 323 #if QSHADER_VIEW_COUNT >= 2 324 float qt_zDepthViewSpace = abs((qt_viewMatrix[0] * vec4(qt_varWorldPos, 1.0)).z); 325 #else 326 float qt_zDepthViewSpace = abs((qt_viewMatrix * vec4(qt_varWorldPos, 1.0)).z); 327 #endif 328 //Light 0 [directional] 329 qt_shadow_map_occl = 1.0; 330 tmp_light_color = ubLights.lights[0].diffuse.rgb * (1.0 - qt_metalnessAmount); 331 global_diffuse_light.rgb += qt_diffuseColor.rgb * qt_shadow_map_occl * qt_diffuseReflectionBSDF(qt_world_normal, -ubLights.lights[0].direction.xyz, tmp_light_color).rgb; 332 333 //Light 1 [directional] 334 qt_shadow_map_occl = 1.0; 335 tmp_light_color = ubLights.lights[1].diffuse.rgb * (1.0 - qt_metalnessAmount); 336 global_diffuse_light.rgb += qt_diffuseColor.rgb * qt_shadow_map_occl * qt_diffuseReflectionBSDF(qt_world_normal, -ubLights.lights[1].direction.xyz, tmp_light_color).rgb; 337 338 //Light 2 [point] 339 qt_shadow_map_occl = 1.0; 340 tmp_light_color = ubLights.lights[2].diffuse.rgb * (1.0 - qt_metalnessAmount); 341 vec3 light2_relativeDirection = qt_varWorldPos - ubLights.lights[2].position.xyz; 342 float light2_distance = length(light2_relativeDirection); 343 vec3 light2_relativeDirection_normalized = light2_relativeDirection / light2_distance; 344 qt_lightAttenuation = qt_calculatePointLightAttenuation(vec3(ubLights.lights[2].constantAttenuation, ubLights.lights[2].linearAttenuation, ubLights.lights[2].quadraticAttenuation), light2_distance); 345 global_diffuse_light.rgb += qt_diffuseColor.rgb * qt_lightAttenuation * qt_shadow_map_occl * qt_diffuseReflectionBSDF(qt_world_normal, -light2_relativeDirection_normalized.xyz, tmp_light_color).rgb; 346 347 global_diffuse_light = vec4(global_diffuse_light.rgb * qt_aoFactor, qt_objectOpacity * qt_diffuseColor.a); 348 vec4 qt_color_sum = vec4(global_diffuse_light.rgb + global_specular_light + qt_global_emission, global_diffuse_light.a); 349 fragOutput = vec4(qt_tonemap(qt_color_sum)); 350 } 351 ***** Compilation for vertex and fragment stages succeeded qrc:/content/NodeIndicator.qml:38:9: Unable to assign [undefined] to QColor qrc:/content/NodeIndicator.qml:38:9: Unable to assign [undefined] to QColor qrc:/content/NodeIndicator.qml:38:9: Unable to assign [undefined] to QColor qrc:/content/NodeIndicator.qml:38:9: Unable to assign [undefined] to QColor qrc:/content/NodeIndicator.qml:38:9: Unable to assign [undefined] to QColor