batrix/shaders/cel_shader/includes/normal_map.gdshaderinc
2025-02-27 02:08:29 +10:00

29 lines
638 B
Plaintext

group_uniforms NormalMap;
uniform float normal_scale : hint_range(-16,16) = 1.0;
uniform sampler2D normal_map : hint_normal;
group_uniforms;
struct NormalData {
vec3 vector;
vec3 map;
float depth;
};
NormalData normal_map_fragment(
vec2 uv,
vec3 normal,
vec3 tangent,
vec3 binormal,
) {
vec3 map = texture(normal_map, uv).rgb;
vec3 vector = map;
vector.xy = vector.xy * 2.0 - 1.0;
vector.z = sqrt(max(0.0, 1.0 - dot(vector.xy, vector.xy)));
vec3 ref_normal = normalize(mix(
normal,
tangent * vector.x + binormal * vector.y + normal * vector.z,
normal_scale
));
return NormalData(vector, map, normal_scale);
}