diff options
Diffstat (limited to 'source/blender/gpu/shaders/material/gpu_shader_material_geometry.glsl')
-rw-r--r-- | source/blender/gpu/shaders/material/gpu_shader_material_geometry.glsl | 53 |
1 files changed, 16 insertions, 37 deletions
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_geometry.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_geometry.glsl index a14ff5021bf..5e86a4577ee 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_geometry.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_geometry.glsl @@ -1,9 +1,6 @@ -void node_geometry(vec3 I, - vec3 N, - vec3 orco, - mat4 objmat, - mat4 toworld, - vec2 barycentric, +#pragma BLENDER_REQUIRE(gpu_shader_material_tangent.glsl) + +void node_geometry(vec3 orco, out vec3 position, out vec3 normal, out vec3 tangent, @@ -15,39 +12,21 @@ void node_geometry(vec3 I, out float random_per_island) { /* handle perspective/orthographic */ - vec3 I_view = (ProjectionMatrix[3][3] == 0.0) ? normalize(I) : vec3(0.0, 0.0, -1.0); - incoming = -(toworld * vec4(I_view, 0.0)).xyz; - -#if defined(WORLD_BACKGROUND) || defined(PROBE_CAPTURE) - position = -incoming; - true_normal = normal = incoming; - tangent = parametric = vec3(0.0); - vec3(0.0); - backfacing = 0.0; - pointiness = 0.0; -#else - - position = worldPosition; -# ifndef VOLUMETRICS - normal = normalize(N); - vec3 B = dFdx(worldPosition); - vec3 T = dFdy(worldPosition); - true_normal = normalize(cross(B, T)); -# else - normal = (toworld * vec4(N, 0.0)).xyz; - true_normal = normal; -# endif + incoming = coordinate_incoming(g_data.P); + position = g_data.P; + normal = g_data.N; + true_normal = g_data.Ng; -# ifdef HAIR_SHADER - tangent = -hairTangent; -# else - tangent_orco_z(orco, orco); - node_tangent(N, orco, objmat, tangent); -# endif + if (g_data.is_strand) { + tangent = g_data.T; + } + else { + tangent_orco_z(orco, orco); + node_tangent(orco, tangent); + } - parametric = vec3(barycentric, 0.0); - backfacing = (gl_FrontFacing) ? 0.0 : 1.0; + parametric = vec3(g_data.barycentric_coords, 0.0); + backfacing = (FrontFacing) ? 0.0 : 1.0; pointiness = 0.5; random_per_island = 0.0; -#endif } |