diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2021-02-21 02:46:41 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2021-02-21 03:33:56 +0300 |
commit | 1d51cb6be24e3097de2a20f490ef0dd535240f5b (patch) | |
tree | edf300e8c8100db887ae582e7a9c59b63ca96899 /source/blender/draw | |
parent | dee94afd039de7b7d3002ff2f8f1f0bf4c515bb3 (diff) |
Cleanup: EEVEE: change cameraVec macro to cameraVec(P)
This makes is clearer and avoid having to setup worldPosition if
shader is not a material shader.
Diffstat (limited to 'source/blender/draw')
8 files changed, 27 insertions, 32 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/closure_eval_lib.glsl b/source/blender/draw/engines/eevee/shaders/closure_eval_lib.glsl index b372a8c2467..8cb702796da 100644 --- a/source/blender/draw/engines/eevee/shaders/closure_eval_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/closure_eval_lib.glsl @@ -200,7 +200,7 @@ ClosureEvalCommon closure_Common_eval_init(ClosureInputCommon cl_in) { ClosureEvalCommon cl_eval; cl_eval.rand = texelfetch_noise_tex(gl_FragCoord.xy); - cl_eval.V = cameraVec; + cl_eval.V = cameraVec(worldPosition); cl_eval.P = worldPosition; cl_eval.N = safe_normalize(gl_FrontFacing ? worldNormal : -worldNormal); cl_eval.vN = safe_normalize(gl_FrontFacing ? viewNormal : -viewNormal); diff --git a/source/blender/draw/engines/eevee/shaders/closure_type_lib.glsl b/source/blender/draw/engines/eevee/shaders/closure_type_lib.glsl index 9ca25ef240f..38ae3972aa7 100644 --- a/source/blender/draw/engines/eevee/shaders/closure_type_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/closure_type_lib.glsl @@ -159,7 +159,7 @@ void closure_load_ssr_data( { /* Still encode to avoid artifacts in the SSR pass. */ vec3 vN = normalize(mat3(ViewMatrix) * N); - cl.ssr_normal = normal_encode(vN, viewCameraVec); + cl.ssr_normal = normal_encode(vN, viewCameraVec(viewPosition)); if (ssrToggle && int(ssr_id) == outputSsrId) { cl.ssr_data = vec4(ssr_radiance, roughness); diff --git a/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl index 369b0735cd2..19ae0acc443 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl @@ -91,10 +91,8 @@ void main() } else { vec3 P = transform_point(ViewMatrixInverse, vP); - vec3 worldPosition = P; /* For cameraVec macro. TODO(fclem) make cameraVec(P). */ - vec3 viewPosition = vP; /* For viewCameraVec macro. TODO(fclem) make viewCameraVec(vP). */ - vec3 V = cameraVec; - vec3 vV = viewCameraVec; + vec3 V = cameraVec(P); + vec3 vV = viewCameraVec(vP); vec3 vN = normal_decode(texture(normalBuffer, uvcoordsvar.xy).rg, vV); vec3 N = transform_direction(ViewMatrixInverse, vN); vec3 Ng = transform_direction(ViewMatrixInverse, vNg); diff --git a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl index b7caaf127bf..71aead9155d 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl @@ -142,9 +142,12 @@ void main() vec2 uvs = vec2(fullres_texel) / vec2(textureSize(depthBuffer, 0)); /* Using view space */ - vec3 viewPosition = get_view_space_from_depth(uvs, depth); - vec3 V = viewCameraVec; - vec3 N = normal_decode(texelFetch(normalBuffer, fullres_texel, 0).rg, V); + vec3 vP = get_view_space_from_depth(uvs, depth); + vec3 P = transform_point(ViewMatrixInverse, vP); + vec3 vV = viewCameraVec(vP); + vec3 V = cameraVec(P); + vec3 vN = normal_decode(texelFetch(normalBuffer, fullres_texel, 0).rg, vV); + vec3 N = transform_direction(ViewMatrixInverse, vN); /* Retrieve pixel data */ vec4 speccol_roughness = texelFetch(specroughBuffer, fullres_texel, 0).rgba; @@ -172,27 +175,24 @@ void main() /* Importance sampling bias */ rand.x = mix(rand.x, 0.0, ssrBrdfBias); - vec3 W = transform_point(ViewMatrixInverse, viewPosition); - vec3 wN = transform_direction(ViewMatrixInverse, N); - - vec3 T, B; - make_orthonormal_basis(N, T, B); /* Generate tangent space */ + vec3 vT, vB; + make_orthonormal_basis(vN, vT, vB); /* Generate tangent space */ /* Planar Reflections */ for (int i = 0; i < MAX_PLANAR && i < prbNumPlanar; i++) { PlanarData pd = planars_data[i]; - float fade = probe_attenuation_planar(pd, W); - fade *= probe_attenuation_planar_normal_roughness(pd, wN, 0.0); + float fade = probe_attenuation_planar(pd, P); + fade *= probe_attenuation_planar_normal_roughness(pd, N, 0.0); if (fade > 0.5) { /* Find view vector / reflection plane intersection. */ /* TODO optimize, use view space for all. */ - vec3 tracePosition = line_plane_intersect(W, cameraVec, pd.pl_plane_eq); + vec3 tracePosition = line_plane_intersect(P, V, pd.pl_plane_eq); tracePosition = transform_point(ViewMatrix, tracePosition); vec3 planeNormal = transform_direction(ViewMatrix, pd.pl_normal); - do_planar_ssr(i, V, N, T, B, planeNormal, tracePosition, a2, rand); + do_planar_ssr(i, vV, vN, vT, vB, planeNormal, tracePosition, a2, rand); return; } } @@ -200,9 +200,9 @@ void main() /* Constant bias (due to depth buffer precision). Helps with self intersection. */ /* Magic numbers for 24bits of precision. * From http://terathon.com/gdc07_lengyel.pdf (slide 26) */ - viewPosition.z = get_view_z_from_depth(depth - mix(2.4e-7, 4.8e-7, depth)); + vP.z = get_view_z_from_depth(depth - mix(2.4e-7, 4.8e-7, depth)); - do_ssr(V, N, T, B, viewPosition, a2, rand); + do_ssr(vV, vN, vT, vB, vP, a2, rand); } #else /* STEP_RESOLVE */ @@ -580,7 +580,7 @@ void main() worldPosition = transform_point(ViewMatrixInverse, viewPosition); vec2 normal_encoded = texelFetch(normalBuffer, texel, 0).rg; - viewNormal = normal_decode(normal_encoded, viewCameraVec); + viewNormal = normal_decode(normal_encoded, viewCameraVec(viewPosition)); worldNormal = transform_direction(ViewMatrixInverse, viewNormal); CLOSURE_VARS_DECLARE_1(Glossy); diff --git a/source/blender/draw/engines/eevee/shaders/renderpass_postprocess_frag.glsl b/source/blender/draw/engines/eevee/shaders/renderpass_postprocess_frag.glsl index 0bbbe58c44a..363b5cb978a 100644 --- a/source/blender/draw/engines/eevee/shaders/renderpass_postprocess_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/renderpass_postprocess_frag.glsl @@ -82,7 +82,7 @@ void main() * with NaN's */ if (depth != 1.0 && any(notEqual(encoded_normal, vec2(0.0)))) { vec3 decoded_normal = normal_decode(texelFetch(inputBuffer, texel, 0).rg, vec3(0.0)); - vec3 world_normal = mat3(ViewMatrixInverse) * decoded_normal; + vec3 world_normal = transform_direction(ViewMatrixInverse, decoded_normal); color.rgb = world_normal; } else { diff --git a/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl b/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl index 29495e98355..15c28efe622 100644 --- a/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl @@ -9,8 +9,7 @@ #define BTDF_BIAS 0.85 -vec4 screen_space_refraction( - vec3 viewPosition, vec3 N, vec3 V, float ior, float roughnessSquared, vec4 rand) +vec4 screen_space_refraction(vec3 vP, vec3 N, vec3 V, float ior, float roughnessSquared, vec4 rand) { float a2 = max(5e-6, roughnessSquared * roughnessSquared); @@ -29,7 +28,7 @@ vec4 screen_space_refraction( pdf = pdf_ggx_reflect(NH, a2); } - vec3 vV = viewCameraVec; + vec3 vV = viewCameraVec(vP); float eta = 1.0 / ior; if (dot(H, V) < 0.0) { H = -H; @@ -41,11 +40,11 @@ vec4 screen_space_refraction( R = transform_direction(ViewMatrix, R); vec3 hit_pos = raycast( - -1, viewPosition, R * 1e16, ssrThickness, rand.y, ssrQuality, roughnessSquared, false); + -1, vP, R * 1e16, ssrThickness, rand.y, ssrQuality, roughnessSquared, false); if ((hit_pos.z > 0.0) && (F_eta(ior, dot(H, V)) < 1.0)) { hit_pos = get_view_space_from_depth(hit_pos.xy, hit_pos.z); - float hit_dist = distance(hit_pos, viewPosition); + float hit_dist = distance(hit_pos, vP); float cone_cos = cone_cosine(roughnessSquared); float cone_tan = sqrt(1 - cone_cos * cone_cos) / cone_cos; diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl index 806f1b5b205..13287eab82b 100644 --- a/source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl @@ -30,7 +30,7 @@ void main() vec3 s_scattering = texelFetch(volumeScattering, volume_cell, 0).rgb; vec3 volume_ndc = volume_to_ndc((vec3(volume_cell) + volJitter.xyz) * volInvTexSize.xyz); vec3 worldPosition = get_world_space_from_depth(volume_ndc.xy, volume_ndc.z); - vec3 wdir = cameraVec; + vec3 wdir = cameraVec(worldPosition); vec2 phase = texelFetch(volumePhase, volume_cell, 0).rg; float s_anisotropy = phase.x / max(1.0, phase.y); diff --git a/source/blender/draw/intern/shaders/common_view_lib.glsl b/source/blender/draw/intern/shaders/common_view_lib.glsl index 0f2782fc2b2..4012de4f95b 100644 --- a/source/blender/draw/intern/shaders/common_view_lib.glsl +++ b/source/blender/draw/intern/shaders/common_view_lib.glsl @@ -27,10 +27,8 @@ layout(std140) uniform viewBlock #define cameraForward ViewMatrixInverse[2].xyz #define cameraPos ViewMatrixInverse[3].xyz -#define cameraVec \ - ((ProjectionMatrix[3][3] == 0.0) ? normalize(cameraPos - worldPosition) : cameraForward) -#define viewCameraVec \ - ((ProjectionMatrix[3][3] == 0.0) ? normalize(-viewPosition) : vec3(0.0, 0.0, 1.0)) +#define cameraVec(P) ((ProjectionMatrix[3][3] == 0.0) ? normalize(cameraPos - P) : cameraForward) +#define viewCameraVec(vP) ((ProjectionMatrix[3][3] == 0.0) ? normalize(-vP) : vec3(0.0, 0.0, 1.0)) #ifdef world_clip_planes_calc_clip_distance # undef world_clip_planes_calc_clip_distance |