diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-06-15 01:09:49 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-06-15 01:57:16 +0300 |
commit | 810464e5f721a14bc3b6e3071f63a93f2ff68043 (patch) | |
tree | c8c1e0cc336200368b207a60cfa13e94f049669c /source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl | |
parent | 246ee82a2f3c7e076c711659d876909dc4b410ea (diff) |
Eevee: Group octahedron map functions into one file.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl | 41 |
1 files changed, 2 insertions, 39 deletions
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); } |