diff options
Diffstat (limited to 'source/blender/gpu/shaders/material/gpu_shader_material_vector_displacement.glsl')
-rw-r--r-- | source/blender/gpu/shaders/material/gpu_shader_material_vector_displacement.glsl | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_vector_displacement.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_vector_displacement.glsl new file mode 100644 index 00000000000..b6b955dcdb4 --- /dev/null +++ b/source/blender/gpu/shaders/material/gpu_shader_material_vector_displacement.glsl @@ -0,0 +1,30 @@ +void node_vector_displacement_tangent(vec4 vector, + float midlevel, + float scale, + vec4 tangent, + vec3 normal, + mat4 obmat, + mat4 viewmat, + out vec3 result) +{ + /* TODO(fclem) this is broken. revisit latter. */ + vec3 N_object = normalize(((vec4(normal, 0.0) * viewmat) * obmat).xyz); + vec3 T_object = normalize(((vec4(tangent.xyz, 0.0) * viewmat) * obmat).xyz); + vec3 B_object = tangent.w * normalize(cross(N_object, T_object)); + + vec3 offset = (vector.xyz - vec3(midlevel)) * scale; + result = offset.x * T_object + offset.y * N_object + offset.z * B_object; + result = (obmat * vec4(result, 0.0)).xyz; +} + +void node_vector_displacement_object( + vec4 vector, float midlevel, float scale, mat4 obmat, out vec3 result) +{ + result = (vector.xyz - vec3(midlevel)) * scale; + result = (obmat * vec4(result, 0.0)).xyz; +} + +void node_vector_displacement_world(vec4 vector, float midlevel, float scale, out vec3 result) +{ + result = (vector.xyz - vec3(midlevel)) * scale; +} |