NORSPEC-261 No more magic numbers, parity between forward and deferred rendering WRT to windlight and legacy shininess.

Reviewed by Graham (a little bit).
meow-7.2.2
Dave Parks 2013-06-13 18:13:30 -05:00
parent 7b28a9a541
commit 8d67ad3d86
15 changed files with 1008 additions and 984 deletions

View File

@ -78,6 +78,7 @@ uniform vec2 screen_res;
vec3 calcDirectionalLight(vec3 n, vec3 l)
{
float a = max(dot(n,l),0.0);
a = pow(a, 1.0/1.3);
return vec3(a,a,a);
}
@ -87,7 +88,7 @@ vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float
vec3 lv = lp.xyz-v;
//get distance
float d = dot(lv,lv);
float d = length(lv);
float da = 0.0;
@ -97,9 +98,11 @@ vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float
lv = normalize(lv);
//distance attenuation
float dist2 = d/la;
da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
da = pow(da, 2.2) * 2.2;
float dist = d/la;
da = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);
da *= da;
da *= 1.4;
// spotlight coefficient.
float spot = max(dot(-ln, lv), is_pointlight);
@ -212,6 +215,7 @@ void main()
#else
vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy);
#endif
vec4 gamma_diff = diff;
diff.rgb = pow(diff.rgb, vec3(2.2f, 2.2f, 2.2f));
@ -224,7 +228,7 @@ void main()
vec3 normal = vary_norm;
vec3 l = light_position[0].xyz;
vec3 dlight = calcDirectionalLight(normal, l) * 2.6;
vec3 dlight = calcDirectionalLight(normal, l);
dlight = dlight * vary_directional.rgb * vary_pointlight_col;
#if HAS_SHADOW
@ -233,13 +237,16 @@ void main()
vec4 col = vec4(vary_ambient + dlight, vertex_color_alpha);
#endif
vec4 color = diff * col;
vec4 color = gamma_diff * col;
color.rgb = atmosLighting(color.rgb);
color.rgb = scaleSoftClip(color.rgb);
color.rgb = pow(color.rgb, vec3(2.2));
col = vec4(0,0,0,0);
#define LIGHT_LOOP(i) col.rgb += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, normal, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z);
LIGHT_LOOP(1)
@ -250,7 +257,7 @@ void main()
LIGHT_LOOP(6)
LIGHT_LOOP(7)
color.rgb += diff.rgb * vary_pointlight_col * col.rgb;
color.rgb += diff.rgb * pow(vary_pointlight_col, vec3(2.2)) * col.rgb;
color.rgb = pow(color.rgb, vec3(1.0/2.2));

View File

@ -58,8 +58,6 @@ mat4 getSkinnedTransform();
vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
void calcAtmospherics(vec3 inPositionEye);
vec3 calcDirectionalLight(vec3 n, vec3 l);
vec3 atmosAmbient(vec3 light);
vec3 atmosAffectDirectionalLight(float lightIntensity);
vec3 scaleDownLight(vec3 light);
@ -88,12 +86,6 @@ uniform vec3 light_diffuse[8];
uniform vec3 sun_dir;
vec3 calcDirectionalLight(vec3 n, vec3 l)
{
float a = max(dot(n,l),0.0);
return vec3(a,a,a);
}
vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
{
//get light vector
@ -184,7 +176,7 @@ void main()
//vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.));
vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);
vec3 diff = pow(diffuse_color.rgb, vec3(2.2));
vec3 diff = diffuse_color.rgb;

View File

@ -127,9 +127,9 @@ void main()
bool light_contrib = (i < light_count);
vec3 lv = light[i].xyz-pos;
float dist2 = dot(lv,lv);
dist2 /= light[i].w;
if (dist2 > 1.0)
float dist = length(lv);
dist /= light[i].w;
if (dist > 1.0)
{
light_contrib = false;
}
@ -146,10 +146,9 @@ void main()
da = dot(norm, lv);
float fa = light_col[i].a+1.0;
float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);
dist_atten *= dist_atten* 1.4;
dist_atten = pow(dist_atten, 2.2) * 2.2;
dist_atten *= noise;
float lit = da * dist_atten;

View File

