diff options
Diffstat (limited to 'indra/newview/app_settings/shaders/class2/deferred')
4 files changed, 0 insertions, 781 deletions
| diff --git a/indra/newview/app_settings/shaders/class2/deferred/indirect.glsl b/indra/newview/app_settings/shaders/class2/deferred/indirect.glsl deleted file mode 100644 index 67b98e0fb1..0000000000 --- a/indra/newview/app_settings/shaders/class2/deferred/indirect.glsl +++ /dev/null @@ -1,32 +0,0 @@ -/**  - * @file class2/deferred/indirect.glsl - * - * $LicenseInfo:firstyear=2018&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2007, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -float calcAmbientOcclusion(vec4 pos, vec3 norm, vec2 pos_screen); - -vec3 getIndirect(vec3 ambient, vec3 norm, vec4 pos, vec2 pos_screen) -{ -    return ambient * calcAmbientOcclusion(pos, norm, pos_screen); -} - diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl deleted file mode 100644 index ba419e7a65..0000000000 --- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl +++ /dev/null @@ -1,298 +0,0 @@ -/**  - * @file multiSpotLightF.glsl - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2007, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ -  -#extension GL_ARB_texture_rectangle : enable -#extension GL_ARB_shader_texture_lod : enable - -/*[EXTRA_CODE_HERE]*/ - -#ifdef DEFINE_GL_FRAGCOLOR -out vec4 frag_color; -#else -#define frag_color gl_FragColor -#endif - -uniform sampler2D diffuseRect; -uniform sampler2D specularRect; -uniform sampler2D depthMap; -uniform sampler2D normalMap; -uniform samplerCube environmentMap; -uniform sampler2D lightMap; -uniform sampler2D noiseMap; -uniform sampler2D projectionMap; -uniform sampler2D lightFunc; - -uniform mat4 proj_mat; //screen space to light space -uniform float proj_near; //near clip for projection -uniform vec3 proj_p; //plane projection is emitting from (in screen space) -uniform vec3 proj_n; -uniform float proj_focus; //distance from plane to begin blurring -uniform float proj_lod;  //(number of mips in proj map) -uniform float proj_range; //range between near clip and far clip plane of projection -uniform float proj_ambient_lod; -uniform float proj_ambiance; -uniform float near_clip; -uniform float far_clip; - -uniform vec3 proj_origin; //origin of projection to be used for angular attenuation -uniform float sun_wash; -uniform int proj_shadow_idx; -uniform float shadow_fade; - -uniform vec3 center; -uniform float size; -uniform vec3 color; -uniform float falloff; - -VARYING vec4 vary_fragcoord; -uniform vec2 screen_res; - -uniform mat4 inv_proj; - -vec3 srgb_to_linear(vec3 cs); -vec3 getNorm(vec2 pos_screen); - -vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod) -{ -    vec4 ret = texture2DLod(projectionMap, tc, lod); -    ret.rgb = srgb_to_linear(ret.rgb); -    vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); -     -    float det = min(lod/(proj_lod*0.5), 1.0); -     -    float d = min(dist.x, dist.y); -     -    d *= min(1, d * (proj_lod - lod)); -     -    float edge = 0.25*det; -     -    ret *= clamp(d/edge, 0.0, 1.0); -     -    return ret; -} - -vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod) -{ -    vec4 ret = texture2DLod(projectionMap, tc, lod); -    ret.rgb = srgb_to_linear(ret.rgb); - -    vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); -     -    float det = min(lod/(proj_lod*0.5), 1.0); -     -    float d = min(dist.x, dist.y); -     -    float edge = 0.25*det; -         -    ret *= clamp(d/edge, 0.0, 1.0); -     -    return ret; -} - -vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod) -{ -    vec4 ret = texture2DLod(projectionMap, tc, lod); -    ret.rgb = srgb_to_linear(ret.rgb); - -    vec2 dist = tc-vec2(0.5); -     -    float d = dot(dist,dist); -         -    ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0), 1.0); -     -    return ret; -} - -vec4 getPosition(vec2 pos_screen); - -void main()  -{ - -    vec3 col = vec3(0,0,0); - -#if defined(LOCAL_LIGHT_KILL) -    discard; -#else -    vec4 frag = vary_fragcoord; -    frag.xyz /= frag.w; -    frag.xyz = frag.xyz*0.5+0.5; -     -    vec3 pos = getPosition(frag.xy).xyz; -    vec3 lv = center.xyz-pos.xyz; -    float dist = length(lv); - -    if (dist >= size) -    { -        discard; -    } -    dist /= size; - -    float shadow = 1.0; -     -    if (proj_shadow_idx >= 0) -    { -        vec4 shd = texture2D(lightMap, frag.xy); -        shadow = (proj_shadow_idx==0)?shd.b:shd.a; -        shadow += shadow_fade; -        shadow = clamp(shadow, 0.0, 1.0);         -    } -     -    vec3 norm = texture2D(normalMap, frag.xy).xyz; -     -    float envIntensity = norm.z; - -    norm = getNorm(frag.xy); -     -    norm = normalize(norm); -    float l_dist = -dot(lv, proj_n); -     -    vec4 proj_tc = (proj_mat * vec4(pos.xyz, 1.0)); -    if (proj_tc.z < 0.0) -    { -        discard; -    } -     -    proj_tc.xyz /= proj_tc.w; -     -    float fa = falloff+1.0; -    float dist_atten = min(1.0-(dist-1.0*(1.0-fa))/fa, 1.0); -    dist_atten *= dist_atten; -    dist_atten *= 2.0; -    if (dist_atten <= 0.0) -    { -        discard; -    } -     -    lv = proj_origin-pos.xyz; -    lv = normalize(lv); -    float da = dot(norm, lv); -         -    vec3 diff_tex = texture2D(diffuseRect, frag.xy).rgb; -  -    vec4 spec = texture2D(specularRect, frag.xy); - -    vec3 dlit = vec3(0, 0, 0); - -    float noise = texture2D(noiseMap, frag.xy).b; -    if (proj_tc.z > 0.0 && -        proj_tc.x < 1.0 && -        proj_tc.y < 1.0 && -        proj_tc.x > 0.0 && -        proj_tc.y > 0.0) -    { -        float amb_da = proj_ambiance; -        float lit = 0.0; - -        if (da > 0.0) -        { -            lit = da * dist_atten * noise; - -            float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0); -            float lod = diff * proj_lod; -             -            vec4 plcol = texture2DLodDiffuse(projectionMap, proj_tc.xy, lod); -         -            dlit = color.rgb * plcol.rgb * plcol.a; -             -            col = dlit*lit*diff_tex*shadow; - -            // unshadowed for consistency between forward and deferred? -            amb_da += (da*0.5+0.5) /* * (1.0-shadow) */ * proj_ambiance; -        } -         -        //float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0); -        vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod); - -        // use unshadowed for consistency between forward and deferred? -        amb_da += (da*da*0.5+0.5) /* * (1.0-shadow) */ * proj_ambiance; -        amb_da *= dist_atten * noise; -        amb_da = min(amb_da, 1.0-lit); - -        col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; -    } -     - -    if (spec.a > 0.0) -    { -        vec3 npos = -normalize(pos); -        dlit *= min(da*6.0, 1.0) * dist_atten; - -        //vec3 ref = dot(pos+lv, norm); -        vec3 h = normalize(lv+npos); -        float nh = dot(norm, h); -        float nv = dot(norm, npos); -        float vh = dot(npos, h); -        float sa = nh; -        float fres = pow(1 - dot(h, npos), 5)*0.4+0.5; - -        float gtdenom = 2 * nh; -        float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh)); -                                 -        if (nh > 0.0) -        { -            float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da); -            vec3 speccol = dlit*scol*spec.rgb*shadow; -            speccol = clamp(speccol, vec3(0), vec3(1)); -            col += speccol; -        } -    }    - -    if (envIntensity > 0.0) -    { -        vec3 ref = reflect(normalize(pos), norm); -         -        //project from point pos in direction ref to plane proj_p, proj_n -        vec3 pdelta = proj_p-pos; -        float ds = dot(ref, proj_n); -         -        if (ds < 0.0) -        { -            vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds; -             -            vec4 stc = (proj_mat * vec4(pfinal.xyz, 1.0)); - -            if (stc.z > 0.0) -            { -                stc /= stc.w; -                                 -                if (stc.x < 1.0 && -                    stc.y < 1.0 && -                    stc.x > 0.0 && -                    stc.y > 0.0) -                { -                    col += color.rgb * texture2DLodSpecular(projectionMap, stc.xy, (1 - spec.a) * (proj_lod * 0.6)).rgb * shadow * envIntensity; -                } -            } -        } -    } -#endif - -    //not sure why, but this line prevents MATBUG-194 -    col = max(col, vec3(0.0)); - -    //output linear -    frag_color.rgb = col; -    frag_color.a = 0.0; -} diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl deleted file mode 100644 index fab227f5a4..0000000000 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ /dev/null @@ -1,159 +0,0 @@ -/** - * @file class2/deferred/softenLightF.glsl - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2007, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#extension GL_ARB_texture_rectangle : enable -#extension GL_ARB_shader_texture_lod : enable - -/*[EXTRA_CODE_HERE]*/ - -#ifdef DEFINE_GL_FRAGCOLOR -out vec4 frag_color; -#else -#define frag_color gl_FragColor -#endif - -uniform sampler2D diffuseRect; -uniform sampler2D specularRect; -uniform sampler2D normalMap; -uniform sampler2D lightMap; -uniform sampler2D depthMap; -uniform samplerCube   environmentMap; -uniform sampler2D     lightFunc; - -uniform float blur_size; -uniform float blur_fidelity; - -// Inputs -uniform mat3 env_mat; - -uniform vec3 sun_dir; -uniform vec3 moon_dir; -uniform int  sun_up_factor; -VARYING vec2 vary_fragcoord; - -uniform mat4 inv_proj; -uniform vec2 screen_res; - -vec3 getNorm(vec2 pos_screen); -vec4 getPositionWithDepth(vec2 pos_screen, float depth); -float getDepth(vec2 pos_screen); - -void calcAtmosphericVars(vec3 inPositionEye, vec3 light_dir, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten, bool use_ao); -float getAmbientClamp(); -vec3  atmosFragLighting(vec3 l, vec3 additive, vec3 atten); -vec3  scaleSoftClipFrag(vec3 l); -vec3  fullbrightAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten); -vec3  fullbrightScaleSoftClip(vec3 light); - -vec3 linear_to_srgb(vec3 c); -vec3 srgb_to_linear(vec3 c); - -#ifdef WATER_FOG -vec4 applyWaterFogView(vec3 pos, vec4 color); -#endif - -void main() -{ -    vec2  tc           = vary_fragcoord.xy; -    float depth        = getDepth(tc.xy); -    vec4  pos          = getPositionWithDepth(tc, depth); -    vec4  norm         = texture2D(normalMap, tc); -    float envIntensity = norm.z; -    norm.xyz           = getNorm(tc); - -    vec3  light_dir   = (sun_up_factor == 1) ? sun_dir : moon_dir; -    float da          = clamp(dot(norm.xyz, light_dir.xyz), 0.0, 1.0); -    float light_gamma = 1.0 / 1.3; -    da                = pow(da, light_gamma); - -    vec4 diffuse     = texture2D(diffuseRect, tc); -         diffuse.rgb = linear_to_srgb(diffuse.rgb); // SL-14035 -    vec4 spec        = texture2D(specularRect, vary_fragcoord.xy); - -    vec2 scol_ambocc = texture2D(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; - -    vec3  color = vec3(0); -    float bloom = 0.0; - -    vec3 sunlit; -    vec3 amblit; -    vec3 additive; -    vec3 atten; -    calcAtmosphericVars(pos.xyz, light_dir, ambocc, sunlit, amblit, additive, atten, true); - -    color.rgb = amblit; - -    float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0); -    ambient *= 0.5; -    ambient *= ambient; -    ambient = (1.0 - ambient); -    color.rgb *= ambient; - -    vec3 sun_contrib = min(da, scol) * sunlit; -    color.rgb += sun_contrib; -    color.rgb *= diffuse.rgb; - -    vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); - -    if (spec.a > 0.0)  // specular reflection -    { -        float sa        = dot(refnormpersp, light_dir.xyz); -        vec3  dumbshiny = sunlit * scol * (texture2D(lightFunc, vec2(sa, spec.a)).r); - -        // add the two types of shiny together -        vec3 spec_contrib = dumbshiny * spec.rgb; -        bloom             = dot(spec_contrib, spec_contrib) / 6; -        color.rgb += spec_contrib; -    } - -    color.rgb = mix(color.rgb, diffuse.rgb, diffuse.a); - -    if (envIntensity > 0.0) -    {  // add environmentmap -        vec3 env_vec         = env_mat * refnormpersp; -        vec3 reflected_color = textureCube(environmentMap, env_vec).rgb; -        color                = mix(color.rgb, reflected_color, envIntensity); -    } - -    if (GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_ATMOS)) -    { -        color = mix(atmosFragLighting(color, additive, atten), fullbrightAtmosTransportFrag(color, additive, atten), diffuse.a); -        color = mix(scaleSoftClipFrag(color), fullbrightScaleSoftClip(color), diffuse.a); -    } - -#ifdef WATER_FOG -    vec4 fogged = applyWaterFogView(pos.xyz, vec4(color, bloom)); -    color       = fogged.rgb; -    bloom       = fogged.a; -#endif - -    // convert to linear as fullscreen lights need to sum in linear colorspace -    // and will be gamma (re)corrected downstream... -    frag_color.rgb = pos.xyz;// srgb_to_linear(color.rgb); -    frag_color.a   = bloom; -} diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl deleted file mode 100644 index e6a627fbf7..0000000000 --- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl +++ /dev/null @@ -1,292 +0,0 @@ -/**  - * @file spotLightF.glsl - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2007, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ -  -#extension GL_ARB_texture_rectangle : enable -#extension GL_ARB_shader_texture_lod : enable - -/*[EXTRA_CODE_HERE]*/ - -#ifdef DEFINE_GL_FRAGCOLOR -out vec4 frag_color; -#else -#define frag_color gl_FragColor -#endif - -uniform sampler2D diffuseRect; -uniform sampler2D specularRect; -uniform sampler2D depthMap; -uniform sampler2D normalMap; -uniform samplerCube environmentMap; -uniform sampler2D lightMap; -uniform sampler2D noiseMap; -uniform sampler2D projectionMap; -uniform sampler2D lightFunc; - -uniform mat4 proj_mat; //screen space to light space -uniform float proj_near; //near clip for projection -uniform vec3 proj_p; //plane projection is emitting from (in screen space) -uniform vec3 proj_n; -uniform float proj_focus; //distance from plane to begin blurring -uniform float proj_lod;  //(number of mips in proj map) -uniform float proj_range; //range between near clip and far clip plane of projection -uniform float proj_ambient_lod; -uniform float proj_ambiance; -uniform float near_clip; -uniform float far_clip; - -uniform vec3 proj_origin; //origin of projection to be used for angular attenuation -uniform float sun_wash; -uniform int proj_shadow_idx; -uniform float shadow_fade; - -uniform float size; -uniform vec3 color; -uniform float falloff; - -VARYING vec3 trans_center; -VARYING vec4 vary_fragcoord; -uniform vec2 screen_res; - -uniform mat4 inv_proj; - -vec3 getNorm(vec2 pos_screen); -vec3 srgb_to_linear(vec3 c); - -vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod) -{ -	vec4 ret = texture2DLod(projectionMap, tc, lod); -	ret.rgb = srgb_to_linear(ret.rgb); - -	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); -	 -	float det = min(lod/(proj_lod*0.5), 1.0); -	 -	float d = min(dist.x, dist.y); -     -    d *= min(1, d * (proj_lod - lod)); -	 -	float edge = 0.25*det; -     -	ret *= clamp(d/edge, 0.0, 1.0); -	 -	return ret; -} - -vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod) -{ -	vec4 ret = texture2DLod(projectionMap, tc, lod); -	ret.rgb = srgb_to_linear(ret.rgb); -	 -	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); -	 -	float det = min(lod/(proj_lod*0.5), 1.0); -	 -	float d = min(dist.x, dist.y); -	 -	float edge = 0.25*det; -		 -	ret *= clamp(d/edge, 0.0, 1.0); -	 -	return ret; -} - -vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod) -{ -	vec4 ret = texture2DLod(projectionMap, tc, lod); -	ret.rgb = srgb_to_linear(ret.rgb); -	 -	vec2 dist = tc-vec2(0.5); -	 -	float d = dot(dist,dist); -		 -	ret *= min(clamp((0.25-d)/0.25, 0.0, 1.0), 1.0); -	 -	return ret; -} - -vec4 getPosition(vec2 pos_screen); - -void main()  -{ -	vec3 col = vec3(0,0,0); - -#if defined(LOCAL_LIGHT_KILL) -    discard; -#else -	vec4 frag = vary_fragcoord; -	frag.xyz /= frag.w; -	frag.xyz = frag.xyz*0.5+0.5; -	 -	vec3 pos = getPosition(frag.xy).xyz; -	vec3 lv = trans_center.xyz-pos.xyz; -	float dist = length(lv); - -    if (dist >= size) -    { -        discard; -    } -	dist /= size; - -	float shadow = 1.0; -	 -	if (proj_shadow_idx >= 0) -	{ -		vec4 shd = texture2D(lightMap, frag.xy); -        shadow = (proj_shadow_idx == 0) ? shd.b : shd.a; -        shadow += shadow_fade; -		shadow = clamp(shadow, 0.0, 1.0);         -	} -	 -	vec3 norm = texture2D(normalMap, frag.xy).xyz; -	float envIntensity = norm.z; -	norm = getNorm(frag.xy); -	 -	norm = normalize(norm); -	float l_dist = -dot(lv, proj_n); -	 -	vec4 proj_tc = (proj_mat * vec4(pos.xyz, 1.0)); -	if (proj_tc.z < 0.0) -	{ -		discard; -	} -	 -	proj_tc.xyz /= proj_tc.w; -	 -	float fa = falloff+1.0; -	float dist_atten = min(1.0-(dist-1.0*(1.0-fa))/fa, 1.0); -	dist_atten *= dist_atten; -	dist_atten *= 2.0; - -	if (dist_atten <= 0.0) -	{ -		discard; -	} -	 -	lv = proj_origin-pos.xyz; -	lv = normalize(lv); -	float da = dot(norm, lv); -		 -	vec3 diff_tex = texture2D(diffuseRect, frag.xy).rgb; -	vec4 spec = texture2D(specularRect, frag.xy); -	vec3 dlit = vec3(0, 0, 0); - -	float noise = texture2D(noiseMap, frag.xy).b; -	if (proj_tc.z > 0.0 && -		proj_tc.x < 1.0 && -		proj_tc.y < 1.0 && -		proj_tc.x > 0.0 && -		proj_tc.y > 0.0) -	{ -		float amb_da = proj_ambiance; -		float lit = 0.0; -		 -		if (da > 0.0) -		{ -			lit = da * dist_atten * noise; - -			float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0); -			float lod = diff * proj_lod; -			 -			vec4 plcol = texture2DLodDiffuse(projectionMap, proj_tc.xy, lod); -		 -			dlit = color.rgb * plcol.rgb * plcol.a; -		 -			col = dlit*lit*diff_tex*shadow; - -			amb_da += (da*0.5+0.5) /* * (1.0-shadow) */ * proj_ambiance; -		} -		 -		//float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0); -		vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod); -							 -		amb_da += (da*da*0.5+0.5) /* * (1.0-shadow) */ * proj_ambiance; -		amb_da *= dist_atten * noise; -		amb_da = min(amb_da, 1.0-lit); -	 -	    col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; -	} - -	if (spec.a > 0.0) -	{ -		dlit *= min(da*6.0, 1.0) * dist_atten; -		vec3 npos = -normalize(pos); - -		//vec3 ref = dot(pos+lv, norm); -		vec3 h = normalize(lv+npos); -		float nh = dot(norm, h); -		float nv = dot(norm, npos); -		float vh = dot(npos, h); -		float sa = nh; -		float fres = pow(1 - dot(h, npos), 5)*0.4+0.5; - -		float gtdenom = 2 * nh; -		float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh)); -								 -		if (nh > 0.0) -		{ -			float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da); -			vec3 speccol = dlit*scol*spec.rgb*shadow; -            speccol = clamp(speccol, vec3(0), vec3(1)); -			col += speccol; -		} -	}	 - -	if (envIntensity > 0.0) -	{ -		vec3 ref = reflect(normalize(pos), norm); -		 -		//project from point pos in direction ref to plane proj_p, proj_n -		vec3 pdelta = proj_p-pos; -		float ds = dot(ref, proj_n); -		 -		if (ds < 0.0) -		{ -			vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds; -			 -			vec4 stc = (proj_mat * vec4(pfinal.xyz, 1.0)); - -			if (stc.z > 0.0) -			{ -				stc /= stc.w; -								 -				if (stc.x < 1.0 && -					stc.y < 1.0 && -					stc.x > 0.0 && -					stc.y > 0.0) -				{ -					col += color.rgb * texture2DLodSpecular(projectionMap, stc.xy, (1 - spec.a) * (proj_lod * 0.6)).rgb * shadow * envIntensity; -				} -			} -		} -	} -#endif -	 -	//not sure why, but this line prevents MATBUG-194 -	col = max(col, vec3(0.0)); - -	//output linear colors as gamma correction happens down stream -	frag_color.rgb = col;	 -	frag_color.a = 0.0; -} | 
