Prepare octahedron normal encoding.

This commit is contained in:
Lubos Lenco 2016-04-16 13:19:03 +02:00
parent 6cc221f43e
commit d5010e4bc3
3 changed files with 30 additions and 0 deletions

View file

@ -45,6 +45,10 @@ in vec3 normal;
// in vec3 vnormal;
#endif
vec2 octahedronWrap(vec2 v) {
return (1.0 - abs(v.yx)) * (vec2(v.x >= 0.0 ? 1.0 : -1.0, v.y >= 0.0 ? 1.0 : -1.0));
}
void main() {
#ifdef _NMTex
@ -85,6 +89,11 @@ void main() {
// occlusion
// n /= (abs(n.x) + abs(n.y) + abs(n.z));
// n.xy = n.z >= 0.0 ? n.xy : octahedronWrap(n.xy);
// n.xy = n.xy * 0.5 + 0.5;
// gl_FragData[0] = vec4(n.xy, 1.0, depth);
gl_FragData[0] = vec4(n.xyz, depth);
gl_FragData[1] = vec4(position.xyz, roughness);
gl_FragData[2] = vec4(baseColor.rgb, metalness);

View file

@ -130,6 +130,10 @@ float shadowTest(vec4 lPos) {
return PCF(vec2(2048, 2048), lPosH.st, lPosH.z - 0.005);
}
vec2 octahedronWrap(vec2 v) {
return (1.0 - abs(v.yx)) * (vec2(v.x >= 0.0 ? 1.0 : -1.0, v.y >= 0.0 ? 1.0 : -1.0));
}
void main() {
vec4 g0 = texture(gbuffer0, texCoord); // Normals, depth
@ -140,6 +144,12 @@ void main() {
vec4 g2 = texture(gbuffer2, texCoord); // Base color, metalness
float ao = texture(ssaotex, texCoord).r;
// vec2 enc = g0.rg;
// vec3 n;
// n.z = 1.0 - abs(enc.x) - abs(enc.y);
// n.xy = n.z >= 0.0 ? enc.xy : octahedronWrap(enc.xy);
// n = normalize(n);
vec3 n = g0.rgb;
vec3 p = g1.rgb;
//n = normalize(n);

View file

@ -40,6 +40,10 @@ float linearize(float depth, float znear, float zfar) {
// return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
// }
vec2 octahedronWrap(vec2 v) {
return (1.0 - abs(v.yx)) * (vec2(v.x >= 0.0 ? 1.0 : -1.0, v.y >= 0.0 ? 1.0 : -1.0));
}
void main() {
vec2 kernel[kernelSize];
kernel[0] = vec2(1.0, 0.0);
@ -65,6 +69,13 @@ void main() {
vec4 g0 = texture(gbuffer0, texCoord);
vec4 g1 = texture(gbuffer1, texCoord);
// vec2 enc = g0.rg;
// vec3 N;
// N.z = 1.0 - abs(enc.x) - abs(enc.y);
// N.xy = N.z >= 0.0 ? enc.xy : octahedronWrap(enc.xy);
// N = normalize(N);
vec3 N = g0.rgb;
vec3 P = g1.rgb;