[Bf-blender-cvs] [810464e5f72] blender2.8: Eevee: Group octahedron map functions into one file.

Clément Foucault noreply at git.blender.org
Thu Jun 15 01:16:25 CEST 2017


Commit: 810464e5f721a14bc3b6e3071f63a93f2ff68043
Author: Clément Foucault
Date:   Thu Jun 15 00:09:49 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB810464e5f721a14bc3b6e3071f63a93f2ff68043

Eevee: Group octahedron map functions into one file.

===================================================================

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/engines/eevee/eevee_lightprobes.c
M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
A	source/blender/draw/engines/eevee/shaders/octahedron_lib.glsl

===================================================================

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 0da7fd79435..9f918cb33d1 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -141,6 +141,7 @@ data_to_c_simple(engines/eevee/shaders/bsdf_lut_frag.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/bsdf_direct_lib.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/bsdf_common_lib.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/irradiance_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/octahedron_lib.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/bsdf_sampling_lib.glsl SRC)
 data_to_c_simple(engines/eevee/shaders/ltc_lib.glsl SRC)
 
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index b41b393b633..2d647c0f4bf 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -72,6 +72,7 @@ extern char datatoc_lightprobe_vert_glsl[];
 extern char datatoc_lightprobe_grid_display_frag_glsl[];
 extern char datatoc_lightprobe_grid_display_vert_glsl[];
 extern char datatoc_irradiance_lib_glsl[];
+extern char datatoc_octahedron_lib_glsl[];
 extern char datatoc_bsdf_common_lib_glsl[];
 extern char datatoc_bsdf_sampling_lib_glsl[];
 
@@ -153,6 +154,7 @@ void EEVEE_lightprobes_init(EEVEE_SceneLayerData *sldata)
 		MEM_freeN(shader_str);
 
 		ds_frag = BLI_dynstr_new();
+		BLI_dynstr_append(ds_frag, datatoc_octahedron_lib_glsl);
 		BLI_dynstr_append(ds_frag, datatoc_irradiance_lib_glsl);
 		BLI_dynstr_append(ds_frag, datatoc_lightprobe_grid_display_frag_glsl);
 		shader_str = BLI_dynstr_get_cstring(ds_frag);
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 35dcc8dbd88..2e83b775218 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -84,6 +84,7 @@ extern char datatoc_bsdf_common_lib_glsl[];
 extern char datatoc_bsdf_direct_lib_glsl[];
 extern char datatoc_bsdf_sampling_lib_glsl[];
 extern char datatoc_irradiance_lib_glsl[];
+extern char datatoc_octahedron_lib_glsl[];
 extern char datatoc_lit_surface_frag_glsl[];
 extern char datatoc_lit_surface_vert_glsl[];
 extern char datatoc_shadow_frag_glsl[];
@@ -168,6 +169,7 @@ void EEVEE_materials_init(void)
 		/* Shaders */
 		DynStr *ds_frag = BLI_dynstr_new();
 		BLI_dynstr_append(ds_frag, datatoc_bsdf_common_lib_glsl);
+		BLI_dynstr_append(ds_frag, datatoc_octahedron_lib_glsl);
 		BLI_dynstr_append(ds_frag, datatoc_irradiance_lib_glsl);
 		BLI_dynstr_append(ds_frag, datatoc_ltc_lib_glsl);
 		BLI_dynstr_append(ds_frag, datatoc_bsdf_direct_lib_glsl);
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 ebba5f3c742..7a1d2dae479 100644
--- a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
@@ -56,43 +56,6 @@ in vec3 viewNormal;
 #define HEMI     3.0
 #define AREA     4.0
 