@ -67,38 +67,38 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
#ifdef SINGLE_FP_ONLY
vec2 encode_normal(vec3 n)
{
vec2 sn;
sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
return sn;
}
vec3 decode_normal (vec2 enc)
{
vec3 n;
n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
n.z = sqrt(1.0f - dot(n.xy,n.xy));
return n;
}
#else
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;
}
#ifdef SINGLE_FP_ONLY
vec2 encode_normal(vec3 n)
{
vec2 sn;
sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
return sn;
}
vec3 decode_normal (vec2 enc)
{
vec3 n;
n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
n.z = sqrt(1.0f - dot(n.xy,n.xy));
return n;
}
#else
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;
}
#endif
vec4 correctWithGamma(vec4 col)
@ -177,9 +177,9 @@ void main()
vec3 pos = getPosition(frag.xy).xyz;
vec3 lv = center.xyz-pos.xyz;
float dist2 = dot(lv,lv);
dist2 /= size;
if (dist2 > 1.0)
float dist = length(lv);
dist /= size;
if (dist > 1.0)
{
discard;
}
@ -201,8 +201,10 @@ void main()
proj_tc.xyz /= proj_tc.w;
float fa = falloff+1.0;
float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0);
dist_atten = pow(dist_atten, 2.2) * 2.2;
float dist_atten = min(1.0-(dist-1.0*(1.0-fa))/fa, 1.0);
dist_atten *= dist_atten;
dist_atten *= 1.4;
if (dist_atten <= 0.0)
{
discard;

View File

@ -54,38 +54,38 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
uniform vec4 viewport;
#ifdef SINGLE_FP_ONLY
vec2 encode_normal(vec3 n)
{
vec2 sn;
sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
return sn;
}
vec3 decode_normal (vec2 enc)
{
vec3 n;
n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
n.z = sqrt(1.0f - dot(n.xy,n.xy));
return n;
}
#else
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;
}
#ifdef SINGLE_FP_ONLY
vec2 encode_normal(vec3 n)
{
vec2 sn;
sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
return sn;
}
vec3 decode_normal (vec2 enc)
{
vec3 n;
n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
n.z = sqrt(1.0f - dot(n.xy,n.xy));
return n;
}
#else
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;
}
#endif
vec4 getPosition(vec2 pos_screen)
@ -110,9 +110,9 @@ void main()
vec3 pos = getPosition(frag.xy).xyz;
vec3 lv = trans_center.xyz-pos;
float dist2 = dot(lv,lv);
dist2 /= size;
if (dist2 > 1.0)
float dist = length(lv);
dist /= size;
if (dist > 1.0)
{
discard;
}
@ -133,8 +133,10 @@ void main()
vec3 col = texture2DRect(diffuseRect, frag.xy).rgb;
float fa = falloff+1.0;
float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
dist_atten = pow(dist_atten, 2.2) * 2.2;
float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);
dist_atten *= dist_atten;
dist_atten *= 1.4;
float lit = da * dist_atten * noise;
col = color.rgb*lit*col;

View File

@ -37,7 +37,7 @@ VARYING vec3 trans_center;
void main()
{
//transform vertex
vec3 p = position*sqrt(size)+center;
vec3 p = position*size+center;
vec4 pos = modelview_projection_matrix * vec4(p.xyz, 1.0);
vary_fragcoord = pos;
trans_center = (modelview_matrix*vec4(center.xyz, 1.0)).xyz;

View File

@ -248,9 +248,9 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {
+ tmpAmbient)));
//brightness of surface both sunlight and ambient
setSunlitColor(pow(vec3(sunlight * .5), vec3(global_gamma)) * global_gamma);
setAmblitColor(pow(vec3(tmpAmbient * .25), vec3(global_gamma)) * global_gamma);
setAdditiveColor(pow(getAdditiveColor() * vec3(1.0 - temp1), vec3(global_gamma)) * global_gamma);
setSunlitColor(vec3(sunlight * .5));
setAmblitColor(vec3(tmpAmbient * .25));
setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1));
}
vec3 atmosLighting(vec3 light)
@ -325,9 +325,13 @@ void main()
norm.xyz = decode_normal(norm.xy); // unpack norm
float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
da = pow(da, 1.0/1.3);
vec4 diffuse = texture2DRect(diffuseRect, tc);
//convert to gamma space
diffuse.rgb = pow(diffuse.rgb, vec3(1.0/2.2));
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
vec3 col;
float bloom = 0.0;
@ -342,7 +346,7 @@ void main()
col.rgb *= ambient;
col += atmosAffectDirectionalLight(max(min(da, 1.0) * 2.8, 0.0));
col += atmosAffectDirectionalLight(max(min(da, 1.0), 0.0));
col *= diffuse.rgb;
@ -372,10 +376,8 @@ void main()
vec3 refcol = textureCube(environmentMap, env_vec).rgb;
col = mix(pow(col.rgb, vec3(1.0/2.2)), refcol,
col = mix(col.rgb, refcol,
envIntensity);
col = pow(col, vec3(2.2));
}
if (norm.w < 0.5)
@ -384,6 +386,8 @@ void main()
col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
}
col = pow(col, vec3(2.2));
//col = vec3(1,0,1);
//col.g = envIntensity;
}

