29 lines
638 B
Plaintext
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);
|
|
}
|