-vec2 mapping_octahedron(vec3 cubevec, vec2 texel_size)
-{
-	/* projection onto octahedron */
-	cubevec /= dot( vec3(1), abs(cubevec) );
-
-	/* out-folding of the downward faces */
-	if ( cubevec.z < 0.0 ) {
-		cubevec.xy = (1.0 - abs(cubevec.yx)) * sign(cubevec.xy);
-	}
-
-	/* mapping to [0;1]ˆ2 texture space */
-	vec2 uvs = cubevec.xy * (0.5) + 0.5;
-
-	/* edge filtering fix */
-	uvs *= 1.0 - 2.0 * texel_size;
-	uvs += texel_size;
-
-	return uvs;
-}
-
-vec4 textureLod_octahedron(sampler2DArray tex, vec4 cubevec, float lod)
-{
-	vec2 texelSize = 1.0 / vec2(textureSize(tex, int(lodMax)));
-
-	vec2 uvs = mapping_octahedron(cubevec.xyz, texelSize);
-
-	return textureLod(tex, vec3(uvs, cubevec.w), lod);
-}
-
-vec4 texture_octahedron(sampler2DArray tex, vec4 cubevec)
-{
-	vec2 texelSize = 1.0 / vec2(textureSize(tex, 0));
-
-	vec2 uvs = mapping_octahedron(cubevec.xyz, texelSize);
-
-	return texture(tex, vec3(uvs, cubevec.w));
-}
 #ifdef HAIR_SHADER
 vec3 light_diffuse(LightData ld, ShadingData sd, vec3 albedo)
 {
@@ -373,7 +336,7 @@ vec3 eevee_surface_lit(vec3 world_normal, vec3 albedo, vec3 f0, float roughness,
 			float roughness_copy = roughness;
 
 			vec3 sample_vec = probe_parallax_correction(sd.W, spec_dir, pd, roughness_copy);
-			vec4 sample = textureLod_octahedron(probeCubes, vec4(sample_vec, i), roughness_copy * lodMax).rgba;
+			vec4 sample = textureLod_octahedron(probeCubes, vec4(sample_vec, i), roughness_copy * lodMax, lodMax).rgba;
 
 			float influ_spec = min(dist_attenuation, (1.0 - spec_accum.a));
 
@@ -453,7 +416,7 @@ vec3 eevee_surface_lit(vec3 world_normal, vec3 albedo, vec3 f0, float roughness,
 	if (spec_accum.a < 1.0) {
 		ProbeData pd = probes_data[0];
 
-		vec3 spec = textureLod_octahedron(probeCubes, vec4(spec_dir, 0), roughness * lodMax).rgb;
+		vec3 spec = textureLod_octahedron(probeCubes, vec4(spec_dir, 0), roughness * lodMax, lodMax).rgb;
 		spec_accum.rgb += spec * (1.0 - spec_accum.a);
 	}
 
diff --git a/source/blender/draw/engines/eevee/shaders/octahedron_lib.glsl b/source/blender/draw/engines/eevee/shaders/octahedron_lib.glsl
new file mode 100644
index 00000000000..631b325ae37
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/octahedron_lib.glsl
@@ -0,0 +1,38 @@
+
+vec2 mapping_octahedron(vec3 cubevec, vec2 texel_size)
+{
+	/* projection onto octahedron */
+	cubevec /= dot( vec3(1), abs(cubevec) );
+
+	/* out-folding of the downward faces */
+	if ( cubevec.z < 0.0 ) {
+		cubevec.xy = (1.0 - abs(cubevec.yx)) * sign(cubevec.xy);
+	}
+
+	/* mapping to [0;1]ˆ2 texture space */
+	vec2 uvs = cubevec.xy * (0.5) + 0.5;
+
+	/* edge filtering fix */
+	uvs *= 1.0 - 2.0 * texel_size;
+	uvs += texel_size;
+
+	return uvs;
+}
+
+vec4 textureLod_octahedron(sampler2DArray tex, vec4 cubevec, float lod, float lod_max)
+{
+	vec2 texelSize = 1.0 / vec2(textureSize(tex, int(lod_max)));
+
+	vec2 uvs = mapping_octahedron(cubevec.xyz, texelSize);
+
+	return textureLod(tex, vec3(uvs, cubevec.w), lod);
+}
+
+vec4 texture_octahedron(sampler2DArray tex, vec4 cubevec)
+{
+	vec2 texelSize = 1.0 / vec2(textureSize(tex, 0));
+
+	vec2 uvs = mapping_octahedron(cubevec.xyz, texelSize);
+
+	return texture(tex, vec3(uvs, cubevec.w));
+}




More information about the Bf-blender-cvs mailing list