View File

@ -65,38 +65,38 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
#ifdef SINGLE_FP_ONLY
vec2 encode_normal(vec3 n)
{
vec2 sn;
sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
return sn;
}
vec3 decode_normal (vec2 enc)
{
vec3 n;
n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
n.z = sqrt(1.0f - dot(n.xy,n.xy));
return n;
}
#else
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;
}
#ifdef SINGLE_FP_ONLY
vec2 encode_normal(vec3 n)
{
vec2 sn;
sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
return sn;
}
vec3 decode_normal (vec2 enc)
{
vec3 n;
n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
n.z = sqrt(1.0f - dot(n.xy,n.xy));
return n;
}
#else
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;
}
#endif
vec4 correctWithGamma(vec4 col)
@ -175,9 +175,9 @@ void main()
vec3 pos = getPosition(frag.xy).xyz;
vec3 lv = trans_center.xyz-pos.xyz;
float dist2 = dot(lv,lv);
dist2 /= size;
if (dist2 > 1.0)
float dist = length(lv);
dist /= size;
if (dist > 1.0)
{
discard;
}
@ -199,8 +199,10 @@ void main()
proj_tc.xyz /= proj_tc.w;
float fa = falloff+1.0;
float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0);
dist_atten = pow(dist_atten, 2.2) * 2.2;
float dist_atten = min(1.0-(dist-1.0*(1.0-fa))/fa, 1.0);
dist_atten *= dist_atten;
dist_atten *= 1.4;
if (dist_atten <= 0.0)
{
discard;
@ -279,10 +281,7 @@ void main()
//col += spec.rgb;
}
}
if (envIntensity > 0.0)
{

View File

@ -68,38 +68,38 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
#ifdef SINGLE_FP_ONLY
vec2 encode_normal(vec3 n)
{
vec2 sn;
sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
return sn;
}
vec3 decode_normal (vec2 enc)
{
vec3 n;
n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
n.z = sqrt(1.0f - dot(n.xy,n.xy));
return n;
}
#else
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;
}
#ifdef SINGLE_FP_ONLY
vec2 encode_normal(vec3 n)
{
vec2 sn;
sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
return sn;
}
vec3 decode_normal (vec2 enc)
{
vec3 n;
n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
n.z = sqrt(1.0f - dot(n.xy,n.xy));
return n;
}
#else
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;
}
#endif
vec4 correctWithGamma(vec4 col)
@ -179,9 +179,9 @@ void main()
vec3 pos = getPosition(frag.xy).xyz;
vec3 lv = center.xyz-pos.xyz;
float dist2 = dot(lv,lv);
dist2 /= size;
if (dist2 > 1.0)
float dist = length(lv);
dist /= size;
if (dist > 1.0)
{
discard;
}
@ -215,8 +215,9 @@ void main()
proj_tc.xyz /= proj_tc.w;
float fa = falloff+1.0;
float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0);
dist_atten = pow(dist_atten, 2.2) * 2.2;
float dist_atten = min(1.0-(dist-1.0*(1.0-fa))/fa, 1.0);
dist_atten *= dist_atten;
dist_atten *= 1.4;
if (dist_atten <= 0.0)
{
discard;

View File

@ -254,9 +254,13 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {
+ tmpAmbient)));
//brightness of surface both sunlight and ambient
setSunlitColor(pow(vec3(sunlight * .5), vec3(global_gamma)) * global_gamma);
/*setSunlitColor(pow(vec3(sunlight * .5), vec3(global_gamma)) * global_gamma);
setAmblitColor(pow(vec3(tmpAmbient * .25), vec3(global_gamma)) * global_gamma);
setAdditiveColor(pow(getAdditiveColor() * vec3(1.0 - temp1), vec3(global_gamma)) * global_gamma);
setAdditiveColor(pow(getAdditiveColor() * vec3(1.0 - temp1), vec3(global_gamma)) * global_gamma);*/
setSunlitColor(vec3(sunlight * .5));
setAmblitColor(vec3(tmpAmbient * .25));
setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1));
}
vec3 atmosLighting(vec3 light)
@ -332,7 +336,14 @@ void main()
float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
float light_gamma = 1.0/1.3;
da = pow(da, light_gamma);
vec4 diffuse = texture2DRect(diffuseRect, tc);
//convert to gamma space
diffuse.rgb = pow(diffuse.rgb, vec3(1.0/2.2));
vec3 col;
float bloom = 0.0;
@ -340,7 +351,12 @@ void main()
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
scol_ambocc = pow(scol_ambocc, vec2(light_gamma));
float scol = max(scol_ambocc.r, diffuse.a);
float ambocc = scol_ambocc.g;
calcAtmospherics(pos.xyz, ambocc);
@ -353,7 +369,7 @@ void main()
col.rgb *= ambient;
col += atmosAffectDirectionalLight(max(min(da, scol) * 2.6, 0.0));
col += atmosAffectDirectionalLight(max(min(da, scol), 0.0));
col *= diffuse.rgb;
@ -374,28 +390,27 @@ void main()
}
col = mix(col.rgb, diffuse.rgb, diffuse.a);
col = mix(col, diffuse.rgb, diffuse.a);
if (envIntensity > 0.0)
{ //add environmentmap
vec3 env_vec = env_mat * refnormpersp;
vec3 refcol = textureCube(environmentMap, env_vec).rgb;
col = mix(pow(col.rgb, vec3(1.0/2.2)), refcol,
col = mix(col.rgb, refcol,
envIntensity);
col = pow(col, vec3(2.2));
}
if (norm.w < 0.5)
{
col = mix(atmosLighting(col), fullbrightAtmosTransport(col), diffuse.a);
col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
}
col = pow(col, vec3(2.2));
//col = vec3(1,0,1);
//col.g = envIntensity;
}

