1+ #ifndef __MATERIAL_FOG_UTIL__
2+ #define __MATERIAL_FOG_UTIL__
13
2- vec4 getFogLinear(in vec4 diffuseColor, in vec4 fogColor, in float start, in float end, in float distance) {
34
4- float fogFactor = (end - distance) / (end - start);
5- fogFactor = clamp(fogFactor, 0.0, 1.0);
5+ vec4 getFogLinear(in vec4 diffuseColor, in vec4 fogColor, in float start, in float end, in float distance) {
66
7- return mix(fogColor, diffuseColor, fogFactor);
8- }
7+ float fogFactor = (end - distance) / (end - start );
8+ fogFactor = clamp(fogFactor, 0.0, 1.0);
99
10- vec4 getFogExp(in vec4 diffuseColor, in vec4 fogColor, in float fogDensity, in float distance) {
10+ return mix(fogColor, diffuseColor, fogFactor);
11+ }
1112
12- float fogFactor = 1.0 / exp(distance * fogDensity);
13- fogFactor = clamp( fogFactor, 0.0, 1.0 );
13+ vec4 getFogExp(in vec4 diffuseColor, in vec4 fogColor, in float fogDensity, in float distance) {
1414
15- return mix(fogColor, diffuseColor, fogFactor);
16- }
15+ float fogFactor = 1.0 / exp(distance * fogDensity );
16+ fogFactor = clamp( fogFactor, 0.0, 1.0 );
1717
18- vec4 getFogExpSquare(in vec4 diffuseColor, in vec4 fogColor, in float fogDensity, in float distance) {
18+ return mix(fogColor, diffuseColor, fogFactor);
19+ }
1920
20- float fogFactor = 1.0 / exp( (distance * fogDensity) * (distance * fogDensity));
21- fogFactor = clamp( fogFactor, 0.0, 1.0 );
21+ vec4 getFogExpSquare(in vec4 diffuseColor, in vec4 fogColor, in float fogDensity, in float distance) {
2222
23- vec4 finalColor = mix(fogColor, diffuseColor, fogFactor);
24- return finalColor;
25- }
23+ float fogFactor = 1.0 / exp( (distance * fogDensity) * (distance * fogDensity));
24+ fogFactor = clamp( fogFactor, 0.0, 1.0 );
25+
26+ vec4 finalColor = mix(fogColor, diffuseColor, fogFactor);
27+ return finalColor;
28+ }
29+
30+ #if defined(USE_FOG)
31+ uniform vec4 m_FogColor;
32+ varying float fogDistance;
33+
34+ uniform vec2 m_LinearFog;
35+
36+ #ifdef FOG_EXP
37+ uniform float m_ExpFog;
38+ #endif
39+
40+ #ifdef FOG_EXPSQ
41+ uniform float m_ExpSqFog;
42+ #endif
43+
44+
45+ vec4 MaterialFog_calculateFogColor(in vec4 fragColor){
46+ #ifdef FOG_LINEAR
47+ fragColor = getFogLinear(fragColor, m_FogColor, m_LinearFog.x, m_LinearFog.y, fogDistance);
48+ #endif
49+ #ifdef FOG_EXP
50+ fragColor = getFogExp(fragColor, m_FogColor, m_ExpFog, fogDistance);
51+ #endif
52+ #ifdef FOG_EXPSQ
53+ fragColor = getFogExpSquare(fragColor, m_FogColor, m_ExpSqFog, fogDistance);
54+ #endif
55+
56+ return fragColor;
57+ }
58+
59+ #endif
60+ #endif
0 commit comments