diff --git a/Aircraft/Generic/Effects/fgfs-sky2/1.png b/Aircraft/Generic/Effects/fgfs-sky2/1.png
new file mode 100644
index 000000000..d2f28518e
Binary files /dev/null and b/Aircraft/Generic/Effects/fgfs-sky2/1.png differ
diff --git a/Aircraft/Generic/Effects/fgfs-sky2/2.png b/Aircraft/Generic/Effects/fgfs-sky2/2.png
new file mode 100644
index 000000000..1da47cccd
Binary files /dev/null and b/Aircraft/Generic/Effects/fgfs-sky2/2.png differ
diff --git a/Aircraft/Generic/Effects/fgfs-sky2/3.png b/Aircraft/Generic/Effects/fgfs-sky2/3.png
new file mode 100644
index 000000000..7e9a01120
Binary files /dev/null and b/Aircraft/Generic/Effects/fgfs-sky2/3.png differ
diff --git a/Aircraft/Generic/Effects/fgfs-sky2/4.png b/Aircraft/Generic/Effects/fgfs-sky2/4.png
new file mode 100644
index 000000000..4fb3c2a1d
Binary files /dev/null and b/Aircraft/Generic/Effects/fgfs-sky2/4.png differ
diff --git a/Aircraft/Generic/Effects/fgfs-sky2/5.png b/Aircraft/Generic/Effects/fgfs-sky2/5.png
new file mode 100644
index 000000000..7a1c5fca4
Binary files /dev/null and b/Aircraft/Generic/Effects/fgfs-sky2/5.png differ
diff --git a/Aircraft/Generic/Effects/fgfs-sky2/6.png b/Aircraft/Generic/Effects/fgfs-sky2/6.png
new file mode 100644
index 000000000..c284e6dbe
Binary files /dev/null and b/Aircraft/Generic/Effects/fgfs-sky2/6.png differ
diff --git a/Effects/reflect-bump-spec.eff b/Effects/reflect-bump-spec.eff
index fb230aed7..e062b0f12 100644
--- a/Effects/reflect-bump-spec.eff
+++ b/Effects/reflect-bump-spec.eff
@@ -107,6 +107,24 @@ EXAMPLES: You can find examples of both usages in the Hunter and Lightning model
0.05
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -296,7 +314,9 @@ EXAMPLES: You can find examples of both usages in the Hunter and Lightning model
+ Shaders/include_fog.vert
Shaders/reflect-bump-spec.vert
+ Shaders/include_fog.frag
Shaders/reflect-bump-spec.frag
tangent
@@ -415,6 +435,48 @@ EXAMPLES: You can find examples of both usages in the Hunter and Lightning model
+
+ visibility
+ float
+
+
+
+
+
+ avisibility
+ float
+
+
+
+
+
+ hazeLayerAltitude
+ float
+
+
+
+
+
+ scattering
+ float
+
+
+
+
+
+ terminator
+ float
+
+
+
+
+
+ fogType
+ int
+
+
+
+
\ No newline at end of file
diff --git a/Shaders/runway-reflect-bump-spec.frag b/Shaders/runway-reflect-bump-spec.frag
new file mode 100644
index 000000000..fbf2ce46d
--- /dev/null
+++ b/Shaders/runway-reflect-bump-spec.frag
@@ -0,0 +1,139 @@
+// -*- mode: C; -*-
+// Licence: GPL v2
+// Author: Vivian Meazza.
+
+#version 120
+
+varying vec3 rawpos;
+varying vec3 VNormal;
+varying vec3 VTangent;
+varying vec3 VBinormal;
+varying vec3 Normal;
+varying vec3 vViewVec;
+varying vec3 reflVec;
+
+varying vec4 Diffuse;
+varying float alpha;
+varying float fogCoord;
+
+uniform samplerCube Environment;
+uniform sampler2D Rainbow;
+uniform sampler2D BaseTex;
+uniform sampler2D Fresnel;
+uniform sampler2D Map;
+uniform sampler2D NormalTex;
+uniform sampler3D Noise;
+
+uniform float spec_adjust;
+uniform float rainbowiness;
+uniform float fresneliness;
+uniform float noisiness;
+uniform float ambient_correction;
+uniform float reflect_map;
+uniform float normalmap_dds;
+
+uniform int fogType;
+
+vec3 fog_Func(vec3 color, int type);
+
+void main (void)
+{
+ vec3 halfV;
+ float NdotL, NdotHV;
+
+ vec3 lightDir = gl_LightSource[0].position.xyz;
+ vec3 halfVector = gl_LightSource[0].halfVector.xyz;
+
+
+ vec4 color = gl_Color;
+ vec4 specular = vec4(0.0);
+ vec4 ns = texture2D(NormalTex, gl_TexCoord[0].st * 16.0);
+ vec3 n = ns.rgb * 2.0 - 1.0;
+ n = normalize(n.x * VTangent + n.y * VBinormal + n.z * VNormal);
+
+ //fix dds normal
+ if (normalmap_dds > 0.0) {
+ n = -n;
+ }
+
+ NdotL = max(0.0, dot(n, lightDir));
+
+ // calculate the specular light
+ if (NdotL > 0.0) {
+ color += Diffuse * NdotL;
+ halfV = normalize(halfVector);
+ NdotHV = max(dot(n, halfV), 0.0);
+ if (gl_FrontMaterial.shininess > 0.0)
+ specular.rgb = (gl_FrontMaterial.specular.rgb * ns.a
+ * gl_LightSource[0].specular.rgb
+ * pow(NdotHV, gl_FrontMaterial.shininess + 128 * spec_adjust));
+ }
+
+ //color.a = alpha;
+ vec4 texel = texture2D(BaseTex, gl_TexCoord[0].st);
+ //vec4 texelcolor = color * texel + specular;
+ color.a = texel.a * alpha;
+ color = clamp(color, 0.0, 1.0);
+
+ // calculate the fog factor
+ //const float LOG2 = 1.442695;
+ //float fogFactor = exp2(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord * LOG2);
+ //fogFactor = clamp(fogFactor, 0.0, 1.0);
+
+ //if(gl_Fog.density == 1.0)
+ // fogFactor=1.0;
+
+ vec3 normal = normalize(VNormal);
+ vec3 viewVec = normalize(vViewVec);
+
+ // Map a rainbowish color
+ float v = dot(viewVec, normal);
+ vec4 rainbow = texture2D(Rainbow, vec2(v, 0.0));
+
+ // Map a fresnel effect
+ vec4 fresnel = texture2D(Fresnel, vec2(v, 0.0));
+
+ // map the refection of the environment
+ vec4 reflection = textureCube(Environment, reflVec);
+
+ float refl_correction = spec_adjust * 1.7 - 1.0;
+ // set the user shininess offset
+ float transparency_offset = clamp(refl_correction, -1.0, 1.0);
+ float reflFactor = 0.0;
+
+ vec4 map = texture2D(Map, gl_TexCoord[0].st * 8.0);
+ if(reflect_map > 0.0){
+ // map the shininess of the object with user input
+ //float pam = (map.a * -2) + 1; //reverse map
+ reflFactor = map.a *(1.0- n.z) + transparency_offset;
+ } else {
+ // set the reflectivity proportional to shininess with user input
+ reflFactor = (gl_FrontMaterial.shininess / 128.0) + transparency_offset;
+ }
+
+ reflFactor = clamp(reflFactor, 0.0, 0.75);
+
+ // set ambient adjustment to remove bluiness with user input
+ float ambient_offset = clamp(ambient_correction, -1.0, 1.0);
+ vec4 ambient_Correction = vec4(gl_LightSource[0].ambient.rg, gl_LightSource[0].ambient.b * 0.6, 0.5) * ambient_offset ;
+ ambient_Correction = clamp(ambient_Correction, -1.0, 1.0);
+
+ // map noise vector
+ vec4 noisevec = texture3D(Noise, rawpos.xyz);
+
+ // add fringing fresnel and rainbow effects and modulate by reflection
+ vec4 reflcolor = mix(reflection, rainbow, rainbowiness * v);
+ vec4 reflfrescolor = mix(reflcolor, fresnel, fresneliness * v);
+ vec4 noisecolor = mix(reflfrescolor, noisevec, noisiness);
+ vec4 raincolor = vec4(noisecolor.rgb * reflFactor, 1.0);
+
+ vec4 mixedcolor = mix(texel, raincolor, reflFactor);
+
+ // the final reflection
+ vec4 reflColor = vec4(color.rgb * mixedcolor.rgb + specular.rgb + ambient_Correction.rgb, color.a);
+
+ reflColor = clamp(reflColor, 0.0, 1.0);
+ vec4 fragColor = reflColor;
+ fragColor.rgb = fog_Func(fragColor.rgb, fogType);
+ gl_FragColor = fragColor;
+}
\ No newline at end of file