Sebastien Vandenberghe před 8 roky
rodič
revize
bad4de5e98
1 změnil soubory, kde provedl 15 přidání a 5 odebrání
  1. 15 5
      src/Shaders/pbr.fragment.fx

+ 15 - 5
src/Shaders/pbr.fragment.fx

@@ -688,12 +688,18 @@ void main(void) {
 	vec3 finalSpecular = specularBase;
 	finalSpecular *= surfaceReflectivityColor;
 	finalSpecular = max(finalSpecular, 0.0);
+
+	// Full value needed for alpha.
+	vec3 finalSpecularScaled = finalSpecular * vLightingIntensity.x * vLightingIntensity.w;
 #endif
 
 // _____________________________ Radiance_________________________________________
 #ifdef REFLECTION
 	vec3 finalRadiance = environmentRadiance;
 	finalRadiance *= specularEnvironmentReflectance;
+
+	// Full value needed for alpha. 
+	vec3 finalRadianceScaled = finalRadiance * vLightingIntensity.z;
 #endif
 
 // _____________________________ Refraction ______________________________________
@@ -714,15 +720,15 @@ void main(void) {
 #ifdef ALPHABLEND
 	float luminanceOverAlpha = 0.0;
 	#if	defined(REFLECTION) && defined(RADIANCEOVERALPHA)
-		luminanceOverAlpha += getLuminance(environmentRadiance);
+		luminanceOverAlpha += getLuminance(finalRadianceScaled);
 	#endif
 
 	#if defined(SPECULARTERM) && defined(SPECULAROVERALPHA)
-		luminanceOverAlpha += getLuminance(finalSpecular);
+		luminanceOverAlpha += getLuminance(finalSpecularScaled);
 	#endif
 
 	#if defined(RADIANCEOVERALPHA) || defined(SPECULAROVERALPHA)
-		alpha = clamp(alpha + luminanceOverAlpha * alpha, 0., 1.);
+		alpha = clamp(alpha + luminanceOverAlpha * luminanceOverAlpha, 0., 1.);
 	#endif
 #endif
 
@@ -734,10 +740,14 @@ void main(void) {
 						finalIrradiance			* ambientOcclusionColor * vLightingIntensity.z +
 #endif
 #ifdef SPECULARTERM
-						finalSpecular			* vLightingIntensity.x * vLightingIntensity.w +
+// Comupted in the previous step to help with alpha luminance.
+//						finalSpecular			* vLightingIntensity.x * vLightingIntensity.w +
+						finalSpecularScaled +
 #endif
 #ifdef REFLECTION
-						finalRadiance			* vLightingIntensity.z +
+// Comupted in the previous step to help with alpha luminance.
+//						finalRadiance			* vLightingIntensity.z +
+						finalRadianceScaled +
 #endif
 #ifdef REFRACTION
 						finalRefraction			* vLightingIntensity.z +