Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/draw/engines/eevee/shaders/closure_eval_lib.glsl2
-rw-r--r--source/blender/draw/engines/eevee/shaders/closure_type_lib.glsl2
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl6
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl30
-rw-r--r--source/blender/draw/engines/eevee/shaders/renderpass_postprocess_frag.glsl2
-rw-r--r--source/blender/draw/engines/eevee/shaders/ssr_lib.glsl9
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl2
-rw-r--r--source/blender/draw/intern/shaders/common_view_lib.glsl6
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_ambient_occlusion.glsl2
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_eevee_specular.glsl6
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_emission.glsl2
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_glass.glsl2
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_glossy.glsl2
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl6
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_refraction.glsl3
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_shader_to_rgba.glsl4
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_texture_coordinates.glsl2
17 files changed, 44 insertions, 44 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
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_ambient_occlusion.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_ambient_occlusion.glsl
index 4721b9f0132..0231aeca04b 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_ambient_occlusion.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_ambient_occlusion.glsl
@@ -10,7 +10,7 @@ void node_ambient_occlusion(vec4 color,
vec4 rand = texelfetch_noise_tex(gl_FragCoord.xy);
OcclusionData data = occlusion_search(viewPosition, maxzBuffer, dist, inverted, 8.0);
- vec3 V = cameraVec;
+ vec3 V = cameraVec(worldPosition);
vec3 N = normalize(normal);
vec3 Ng = safe_normalize(cross(dFdx(worldPosition), dFdy(worldPosition)));
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_eevee_specular.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_eevee_specular.glsl
index 429c4ed41ac..d5623c890e4 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_eevee_specular.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_eevee_specular.glsl
@@ -32,6 +32,8 @@ void node_eevee_specular(vec4 diffuse,
result = CLOSURE_DEFAULT;
+ vec3 V = cameraVec(worldPosition);
+
{
/* Diffuse. */
out_Diffuse_0.radiance = render_pass_diffuse_mask(vec3(1), out_Diffuse_0.radiance);
@@ -40,7 +42,7 @@ void node_eevee_specular(vec4 diffuse,
}
{
/* Glossy. */
- float NV = dot(in_Glossy_1.N, cameraVec);
+ float NV = dot(in_Glossy_1.N, V);
vec2 split_sum = brdf_lut(NV, in_Glossy_1.roughness);
vec3 brdf = F_brdf_single_scatter(specular.rgb, vec3(1.0), split_sum);
@@ -52,7 +54,7 @@ void node_eevee_specular(vec4 diffuse,
}
{
/* Clearcoat. */
- float NV = dot(in_Glossy_2.N, cameraVec);
+ float NV = dot(in_Glossy_2.N, V);
vec2 split_sum = brdf_lut(NV, in_Glossy_2.roughness);
vec3 brdf = F_brdf_single_scatter(vec3(0.04), vec3(1.0), split_sum);
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_emission.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_emission.glsl
index 502bc7f92d6..f2de7c2da39 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_emission.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_emission.glsl
@@ -3,7 +3,7 @@ void node_emission(vec4 color, float strength, vec3 vN, out Closure result)
result = CLOSURE_DEFAULT;
#ifndef VOLUMETRICS
result.radiance = render_pass_emission_mask(color.rgb) * strength;
- result.ssr_normal = normal_encode(vN, viewCameraVec);
+ result.ssr_normal = normal_encode(vN, viewCameraVec(viewPosition));
#else
result.emission = color.rgb * strength;
#endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_glass.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_glass.glsl
index 6788b34c938..aa0a8873596 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_glass.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_glass.glsl
@@ -23,7 +23,7 @@ void node_bsdf_glass(vec4 color,
result = CLOSURE_DEFAULT;
- float NV = dot(in_Refraction_1.N, cameraVec);
+ float NV = dot(in_Refraction_1.N, cameraVec(worldPosition));
float fresnel = (do_multiscatter != 0.0) ?
btdf_lut(NV, in_Refraction_1.roughness, in_Refraction_1.ior).y :
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_glossy.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_glossy.glsl
index ca7c3749597..fa83bfb6c7a 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_glossy.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_glossy.glsl
@@ -16,7 +16,7 @@ void node_bsdf_glossy(
result = CLOSURE_DEFAULT;
- vec2 split_sum = brdf_lut(dot(in_Glossy_0.N, cameraVec), in_Glossy_0.roughness);
+ vec2 split_sum = brdf_lut(dot(in_Glossy_0.N, cameraVec(worldPosition)), in_Glossy_0.roughness);
vec3 brdf = (use_multiscatter != 0.0) ? F_brdf_multi_scatter(vec3(1.0), vec3(1.0), split_sum) :
F_brdf_single_scatter(vec3(1.0), vec3(1.0), split_sum);
out_Glossy_0.radiance = closure_mask_ssr_radiance(out_Glossy_0.radiance, ssr_id);
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl
index 139dcb33222..40fe83a3616 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl
@@ -86,8 +86,10 @@ void node_bsdf_principled(vec4 base_color,
out_Refraction_3.radiance = vec3(0);
}
+ vec3 V = cameraVec(worldPosition);
+
/* Glossy_1 will always be evaluated. */
- float NV = dot(in_Glossy_1.N, cameraVec);
+ float NV = dot(in_Glossy_1.N, V);
vec3 base_color_tint = tint_from_color(base_color.rgb);
@@ -172,7 +174,7 @@ void node_bsdf_principled(vec4 base_color,
}
if (clearcoat > 1e-5) {
- float NV = dot(in_Glossy_2.N, cameraVec);
+ float NV = dot(in_Glossy_2.N, V);
vec2 split_sum = brdf_lut(NV, in_Glossy_2.roughness);
vec3 brdf = F_brdf_single_scatter(vec3(0.04), vec3(1.0), split_sum);
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_refraction.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_refraction.glsl
index db820efa42e..7cbc7218f5c 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_refraction.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_refraction.glsl
@@ -22,7 +22,8 @@ void node_bsdf_refraction(vec4 color, float roughness, float ior, vec3 N, out Cl
result.radiance = out_Refraction_0.radiance;
/* TODO(fclem) Try to not use this. */
- result.ssr_normal = normal_encode(mat3(ViewMatrix) * in_Refraction_0.N, viewCameraVec);
+ result.ssr_normal = normal_encode(mat3(ViewMatrix) * in_Refraction_0.N,
+ viewCameraVec(viewPosition));
}
#else
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_shader_to_rgba.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_shader_to_rgba.glsl
index f495157f6e1..a5fdc7a2337 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_shader_to_rgba.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_shader_to_rgba.glsl
@@ -3,8 +3,8 @@ void node_shader_to_rgba(Closure cl, out vec4 outcol, out float outalpha)
{
vec4 spec_accum = vec4(0.0);
if (ssrToggle && FLAG_TEST(cl.flag, CLOSURE_SSR_FLAG)) {
- vec3 V = cameraVec;
- vec3 vN = normal_decode(cl.ssr_normal, viewCameraVec);
+ vec3 V = cameraVec(worldPosition);
+ vec3 vN = normal_decode(cl.ssr_normal, viewCameraVec(viewPosition));
vec3 N = transform_direction(ViewMatrixInverse, vN);
float roughness = cl.ssr_data.a;
float roughnessSquared = max(1e-3, roughness * roughness);
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_texture_coordinates.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_texture_coordinates.glsl
index 24276156d55..08d566224bf 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_texture_coordinates.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_texture_coordinates.glsl
@@ -50,7 +50,7 @@ void node_tex_coord(vec3 I,
camera = vec3(I.xy, -I.z);
vec4 projvec = ProjectionMatrix * vec4(I, 1.0);
window = vec3(mtex_2d_mapping(projvec.xyz / projvec.w).xy * camerafac.xy + camerafac.zw, 0.0);
- reflection = -reflect(cameraVec, normalize(wN));
+ reflection = -reflect(cameraVec(worldPosition), normalize(wN));
}
void node_tex_coord_background(vec3 I,