View File

@ -68,38 +68,38 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
#ifdef SINGLE_FP_ONLY
vec2 encode_normal(vec3 n)
{
vec2 sn;
sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
return sn;
}
vec3 decode_normal (vec2 enc)
{
vec3 n;
n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
n.z = sqrt(1.0f - dot(n.xy,n.xy));
return n;
}
#else
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;
}
#ifdef SINGLE_FP_ONLY
vec2 encode_normal(vec3 n)
{
vec2 sn;
sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
return sn;
}
vec3 decode_normal (vec2 enc)
{
vec3 n;
n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
n.z = sqrt(1.0f - dot(n.xy,n.xy));
return n;
}
#else
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;
}
#endif
vec4 correctWithGamma(vec4 col)
@ -178,9 +178,9 @@ void main()
vec3 pos = getPosition(frag.xy).xyz;
vec3 lv = trans_center.xyz-pos.xyz;
float dist2 = dot(lv,lv);
dist2 /= size;
if (dist2 > 1.0)
float dist = length(lv);
dist /= size;
if (dist > 1.0)
{
discard;
}
@ -212,8 +212,10 @@ void main()
proj_tc.xyz /= proj_tc.w;
float fa = falloff+1.0;
float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0);
dist_atten = pow(dist_atten, 2.2) * 2.2;
float dist_atten = min(1.0-(dist-1.0*(1.0-fa))/fa, 1.0);
dist_atten *= dist_atten;
dist_atten *= 1.4;
if (dist_atten <= 0.0)
{
discard;

View File

@ -65,38 +65,38 @@ uniform float shadow_offset;
uniform float spot_shadow_bias;
uniform float spot_shadow_offset;
#ifdef SINGLE_FP_ONLY
vec2 encode_normal(vec3 n)
{
vec2 sn;
sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
return sn;
}
vec3 decode_normal (vec2 enc)
{
vec3 n;
n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
n.z = sqrt(1.0f - dot(n.xy,n.xy));
return n;
}
#else
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;
}
#ifdef SINGLE_FP_ONLY
vec2 encode_normal(vec3 n)
{
vec2 sn;
sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
return sn;
}
vec3 decode_normal (vec2 enc)
{
vec3 n;
n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
n.z = sqrt(1.0f - dot(n.xy,n.xy));
return n;
}
#else
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;
}
#endif
vec4 getPosition(vec2 pos_screen)

