@@ -422,7 +422,12 @@ define([
422
422
' return roughnessSquared / (M_PI * f * f);\n' +
423
423
'}\n\n' ;
424
424
425
- fragmentShader += 'vec4 SRGBtoLINEAR(vec4 srgbIn) \n' +
425
+ fragmentShader += 'vec3 SRGBtoLINEAR3(vec3 srgbIn) \n' +
426
+ '{\n' +
427
+ ' return pow(srgbIn, vec3(2.2));\n' +
428
+ '}\n\n' ;
429
+
430
+ fragmentShader += 'vec4 SRGBtoLINEAR4(vec4 srgbIn) \n' +
426
431
'{\n' +
427
432
' vec3 linearOut = pow(srgbIn.rgb, vec3(2.2));\n' +
428
433
' return vec4(linearOut, srgbIn.a);\n' +
@@ -481,7 +486,7 @@ define([
481
486
482
487
// Add base color to fragment shader
483
488
if ( defined ( parameterValues . baseColorTexture ) ) {
484
- fragmentShader += ' vec4 baseColorWithAlpha = SRGBtoLINEAR (texture2D(u_baseColorTexture, ' + v_texcoord + '));\n' ;
489
+ fragmentShader += ' vec4 baseColorWithAlpha = SRGBtoLINEAR4 (texture2D(u_baseColorTexture, ' + v_texcoord + '));\n' ;
485
490
if ( defined ( parameterValues . baseColorFactor ) ) {
486
491
fragmentShader += ' baseColorWithAlpha *= u_baseColorFactor;\n' ;
487
492
}
@@ -555,7 +560,7 @@ define([
555
560
556
561
fragmentShader += ' vec3 f0 = vec3(0.04);\n' ;
557
562
fragmentShader += ' float alpha = roughness * roughness;\n' ;
558
- fragmentShader += ' vec3 diffuseColor = baseColor * (1.0 - metalness);\n' ;
563
+ fragmentShader += ' vec3 diffuseColor = baseColor * (1.0 - metalness) * (1.0 - f0) ;\n' ;
559
564
fragmentShader += ' vec3 specularColor = mix(f0, baseColor, metalness);\n' ;
560
565
fragmentShader += ' float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\n' ;
561
566
fragmentShader += ' vec3 r90 = vec3(clamp(reflectance * 25.0, 0.0, 1.0));\n' ;
@@ -599,15 +604,15 @@ define([
599
604
fragmentShader += ' specularIrradiance = mix(specularIrradiance, nadirColor, smoothstep(farBelowHorizon, 1.0, reflectionDotNadir) * inverseRoughness);\n' ;
600
605
601
606
fragmentShader += ' vec2 brdfLut = texture2D(czm_brdfLut, vec2(NdotV, 1.0 - roughness)).rg;\n' ;
602
- fragmentShader += ' vec3 IBLColor = (diffuseIrradiance * diffuseColor) + (specularIrradiance * (specularColor * brdfLut.x + brdfLut.y));\n' ;
607
+ fragmentShader += ' vec3 IBLColor = (diffuseIrradiance * diffuseColor) + (specularIrradiance * SRGBtoLINEAR3 (specularColor * brdfLut.x + brdfLut.y));\n' ;
603
608
fragmentShader += ' color += IBLColor;\n' ;
604
609
}
605
610
606
611
if ( defined ( parameterValues . occlusionTexture ) ) {
607
612
fragmentShader += ' color *= texture2D(u_occlusionTexture, ' + v_texcoord + ').r;\n' ;
608
613
}
609
614
if ( defined ( parameterValues . emissiveTexture ) ) {
610
- fragmentShader += ' vec3 emissive = SRGBtoLINEAR (texture2D(u_emissiveTexture, ' + v_texcoord + ')) .rgb;\n' ;
615
+ fragmentShader += ' vec3 emissive = SRGBtoLINEAR3 (texture2D(u_emissiveTexture, ' + v_texcoord + ').rgb) ;\n' ;
611
616
if ( defined ( parameterValues . emissiveFactor ) ) {
612
617
fragmentShader += ' emissive *= u_emissiveFactor;\n' ;
613
618
}
0 commit comments