Merge remote-tracking branch 'upstream/master'
Conflicts: indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedNoColorF.glsl indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyF.glsl indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl indra/newview/app_settings/shaders/class1/deferred/giF.glsl indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
This commit is contained in:
@@ -49,6 +49,23 @@ VARYING vec2 vary_fragcoord;
|
||||
uniform mat4 inv_proj;
|
||||
uniform vec2 screen_res;
|
||||
|
||||
vec2 encode_normal(vec3 n)
|
||||
{
|
||||
float f = sqrt(8 * n.z + 8);
|
||||
return n.xy / f + 0.5;
|
||||
}
|
||||
|
||||
vec3 decode_normal (vec2 enc)
|
||||
{
|
||||
vec2 fenc = enc*4-2;
|
||||
float f = dot(fenc,fenc);
|
||||
float g = sqrt(1-f/4);
|
||||
vec3 n;
|
||||
n.xy = fenc*g;
|
||||
n.z = 1-f/2;
|
||||
return n;
|
||||
}
|
||||
|
||||
vec4 getPosition(vec2 pos_screen)
|
||||
{
|
||||
float depth = texture2DRect(depthMap, pos_screen.xy).r;
|
||||
@@ -115,19 +132,6 @@ float calcAmbientOcclusion(vec4 pos, vec3 norm)
|
||||
return (rtn * rtn);
|
||||
}
|
||||
|
||||
vec3 unpack(vec2 tc)
|
||||
{
|
||||
//#define PACK_NORMALS
|
||||
#ifdef PACK_NORMALS
|
||||
vec2 enc = texture2DRect(normalMap, tc).xy;
|
||||
enc = enc*4.0-2.0;
|
||||
float prod = dot(enc,enc);
|
||||
return vec3(enc*sqrt(1.0-prod*.25),1.0-prod*.5);
|
||||
#else
|
||||
vec3 norm = texture2DRect(normalMap, tc).xyz;
|
||||
return norm*2.0-1.0;
|
||||
#endif
|
||||
}
|
||||
void main()
|
||||
{
|
||||
vec2 pos_screen = vary_fragcoord.xy;
|
||||
@@ -136,7 +140,8 @@ void main()
|
||||
|
||||
vec4 pos = getPosition(pos_screen);
|
||||
|
||||
vec3 norm = unpack(pos_screen); // unpack norm
|
||||
vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
|
||||
norm = decode_normal(norm.xy);
|
||||
|
||||
frag_color[0] = 1.0;
|
||||
frag_color[1] = calcAmbientOcclusion(pos, norm);
|
||||
|
||||
Reference in New Issue
Block a user