[Bf-blender-cvs] [c28a4eb8cb8] blender2.8: Eevee: fix some glsl for low quality lamps.
Clément Foucault
noreply at git.blender.org
Mon May 15 16:16:57 CEST 2017
Commit: c28a4eb8cb8c5abc3307c6a27b24ef274c72083c
Author: Clément Foucault
Date: Mon May 15 16:13:39 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBc28a4eb8cb8c5abc3307c6a27b24ef274c72083c
Eevee: fix some glsl for low quality lamps.
===================================================================
M source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
M source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl
M source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
M source/blender/draw/engines/eevee/shaders/ltc_lib.glsl
===================================================================
diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
index ef8af646ec1..1954a2ad85d 100644
--- a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
@@ -5,6 +5,8 @@
#define M_1_2PI 0.159154943091895335768 /* 1/(2*pi) */
#define M_1_PI2 0.101321183642337771443 /* 1/(pi^2) */
+#define LUT_SIZE 64
+
/* ------- Structures -------- */
struct LightData {
@@ -127,6 +129,16 @@ vec3 line_aligned_plane_intersect(vec3 lineorigin, vec3 linedirection, vec3 plan
return lineorigin + linedirection * dist;
}
+/* Return texture coordinates to sample Surface LUT */
+vec2 lut_coords(float cosTheta, float roughness)
+{
+ float theta = acos(cosTheta);
+ vec2 coords = vec2(roughness, theta / M_PI_2);
+
+ /* scale and bias coordinates, for correct filtered lookup */
+ return coords * (LUT_SIZE - 1.0) / LUT_SIZE + 0.5 / LUT_SIZE;
+}
+
/* -- Tangent Space conversion -- */
vec3 tangent_to_world(vec3 vector, vec3 N, vec3 T, vec3 B)
{
diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl
index b0f31a403c7..a949f85b426 100644
--- a/source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl
@@ -96,13 +96,13 @@ vec3 direct_ggx_point(ShadingData sd, float roughness, vec3 f0)
vec3 direct_ggx_sphere(LightData ld, ShadingData sd, float roughness, vec3 f0)
{
#ifdef USE_LTC
+ float NV = max(dot(sd.N, sd.V), 1e-8);
vec3 P = line_aligned_plane_intersect(vec3(0.0), sd.spec_dominant_dir, sd.l_vector);
vec3 Px = normalize(P - sd.l_vector) * ld.l_radius;
vec3 Py = cross(Px, sd.L);
- float NV = max(dot(sd.N, sd.V), 1e-8);
- vec2 uv = ltc_coords(NV, sqrt(roughness));
+ vec2 uv = lut_coords(NV, sqrt(roughness));
mat3 ltcmat = ltc_matrix(uv);
// #define HIGHEST_QUALITY
@@ -148,7 +148,7 @@ vec3 direct_ggx_sphere(LightData ld, ShadingData sd, float roughness, vec3 f0)
/* Fresnel */
float VH = max(dot(sd.V, normalize(sd.V + sd.L)), 0.0);
- vec3 spec = F_schlick(f0, NV) * bsdf;
+ vec3 spec = F_schlick(f0, VH) * bsdf;
#endif
return spec;
}
@@ -157,7 +157,7 @@ vec3 direct_ggx_rectangle(LightData ld, ShadingData sd, float roughness, vec3 f0
{
#ifdef USE_LTC
float NV = max(dot(sd.N, sd.V), 1e-8);
- vec2 uv = ltc_coords(NV, sqrt(roughness));
+ vec2 uv = lut_coords(NV, sqrt(roughness));
mat3 ltcmat = ltc_matrix(uv);
float bsdf = ltc_evaluate(sd.N, sd.V, ltcmat, sd.area_data.corner);
@@ -180,7 +180,7 @@ vec3 direct_ggx_rectangle(LightData ld, ShadingData sd, float roughness, vec3 f0
/* Fresnel */
float VH = max(dot(sd.V, normalize(sd.V + sd.L)), 0.0);
- vec3 spec = F_schlick(f0, NV) * bsdf;
+ vec3 spec = F_schlick(f0, VH) * bsdf;
#endif
return spec;
}
diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
index b0a99d8e72b..769d8dcd7bb 100644
--- a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
@@ -264,7 +264,7 @@ vec3 eevee_surface_lit(vec3 world_normal, vec3 albedo, vec3 f0, float roughness,
}
/* Envmaps */
- vec2 uv = ltc_coords(dot(sd.N, sd.V), sqrt(roughness));
+ vec2 uv = lut_coords(dot(sd.N, sd.V), sqrt(roughness));
vec2 brdf_lut = texture(brdfLut, uv).rg;
vec3 Li = textureLod(probeFiltered, sd.spec_dominant_dir, roughness * lodMax).rgb;
indirect_radiance += Li * brdf_lut.y + f0 * Li * brdf_lut.x;
diff --git a/source/blender/draw/engines/eevee/shaders/ltc_lib.glsl b/source/blender/draw/engines/eevee/shaders/ltc_lib.glsl
index 279b18313e7..5ea13cab271 100644
--- a/source/blender/draw/engines/eevee/shaders/ltc_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/ltc_lib.glsl
@@ -1,7 +1,6 @@
/* Mainly From https://eheitzresearch.wordpress.com/415-2/ */
#define USE_LTC
-#define LTC_LUT_SIZE 64
uniform sampler2D ltcMat;
uniform sampler2D brdfLut;
@@ -146,15 +145,6 @@ int clip_quad_to_horizon(inout vec3 L[5])
return n;
}
-vec2 ltc_coords(float cosTheta, float roughness)
-{
- float theta = acos(cosTheta);
- vec2 coords = vec2(roughness, theta/(0.5*3.14159));
-
- /* scale and bias coordinates, for correct filtered lookup */
- return coords * (LTC_LUT_SIZE - 1.0) / LTC_LUT_SIZE + 0.5 / LTC_LUT_SIZE;
-}
-
mat3 ltc_matrix(vec2 coord)
{
/* load inverse matrix */
More information about the Bf-blender-cvs
mailing list