diff options
author | Juan Linietsky <reduzio@gmail.com> | 2017-07-05 19:36:56 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2017-07-05 19:39:45 -0300 |
commit | 12a8fedfe604c7b944030ba772093ac0e2a85c78 (patch) | |
tree | 4d4611324630b6e8872b9aad4ab70da976e71f81 /drivers/gles3/shaders | |
parent | 58320b7f6cfe17ad3793a9ce6981b8ce0e50ad6a (diff) |
Some changes to dual paraboloid envmap generation, fixes somme bleeding
Diffstat (limited to 'drivers/gles3/shaders')
-rw-r--r-- | drivers/gles3/shaders/cubemap_filter.glsl | 5 | ||||
-rw-r--r-- | drivers/gles3/shaders/scene.glsl | 8 |
2 files changed, 8 insertions, 5 deletions
diff --git a/drivers/gles3/shaders/cubemap_filter.glsl b/drivers/gles3/shaders/cubemap_filter.glsl index 88a97a04aa..10a803cafe 100644 --- a/drivers/gles3/shaders/cubemap_filter.glsl +++ b/drivers/gles3/shaders/cubemap_filter.glsl @@ -219,9 +219,8 @@ void main() { N.z = 0.5 - 0.5*((N.x * N.x) + (N.y * N.y)); N = normalize(N); - if (!z_flip) { - //N.y=-N.y; //y is flipped to improve blending between both sides - } else { + if (z_flip) { + N.y=-N.y; //y is flipped to improve blending between both sides N.z=-N.z; } diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl index f94ca6fcba..247d1468c3 100644 --- a/drivers/gles3/shaders/scene.glsl +++ b/drivers/gles3/shaders/scene.glsl @@ -429,7 +429,9 @@ vec3 textureDualParaboloid(sampler2DArray p_tex, vec3 p_vec,float p_roughness) { // we need to lie the derivatives (normg) and assume that DP side is always the same // to get proper texure filtering vec2 normg=norm.xy; - norm.y+=max(0.0,sign(norm.z))*0.5; + if (norm.z>0) { + norm.y=0.5-norm.y+0.5; + } // thanks to OpenGL spec using floor(layer + 0.5) for texture arrays, // it's easy to have precision errors using fract() to interpolate layers @@ -451,7 +453,9 @@ vec3 textureDualParaboloid(sampler2D p_tex, vec3 p_vec,float p_roughness) { vec3 norm = normalize(p_vec); norm.xy/=1.0+abs(norm.z); norm.xy=norm.xy * vec2(0.5,0.25) + vec2(0.5,0.25); - norm.y+=max(0.0,sign(norm.z))*0.5; + if (norm.z>0) { + norm.y=0.5-norm.y+0.5; + } return textureLod(p_tex, norm.xy, p_roughness * RADIANCE_MAX_LOD).xyz; } |