From b0d9b6f6df230dce727200cb9909da7638d6caba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 5 Sep 2022 09:10:27 +0200 Subject: Fix T100788 Regression: EEVEE wrong normal map on backfaces This was caused by rB07cf3ce92fa2. It was missing a sign flip. --- source/blender/draw/engines/eevee/shaders/surface_lib.glsl | 1 + source/blender/draw/engines/eevee_next/shaders/eevee_surf_lib.glsl | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/source/blender/draw/engines/eevee/shaders/surface_lib.glsl b/source/blender/draw/engines/eevee/shaders/surface_lib.glsl index b984a6df7b3..69762027643 100644 --- a/source/blender/draw/engines/eevee/shaders/surface_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/surface_lib.glsl @@ -110,6 +110,7 @@ GlobalData init_globals(void) surf.barycentric_coords = vec2(0.0); surf.barycentric_dists = vec3(0.0); surf.N = (FrontFacing) ? surf.N : -surf.N; + surf.Ni = (FrontFacing) ? surf.Ni : -surf.Ni; # ifdef HAIR_SHADER vec3 V = cameraVec(surf.P); /* Shade as a cylinder. */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_lib.glsl index 18e748596d5..6c1fc818f41 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_lib.glsl @@ -60,7 +60,7 @@ void init_globals_curves() void init_globals_gpencil() { /* Undo backface flip as the gpencil normal is already pointing towards the camera. */ - g_data.N = interp.N; + g_data.N = g_data.Ni = interp.N; } void init_globals() @@ -82,6 +82,7 @@ void init_globals() #ifdef GPU_FRAGMENT_SHADER g_data.N = (FrontFacing) ? g_data.N : -g_data.N; + g_data.Ni = (FrontFacing) ? g_data.Ni : -g_data.Ni; g_data.Ng = safe_normalize(cross(dFdx(g_data.P), dFdy(g_data.P))); #endif -- cgit v1.2.3 From f0166bc168ed637a1ab74c90ad6b63e89ca6da8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 5 Sep 2022 09:16:59 +0200 Subject: Fix T100775: Regression: EEVEE world environment is stretched when using orthographic view It was using normalized vector instead of `viewCameraVec` which account for orthographic views. Reviewed By: jbakker Differential Revision: https://developer.blender.org/D15861 --- source/blender/draw/engines/eevee/shaders/surface_frag.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/draw/engines/eevee/shaders/surface_frag.glsl b/source/blender/draw/engines/eevee/shaders/surface_frag.glsl index 2a212b757c2..f72ec3064ab 100644 --- a/source/blender/draw/engines/eevee/shaders/surface_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/surface_frag.glsl @@ -153,7 +153,7 @@ void main() vec3 attr_load_orco(vec4 orco) { /* Retain precision better than g_data.P (see T99128). */ - return transform_direction(ViewMatrixInverse, normalize(viewPosition)); + return -normal_view_to_world(viewCameraVec(viewPosition)); } /* Unsupported. */ vec4 attr_load_tangent(vec4 tangent) -- cgit v1.2.3 From 3ae996c293ea290483f9d1b1688977e0403fa4ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 5 Sep 2022 09:20:30 +0200 Subject: Fix T100649: Regression: Environment texture is stretched when added to mesh The new code was not using the correct default attribute. Add access to `g_data.P` through `node_tex_coord_position()` to replace the old `GPU_builtin(GPU_VIEW_POSITION)` which was used before. Reviewed By: jbakker Differential Revision: https://developer.blender.org/D15862 --- .../shaders/material/gpu_shader_material_texture_coordinates.glsl | 5 +++++ source/blender/nodes/shader/nodes/node_shader_tex_environment.cc | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) 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 204f134dfa6..c849553ae4c 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 @@ -1,4 +1,9 @@ +void node_tex_coord_position(out vec3 out_pos) +{ + out_pos = g_data.P; +} + void node_tex_coord(mat4 obmatinv, vec3 attr_orco, vec4 attr_uv, diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_environment.cc b/source/blender/nodes/shader/nodes/node_shader_tex_environment.cc index df5fbac3ab5..2739a75ed21 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_environment.cc +++ b/source/blender/nodes/shader/nodes/node_shader_tex_environment.cc @@ -50,7 +50,11 @@ static int node_shader_gpu_tex_environment(GPUMaterial *mat, return GPU_stack_link(mat, node, "node_tex_environment_empty", in, out); } - node_shader_gpu_default_tex_coord(mat, node, &in[0].link); + if (!in[0].link) { + GPU_link(mat, "node_tex_coord_position", &in[0].link); + node_shader_gpu_bump_tex_coord(mat, node, &in[0].link); + } + node_shader_gpu_tex_mapping(mat, node, in, out); /* Compute texture coordinate. */ -- cgit v1.2.3