|
@@ -72,7 +72,7 @@ uniform vec4 vCameraInfos;
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-#ifdef LODBASEDMICROSFURACE
|
|
|
|
|
|
+#if defined(REFLECTION) || defined(REFRACTION)
|
|
uniform vec2 vMicrosurfaceTextureLods;
|
|
uniform vec2 vMicrosurfaceTextureLods;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
@@ -1078,13 +1078,10 @@ vec3 surfaceRefractionColor = vec3(0., 0., 0.);
|
|
// Go mat -> blurry reflexion according to microSurface
|
|
// Go mat -> blurry reflexion according to microSurface
|
|
#ifdef LODBASEDMICROSFURACE
|
|
#ifdef LODBASEDMICROSFURACE
|
|
float alphaG = convertRoughnessToAverageSlope(roughness);
|
|
float alphaG = convertRoughnessToAverageSlope(roughness);
|
|
-#else
|
|
|
|
- float bias = 20. * (1.0 - microSurface);
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifdef REFRACTION
|
|
#ifdef REFRACTION
|
|
- //vec3 refractionVector = normalize(refract(-viewDirectionW, normalW, vRefractionInfos.y));
|
|
|
|
- vec3 refractionVector = refract(-viewDirectionW, normalW, vRefractionInfos.y);
|
|
|
|
|
|
+ vec3 refractionVector = refract(-viewDirectionW, normalW, vRefractionInfos.y);
|
|
|
|
|
|
#ifdef LODBASEDMICROSFURACE
|
|
#ifdef LODBASEDMICROSFURACE
|
|
#ifdef USEPMREMREFRACTION
|
|
#ifdef USEPMREMREFRACTION
|
|
@@ -1092,6 +1089,8 @@ vec3 surfaceRefractionColor = vec3(0., 0., 0.);
|
|
#else
|
|
#else
|
|
float lodRefraction = getMipMapIndexFromAverageSlope(vMicrosurfaceTextureLods.y, alphaG);
|
|
float lodRefraction = getMipMapIndexFromAverageSlope(vMicrosurfaceTextureLods.y, alphaG);
|
|
#endif
|
|
#endif
|
|
|
|
+ #else
|
|
|
|
+ float biasRefraction = (vMicrosurfaceTextureLods.y + 2.) * (1.0 - microSurface);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifdef REFRACTIONMAP_3D
|
|
#ifdef REFRACTIONMAP_3D
|
|
@@ -1115,7 +1114,7 @@ vec3 surfaceRefractionColor = vec3(0., 0., 0.);
|
|
|
|
|
|
surfaceRefractionColor = textureCubeLodEXT(refractionCubeSampler, refractionVector, lodRefraction).rgb * vRefractionInfos.x;
|
|
surfaceRefractionColor = textureCubeLodEXT(refractionCubeSampler, refractionVector, lodRefraction).rgb * vRefractionInfos.x;
|
|
#else
|
|
#else
|
|
- surfaceRefractionColor = textureCube(refractionCubeSampler, refractionVector, bias).rgb * vRefractionInfos.x;
|
|
|
|
|
|
+ surfaceRefractionColor = textureCube(refractionCubeSampler, refractionVector, biasRefraction).rgb * vRefractionInfos.x;
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1132,7 +1131,7 @@ vec3 surfaceRefractionColor = vec3(0., 0., 0.);
|
|
#ifdef LODBASEDMICROSFURACE
|
|
#ifdef LODBASEDMICROSFURACE
|
|
surfaceRefractionColor = texture2DLodEXT(refraction2DSampler, refractionCoords, lodRefraction).rgb * vRefractionInfos.x;
|
|
surfaceRefractionColor = texture2DLodEXT(refraction2DSampler, refractionCoords, lodRefraction).rgb * vRefractionInfos.x;
|
|
#else
|
|
#else
|
|
- surfaceRefractionColor = texture2D(refraction2DSampler, refractionCoords, bias).rgb * vRefractionInfos.x;
|
|
|
|
|
|
+ surfaceRefractionColor = texture2D(refraction2DSampler, refractionCoords, biasRefraction).rgb * vRefractionInfos.x;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
surfaceRefractionColor = toLinearSpace(surfaceRefractionColor.rgb);
|
|
surfaceRefractionColor = toLinearSpace(surfaceRefractionColor.rgb);
|
|
@@ -1152,6 +1151,8 @@ vec3 environmentIrradiance = vReflectionColor.rgb;
|
|
#else
|
|
#else
|
|
float lodReflection = getMipMapIndexFromAverageSlope(vMicrosurfaceTextureLods.x, alphaG);
|
|
float lodReflection = getMipMapIndexFromAverageSlope(vMicrosurfaceTextureLods.x, alphaG);
|
|
#endif
|
|
#endif
|
|
|
|
+ #else
|
|
|
|
+ float biasReflection = (vMicrosurfaceTextureLods.x + 2.) * (1.0 - microSurface);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifdef REFLECTIONMAP_3D
|
|
#ifdef REFLECTIONMAP_3D
|
|
@@ -1172,7 +1173,7 @@ vec3 environmentIrradiance = vReflectionColor.rgb;
|
|
|
|
|
|
environmentRadiance = textureCubeLodEXT(reflectionCubeSampler, vReflectionUVW, lodReflection).rgb * vReflectionInfos.x;
|
|
environmentRadiance = textureCubeLodEXT(reflectionCubeSampler, vReflectionUVW, lodReflection).rgb * vReflectionInfos.x;
|
|
#else
|
|
#else
|
|
- environmentRadiance = textureCube(reflectionCubeSampler, vReflectionUVW, bias).rgb * vReflectionInfos.x;
|
|
|
|
|
|
+ environmentRadiance = textureCube(reflectionCubeSampler, vReflectionUVW, biasReflection).rgb * vReflectionInfos.x;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifdef PoissonSamplingEnvironment
|
|
#ifdef PoissonSamplingEnvironment
|
|
@@ -1202,7 +1203,7 @@ vec3 environmentIrradiance = vReflectionColor.rgb;
|
|
#ifdef LODBASEDMICROSFURACE
|
|
#ifdef LODBASEDMICROSFURACE
|
|
environmentRadiance = texture2DLodEXT(reflection2DSampler, coords, lodReflection).rgb * vReflectionInfos.x;
|
|
environmentRadiance = texture2DLodEXT(reflection2DSampler, coords, lodReflection).rgb * vReflectionInfos.x;
|
|
#else
|
|
#else
|
|
- environmentRadiance = texture2D(reflection2DSampler, coords, bias).rgb * vReflectionInfos.x;
|
|
|
|
|
|
+ environmentRadiance = texture2D(reflection2DSampler, coords, biasReflection).rgb * vReflectionInfos.x;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
environmentRadiance = toLinearSpace(environmentRadiance.rgb);
|
|
environmentRadiance = toLinearSpace(environmentRadiance.rgb);
|