View File

@ -54,7 +54,6 @@ uniform float density_multiplier;
uniform float distance_multiplier;
uniform float max_y;
uniform vec4 glow;
uniform float global_gamma;
void calcAtmospherics(vec3 inPositionEye) {
@ -132,9 +131,9 @@ void calcAtmospherics(vec3 inPositionEye) {
+ tmpAmbient)));
//brightness of surface both sunlight and ambient
setSunlitColor(pow(vec3(sunlight * .5), vec3(global_gamma)) * global_gamma);
setAmblitColor(pow(vec3(tmpAmbient * .25), vec3(global_gamma)) * global_gamma);
setAdditiveColor(pow(getAdditiveColor() * vec3(1.0 - temp1), vec3(global_gamma)) * global_gamma);
setSunlitColor(vec3(sunlight * .5));
setAmblitColor(vec3(tmpAmbient * .25));
setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1));
// vary_SunlitColor = vec3(0);
// vary_AmblitColor = vec3(0);

View File

@ -1401,7 +1401,8 @@ void LLPipeline::createLUTBuffers()
LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_R16F, lightResX, lightResY, GL_RED, GL_FLOAT, ls, false);
//LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_UNSIGNED_BYTE, lightResX, lightResY, GL_RED, GL_UNSIGNED_BYTE, ls, false);
gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_TRILINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
delete [] ls;
}
@ -5825,9 +5826,9 @@ void LLPipeline::setupAvatarLights(BOOL for_edit)
if (LLPipeline::sRenderDeferred)
{
diffuse.mV[0] = powf(diffuse.mV[0], 2.2f);
/*diffuse.mV[0] = powf(diffuse.mV[0], 2.2f);
diffuse.mV[1] = powf(diffuse.mV[1], 2.2f);
diffuse.mV[2] = powf(diffuse.mV[2], 2.2f);
diffuse.mV[2] = powf(diffuse.mV[2], 2.2f);*/
}
mHWLightColors[1] = diffuse;
@ -5872,9 +5873,9 @@ void LLPipeline::setupAvatarLights(BOOL for_edit)
if (LLPipeline::sRenderDeferred)
{
backlight_diffuse.mV[0] = powf(backlight_diffuse.mV[0], 2.2f);
/*backlight_diffuse.mV[0] = powf(backlight_diffuse.mV[0], 2.2f);
backlight_diffuse.mV[1] = powf(backlight_diffuse.mV[1], 2.2f);
backlight_diffuse.mV[2] = powf(backlight_diffuse.mV[2], 2.2f);
backlight_diffuse.mV[2] = powf(backlight_diffuse.mV[2], 2.2f);*/
}
mHWLightColors[1] = backlight_diffuse;
@ -6086,9 +6087,9 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
if (LLPipeline::sRenderDeferred)
{
light_diffuse.mV[0] = powf(light_diffuse.mV[0], 2.2f);
/*light_diffuse.mV[0] = powf(light_diffuse.mV[0], 2.2f);
light_diffuse.mV[1] = powf(light_diffuse.mV[1], 2.2f);
light_diffuse.mV[2] = powf(light_diffuse.mV[2], 2.2f);
light_diffuse.mV[2] = powf(light_diffuse.mV[2], 2.2f);*/
}
mHWLightColors[0] = light_diffuse;
@ -6161,9 +6162,9 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
if (LLPipeline::sRenderDeferred)
{
light_color.mV[0] = powf(light_color.mV[0], 2.2f);
/*light_color.mV[0] = powf(light_color.mV[0], 2.2f);
light_color.mV[1] = powf(light_color.mV[1], 2.2f);
light_color.mV[2] = powf(light_color.mV[2], 2.2f);
light_color.mV[2] = powf(light_color.mV[2], 2.2f);*/
}
mHWLightColors[cur_light] = light_color;
@ -6176,7 +6177,7 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
if (sRenderDeferred)
{
F32 size = light_radius*1.5f;
light_state->setLinearAttenuation(size*size);
light_state->setLinearAttenuation(size);
light_state->setQuadraticAttenuation(light->getLightFalloff()*0.5f+1.f);
}
else
@ -6241,9 +6242,9 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
if (LLPipeline::sRenderDeferred)
{
light_color.mV[0] = powf(light_color.mV[0], 2.2f);
/*light_color.mV[0] = powf(light_color.mV[0], 2.2f);
light_color.mV[1] = powf(light_color.mV[1], 2.2f);
light_color.mV[2] = powf(light_color.mV[2], 2.2f);
light_color.mV[2] = powf(light_color.mV[2], 2.2f);*/
}
mHWLightColors[2] = light_color;
@ -8489,7 +8490,7 @@ void LLPipeline::renderDeferredLighting()
LLFastTimer ftm(FTM_LOCAL_LIGHTS);
gDeferredLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, c);
gDeferredLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s*s);
gDeferredLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s);
gDeferredLightProgram.uniform3fv(LLShaderMgr::DIFFUSE_COLOR, 1, col.mV);
gDeferredLightProgram.uniform1f(LLShaderMgr::LIGHT_FALLOFF, volume->getLightFalloff()*0.5f);
gGL.syncMatrices();
@ -8510,7 +8511,7 @@ void LLPipeline::renderDeferredLighting()
glh::vec3f tc(c);
mat.mult_matrix_vec(tc);
fullscreen_lights.push_back(LLVector4(tc.v[0], tc.v[1], tc.v[2], s*s));
fullscreen_lights.push_back(LLVector4(tc.v[0], tc.v[1], tc.v[2], s));
light_colors.push_back(LLVector4(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f));
}
}
@ -8543,12 +8544,12 @@ void LLPipeline::renderDeferredLighting()
setupSpotLight(gDeferredSpotLightProgram, drawablep);
LLColor3 col = volume->getLightColor();
col.mV[0] = powf(col.mV[0], 2.2f);
/*col.mV[0] = powf(col.mV[0], 2.2f);
col.mV[1] = powf(col.mV[1], 2.2f);
col.mV[2] = powf(col.mV[2], 2.2f);
col.mV[2] = powf(col.mV[2], 2.2f);*/
gDeferredSpotLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, c);
gDeferredSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s*s);
gDeferredSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s);
gDeferredSpotLightProgram.uniform3fv(LLShaderMgr::DIFFUSE_COLOR, 1, col.mV);
gDeferredSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_FALLOFF, volume->getLightFalloff()*0.5f);
gGL.syncMatrices();
@ -8595,11 +8596,11 @@ void LLPipeline::renderDeferredLighting()
col[count] = light_colors.front();
light_colors.pop_front();
col[count].mV[0] = powf(col[count].mV[0], 2.2f);
/*col[count].mV[0] = powf(col[count].mV[0], 2.2f);
col[count].mV[1] = powf(col[count].mV[1], 2.2f);
col[count].mV[2] = powf(col[count].mV[2], 2.2f);
col[count].mV[2] = powf(col[count].mV[2], 2.2f);*/
far_z = llmin(light[count].mV[2]-sqrtf(light[count].mV[3]), far_z);
far_z = llmin(light[count].mV[2]-light[count].mV[3], far_z);
//col[count] = pow4fsrgb(col[count], 2.2f);
count++;
if (count == max_count || fullscreen_lights.empty())
@ -8642,12 +8643,12 @@ void LLPipeline::renderDeferredLighting()
LLColor3 col = volume->getLightColor();
col.mV[0] = powf(col.mV[0], 2.2f);
/*col.mV[0] = powf(col.mV[0], 2.2f);
col.mV[1] = powf(col.mV[1], 2.2f);
col.mV[2] = powf(col.mV[2], 2.2f);
col.mV[2] = powf(col.mV[2], 2.2f);*/
gDeferredMultiSpotLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, tc.v);
gDeferredMultiSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s*s);
gDeferredMultiSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s);
gDeferredMultiSpotLightProgram.uniform3fv(LLShaderMgr::DIFFUSE_COLOR, 1, col.mV);
gDeferredMultiSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_FALLOFF, volume->getLightFalloff()*0.5f);
mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3);