Solara-Shaders/shaders/lib/util/encode.glsl
2024-06-22 15:15:55 -04:00

15 lines
375 B
GLSL

//Spheremap Transform from https://aras-p.info/texts/CompactNormalStorage.html
vec2 EncodeNormal(vec3 n) {
float f = sqrt(n.z * 8.0 + 8.0);
return n.xy / f + 0.5;
}
vec3 DecodeNormal(vec2 enc) {
vec2 fenc = enc * 4.0 - 2.0;
float f = dot(fenc,fenc);
float g = sqrt(1.0 - f / 4.0);
vec3 n;
n.xy = fenc * g;
n.z = 1.0 - f / 2.0;
return n;
}