Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/shaders/glsl/model_common.fs
#version 120 | #version 120 | ||||
#include "common/fog.h" | |||||
#include "common/shadows_fragment.h" | |||||
uniform sampler2D baseTex; | uniform sampler2D baseTex; | ||||
uniform sampler2D losTex; | uniform sampler2D losTex; | ||||
uniform sampler2D aoTex; | uniform sampler2D aoTex; | ||||
uniform sampler2D normTex; | uniform sampler2D normTex; | ||||
uniform sampler2D specTex; | uniform sampler2D specTex; | ||||
#if USE_SHADOW | |||||
varying vec4 v_shadow; | |||||
#if USE_SHADOW_SAMPLER | |||||
uniform sampler2DShadow shadowTex; | |||||
#if USE_SHADOW_PCF | |||||
uniform vec4 shadowScale; | |||||
#endif | |||||
#else | |||||
uniform sampler2D shadowTex; | |||||
#endif | |||||
#endif | |||||
#if USE_OBJECTCOLOR | #if USE_OBJECTCOLOR | ||||
uniform vec3 objectColor; | uniform vec3 objectColor; | ||||
#else | #else | ||||
#if USE_PLAYERCOLOR | #if USE_PLAYERCOLOR | ||||
uniform vec3 playerColor; | uniform vec3 playerColor; | ||||
#endif | #endif | ||||
#endif | #endif | ||||
uniform vec3 shadingColor; | uniform vec3 shadingColor; | ||||
uniform vec3 ambient; | uniform vec3 ambient; | ||||
uniform vec3 sunColor; | uniform vec3 sunColor; | ||||
uniform vec3 sunDir; | uniform vec3 sunDir; | ||||
uniform vec3 fogColor; | |||||
uniform vec2 fogParams; | |||||
varying vec4 v_lighting; | varying vec4 v_lighting; | ||||
varying vec2 v_tex; | varying vec2 v_tex; | ||||
varying vec2 v_los; | varying vec2 v_los; | ||||
#if (USE_INSTANCING || USE_GPU_SKINNING) && USE_AO | #if (USE_INSTANCING || USE_GPU_SKINNING) && USE_AO | ||||
varying vec2 v_tex2; | varying vec2 v_tex2; | ||||
#endif | #endif | ||||
Show All 15 Lines | #if USE_SPECULAR || USE_NORMAL_MAP || USE_SPECULAR_MAP || USE_PARALLAX | ||||
#if USE_SPECULAR || USE_SPECULAR_MAP | #if USE_SPECULAR || USE_SPECULAR_MAP | ||||
varying vec3 v_half; | varying vec3 v_half; | ||||
#endif | #endif | ||||
#if (USE_INSTANCING || USE_GPU_SKINNING) && USE_PARALLAX | #if (USE_INSTANCING || USE_GPU_SKINNING) && USE_PARALLAX | ||||
varying vec3 v_eyeVec; | varying vec3 v_eyeVec; | ||||
#endif | #endif | ||||
#endif | #endif | ||||
float get_shadow() | |||||
{ | |||||
float shadowBias = 0.003; | |||||
#if USE_SHADOW && !DISABLE_RECEIVE_SHADOWS | |||||
float biasedShdwZ = v_shadow.z - shadowBias; | |||||
#if USE_SHADOW_SAMPLER | |||||
#if USE_SHADOW_PCF | |||||
vec2 offset = fract(v_shadow.xy - 0.5); | |||||
vec4 size = vec4(offset + 1.0, 2.0 - offset); | |||||
vec4 weight = (vec4(1.0, 1.0, -0.5, -0.5) + (v_shadow.xy - 0.5*offset).xyxy) * shadowScale.zwzw; | |||||
return (1.0/9.0)*dot(size.zxzx*size.wwyy, | |||||
vec4(shadow2D(shadowTex, vec3(weight.zw, biasedShdwZ)).r, | |||||
shadow2D(shadowTex, vec3(weight.xw, biasedShdwZ)).r, | |||||
shadow2D(shadowTex, vec3(weight.zy, biasedShdwZ)).r, | |||||
shadow2D(shadowTex, vec3(weight.xy, biasedShdwZ)).r)); | |||||
#else | |||||
return shadow2D(shadowTex, vec3(v_shadow.xy, biasedShdwZ)).r; | |||||
#endif | |||||
#else | |||||
if (biasedShdwZ >= 1.0) | |||||
return 1.0; | |||||
return (biasedShdwZ < texture2D(shadowTex, v_shadow.xy).x ? 1.0 : 0.0); | |||||
#endif | |||||
#else | |||||
return 1.0; | |||||
#endif | |||||
} | |||||
vec3 get_fog(vec3 color) | |||||
{ | |||||
float density = fogParams.x; | |||||
float maxFog = fogParams.y; | |||||
const float LOG2 = 1.442695; | |||||
float z = gl_FragCoord.z / gl_FragCoord.w; | |||||
float fogFactor = exp2(-density * density * z * z * LOG2); | |||||
fogFactor = fogFactor * (1.0 - maxFog) + maxFog; | |||||
fogFactor = clamp(fogFactor, 0.0, 1.0); | |||||
return mix(fogColor, color, fogFactor); | |||||
} | |||||
void main() | void main() | ||||
{ | { | ||||
vec2 coord = v_tex; | vec2 coord = v_tex; | ||||
#if (USE_INSTANCING || USE_GPU_SKINNING) && (USE_PARALLAX || USE_NORMAL_MAP) | #if (USE_INSTANCING || USE_GPU_SKINNING) && (USE_PARALLAX || USE_NORMAL_MAP) | ||||
vec3 bitangent = vec3(v_normal.w, v_tangent.w, v_lighting.w); | vec3 bitangent = vec3(v_normal.w, v_tangent.w, v_lighting.w); | ||||
mat3 tbn = mat3(v_tangent.xyz, bitangent, v_normal.xyz); | mat3 tbn = mat3(v_tangent.xyz, bitangent, v_normal.xyz); | ||||
#endif | #endif | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | void main() | ||||
#endif | #endif | ||||
color += ambColor; | color += ambColor; | ||||
#if USE_SPECULAR_MAP && USE_SELF_LIGHT | #if USE_SPECULAR_MAP && USE_SELF_LIGHT | ||||
color = mix(texdiffuse, color, specular.a); | color = mix(texdiffuse, color, specular.a); | ||||
#endif | #endif | ||||
#if USE_FOG | color = applyFog(color); | ||||
color = get_fog(color); | |||||
#endif | |||||
#if !IGNORE_LOS | #if !IGNORE_LOS | ||||
float los = texture2D(losTex, v_los).a; | float los = texture2D(losTex, v_los).a; | ||||
los = los < 0.03 ? 0.0 : los; | los = los < 0.03 ? 0.0 : los; | ||||
color *= los; | color *= los; | ||||
#endif | #endif | ||||
color *= shadingColor; | color *= shadingColor; | ||||
gl_FragColor.rgb = color; | gl_FragColor.rgb = color; | ||||
} | } |
Wildfire Games · Phabricator