Add fog to Single-Pass lighting.

This commit is contained in:
James Khan 2019-05-30 15:31:18 +01:00
parent 4f47e5602b
commit 1116df31c9
3 changed files with 51 additions and 1 deletions

View File

@ -167,6 +167,12 @@ MaterialDef Phong Lighting {
INSTANCING : UseInstancing INSTANCING : UseInstancing
NUM_MORPH_TARGETS: NumberOfMorphTargets NUM_MORPH_TARGETS: NumberOfMorphTargets
NUM_TARGETS_BUFFERS: NumberOfTargetsBuffers NUM_TARGETS_BUFFERS: NumberOfTargetsBuffers
// fog - jayfella
USE_FOG : UseFog
FOG_LINEAR : LinearFog
FOG_EXP : ExpFog
FOG_EXPSQ : ExpSqFog
} }
} }

View File

@ -6,6 +6,26 @@
#import "Common/ShaderLib/Lighting.glsllib" #import "Common/ShaderLib/Lighting.glsllib"
#endif #endif
// fog - jayfella
#ifdef USE_FOG
#import "Common/ShaderLib/MaterialFog.glsllib"
varying float fog_distance;
uniform vec4 m_FogColor;
#ifdef FOG_LINEAR
uniform vec2 m_LinearFog;
#endif
#ifdef FOG_EXP
uniform float m_ExpFog;
#endif
#ifdef FOG_EXPSQ
uniform float m_ExpSqFog;
#endif
#endif // end fog
varying vec2 texCoord; varying vec2 texCoord;
#ifdef SEPARATE_TEXCOORD #ifdef SEPARATE_TEXCOORD
varying vec2 texCoord2; varying vec2 texCoord2;
@ -226,5 +246,20 @@ void main(){
} }
#endif #endif
// add fog after the lighting because shadows will cause the fog to darken
// which just results in the geometry looking like it's changed color
#ifdef USE_FOG
#ifdef FOG_LINEAR
gl_FragColor = getFogLinear(gl_FragColor, m_FogColor, m_LinearFog.x, m_LinearFog.y, fog_distance);
#endif
#ifdef FOG_EXP
gl_FragColor = getFogExp(gl_FragColor, m_FogColor, m_ExpFog, fog_distance);
#endif
#ifdef FOG_EXPSQ
gl_FragColor = getFogExpSquare(gl_FragColor, m_FogColor, m_ExpSqFog, fog_distance);
#endif
#endif // end fog
gl_FragColor.a = alpha; gl_FragColor.a = alpha;
} }

View File

@ -8,6 +8,11 @@
#import "Common/ShaderLib/BlinnPhongLighting.glsllib" #import "Common/ShaderLib/BlinnPhongLighting.glsllib"
#endif #endif
// fog - jayfella
#ifdef USE_FOG
varying float fog_distance;
uniform vec3 g_CameraPosition;
#endif
uniform vec4 m_Ambient; uniform vec4 m_Ambient;
uniform vec4 m_Diffuse; uniform vec4 m_Diffuse;
@ -188,4 +193,8 @@ void main(){
#ifdef USE_REFLECTION #ifdef USE_REFLECTION
computeRef(modelSpacePos); computeRef(modelSpacePos);
#endif #endif
#ifdef USE_FOG
fog_distance = distance(g_CameraPosition, (g_WorldMatrix * modelSpacePos).xyz);
#endif
} }