diff --git a/Effects/crop.eff b/Effects/crop.eff
index cebf09761..2c616ff06 100644
--- a/Effects/crop.eff
+++ b/Effects/crop.eff
@@ -16,6 +16,7 @@
mirror
normalized
+
@@ -98,6 +99,11 @@
sampler-1d
2
+
+ snowlevel
+ float
+
+
diff --git a/Effects/cropgrass.eff b/Effects/cropgrass.eff
index 1cc7263cf..72d1b554c 100644
--- a/Effects/cropgrass.eff
+++ b/Effects/cropgrass.eff
@@ -16,6 +16,7 @@
mirror
normalized
+
@@ -98,6 +99,11 @@
sampler-1d
2
+
+ snowlevel
+ float
+
+
diff --git a/Effects/forest.eff b/Effects/forest.eff
new file mode 100644
index 000000000..eba84aca1
--- /dev/null
+++ b/Effects/forest.eff
@@ -0,0 +1,132 @@
+
+
+ Effects/forest
+ Effects/terrain-default
+
+
+ Textures/Terrain/forest.png
+ linear-mipmap-linear
+ repeat
+ repeat
+ normalized
+
+
+ Textures/Terrain/forest-colors.png
+ linear-mipmap-linear
+ mirror
+ normalized
+
+
+ Textures/Terrain/forest.png
+ linear-mipmap-linear
+ repeat
+ repeat
+ normalized
+
+
+
+
+
+
+ /sim/rendering/crop-shader
+ /sim/rendering/shader-effects
+
+
+ 2.0
+
+
+
+ GL_ARB_shader_objects
+ GL_ARB_shading_language_100
+ GL_ARB_vertex_shader
+ GL_ARB_fragment_shader
+
+
+
+
+
+ true
+
+
+
+
+
+ ambient-and-diffuse
+
+
+
+ smooth
+ back
+
+
+
+
+
+ 0
+ noise
+
+
+ 1
+
+
+
+
+
+
+
+
+
+ 3
+ 1d
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+ Shaders/forest.vert
+ Shaders/forest.frag
+
+
+ NoiseTex
+ sampler-3d
+ 0
+
+
+ SampleTex
+ sampler-2d
+ 1
+
+
+ SampleTex2
+ sampler-2d
+ 2
+
+
+ ColorsTex
+ sampler-1d
+ 3
+
+
+ snowlevel
+ float
+
+
+
+
+
diff --git a/Shaders/crop.frag b/Shaders/crop.frag
index d9d50f3e5..555e673a2 100644
--- a/Shaders/crop.frag
+++ b/Shaders/crop.frag
@@ -4,25 +4,20 @@ varying vec4 rawpos;
varying vec4 ecPosition;
varying vec3 VNormal;
varying vec3 Normal;
-varying vec4 constantColor;
uniform sampler3D NoiseTex;
uniform sampler2D SampleTex;
uniform sampler1D ColorsTex;
-const float scale = 1.0;
+uniform float snowlevel; // From /sim/rendering/snow-level-m
-const vec4 red = vec4(1.0, 0.0, 0.0, 1.0);
-const vec4 green = vec4(0.0, 1.0, 0.0, 1.0);
-const vec4 blue = vec4(0.0, 0.0, 1.0, 1.0);
-const vec4 yellow = vec4(1.0, 1.0, 0.0, 1.0);
+const float scale = 1.0;
#define BLA 1
#define BLA2 0
void main (void)
{
- const float snowlevel=2000.0;
vec4 basecolor = texture2D(SampleTex, rawpos.xy*0.000144);
basecolor = texture1D(ColorsTex, basecolor.r+0.00);
@@ -54,13 +49,15 @@ void main (void)
// good
vec4 c1;
c1 = basecolor * vec4(smoothstep(0.0, 1.15, n), smoothstep(0.0, 1.2, n), smoothstep(0.1, 1.3, n), 1.0);
+
//"steep = gray"
c1 = mix(vec4(n-0.42, n-0.44, n-0.51, 1.0), c1, smoothstep(0.970, 0.990, abs(normalize(Normal).z)+nvL[2]*1.3));
+
//"snow"
c1 = mix(c1, clamp(n+nvL[2]*4.1+vec4(0.1, 0.1, nvL[2]*2.2, 1.0), 0.7, 1.0), smoothstep(snowlevel+300.0, snowlevel+360.0, (rawpos.z)+nvL[1]*3000.0));
vec3 diffuse = gl_Color.rgb * max(0.0, dot(VNormal, gl_LightSource[0].position.xyz));
- vec4 ambient_light = constantColor + gl_LightSource[0].diffuse * vec4(diffuse, 1.0);
+ vec4 ambient_light = gl_LightSource[0].diffuse * vec4(diffuse, 1.0);
c1 *= ambient_light;
vec4 finalColor = c1;
diff --git a/Shaders/crop.vert b/Shaders/crop.vert
index 50bdc1f85..b5c7314a5 100644
--- a/Shaders/crop.vert
+++ b/Shaders/crop.vert
@@ -1,23 +1,19 @@
#version 120
-varying vec4 rawpos;
-varying vec4 ecPosition;
-varying vec3 VNormal;
-varying vec3 Normal;
-varying vec4 constantColor;
-centroid varying vec4 ipos;
+varying vec4 rawpos;
+varying vec4 ecPosition;
+varying vec3 VNormal;
+varying vec3 Normal;
void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
- rawpos = gl_Vertex;
- ipos = gl_Vertex;
+ rawpos = gl_Vertex;
ecPosition = gl_ModelViewMatrix * gl_Vertex;
VNormal = normalize(gl_NormalMatrix * gl_Normal);
Normal = normalize(gl_Normal);
- gl_FrontColor = gl_Color;
- constantColor = gl_FrontMaterial.emission
- + gl_Color * (gl_LightModel.ambient + gl_LightSource[0].ambient);
+
+ gl_FrontColor = gl_Color;
gl_Position = ftransform();
-}
+}
\ No newline at end of file
diff --git a/Shaders/forest.frag b/Shaders/forest.frag
new file mode 100644
index 000000000..6e0ec3c43
--- /dev/null
+++ b/Shaders/forest.frag
@@ -0,0 +1,85 @@
+#version 120
+
+varying vec4 rawpos;
+varying vec4 ecPosition;
+varying vec3 VNormal;
+varying vec3 Normal;
+
+uniform sampler3D NoiseTex;
+uniform sampler2D SampleTex;
+uniform sampler1D ColorsTex;
+uniform sampler2D SampleTex2;
+
+uniform float snowlevel; // From /sim/rendering/snow-level-m
+
+const float scale = 1.0;
+
+
+void main (void)
+{
+
+ vec4 basecolor = texture2D(SampleTex, rawpos.xy*0.000144);
+ vec4 basecolor2 = texture2D(SampleTex2, rawpos.xy*0.000144);
+
+ basecolor = texture1D(ColorsTex, basecolor.r+0.0);
+
+ vec4 noisevec = texture3D(NoiseTex, (rawpos.xyz)*0.01*scale);
+
+ vec4 nvL = texture3D(NoiseTex, (rawpos.xyz)*0.00066*scale);
+
+ float fogFactor;
+ float fogCoord = ecPosition.z;
+ const float LOG2 = 1.442695;
+ fogFactor = exp2(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord * LOG2);
+ float biasFactor = exp2(-0.00000002 * fogCoord * fogCoord * LOG2);
+
+ float n=0.12;
+ n += nvL[0]*0.4;
+ n += nvL[1]*0.6;
+ n += nvL[2]*2.0;
+ n += nvL[3]*4.0;
+ n += noisevec[0]*0.1;
+ n += noisevec[1]*0.4;
+
+ n += noisevec[2]*0.8;
+ n += noisevec[3]*2.1;
+ n = mix(0.6, n, biasFactor);
+
+ vec4 c1;
+ c1 = basecolor * vec4(smoothstep(-1.3, 0.5, n), smoothstep(-1.3, 0.5, n), smoothstep(-2.0, 0.9, n), 0.0);
+
+ vec4 c2;
+ c2 = basecolor2 * vec4(smoothstep(-1.3, 0.5, n), smoothstep(-1.3, 0.5, n), smoothstep(-2.0, 0.9, n), 0.0);
+
+ //draw floor where !steep, and another blurb for smoothing transitions
+ vec4 c3, c4, c5;
+ c3 = mix(vec4(n-0.88, n-0.14, -n, 0.0), c1, smoothstep(0.990, 0.970, abs(normalize(Normal).z)+nvL[2]*1.3));
+ c4 = mix(vec4(n-0.88, n-0.74, -n, 0.0), c1, smoothstep(0.990, 0.890, abs(normalize(Normal).z)+nvL[2]*0.9));
+ c5 = mix(c3, c4, 1.0);
+
+ //brings vegetation 'floor', added vegetationlevel
+
+ float vegetationlevel = (rawpos.z)+nvL[2]*3000.0;
+
+ if (vegetationlevel < 2200) {
+ c1 = mix(c2, c5, clamp(0.65, n*0.5, 0.4));
+ }
+
+ else {
+ c1 = mix(c2, c5, clamp(0.65, n*0.5, 0.1));
+ }
+
+ //snow
+ c1 = mix(c1, clamp(n+nvL[2]*4.1+vec4(0.1, 0.1, nvL[2]*2.2, 1.0), 0.7, 1.0), smoothstep(snowlevel+300.0, snowlevel+360.0, (rawpos.z)+nvL[1]*3000.0));
+
+ vec3 diffuse = gl_Color.rgb * max(0.4, dot(VNormal, gl_LightSource[0].position.xyz));
+ vec4 ambient_light = gl_LightSource[0].diffuse * vec4(diffuse, 1.0);
+
+ c1 *= ambient_light;
+ vec4 finalColor = c1;
+
+ if(gl_Fog.density == 1.0)
+ fogFactor=1.0;
+
+ gl_FragColor = mix(gl_Fog.color ,finalColor, fogFactor);
+}
diff --git a/Shaders/forest.vert b/Shaders/forest.vert
new file mode 100644
index 000000000..631133d09
--- /dev/null
+++ b/Shaders/forest.vert
@@ -0,0 +1,19 @@
+#version 120
+
+varying vec4 rawpos;
+varying vec4 ecPosition;
+varying vec3 VNormal;
+varying vec3 Normal;
+
+void main(void)
+{
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+
+ rawpos = gl_Vertex;
+ ecPosition = gl_ModelViewMatrix * gl_Vertex;
+ VNormal = normalize(gl_NormalMatrix * gl_Normal);
+ Normal = normalize(gl_Normal);
+
+ gl_FrontColor = gl_Color;
+ gl_Position = ftransform();
+}
diff --git a/Textures/Terrain/forest-colors.png b/Textures/Terrain/forest-colors.png
new file mode 100644
index 000000000..356b39d09
Binary files /dev/null and b/Textures/Terrain/forest-colors.png differ
diff --git a/Textures/Terrain/forest.png b/Textures/Terrain/forest.png
new file mode 100644
index 000000000..c285cda61
Binary files /dev/null and b/Textures/Terrain/forest.png differ
diff --git a/materials.xml b/materials.xml
index 3fd52ed4c..a6d87a058 100644
--- a/materials.xml
+++ b/materials.xml
@@ -708,7 +708,7 @@ Shared parameters for various materials.
EvergreenBroadCover
EvergreenForest
- Effects/landmass
+ Effects/forest
Terrain/forest1a.png
Terrain/forest1b.png
Terrain/forest1c.png
@@ -732,7 +732,7 @@ Shared parameters for various materials.
summer
- Effects/landmass
+ Effects/forest
DeciduousBroadCover
DeciduousForest
Bog
@@ -759,7 +759,7 @@ Shared parameters for various materials.
summer
- Effects/landmass
+ Effects/forest
MixedForestCover
MixedForest
RainForest
@@ -786,7 +786,7 @@ Shared parameters for various materials.
summer
- Effects/landmass
+ Effects/forest
EvergreenNeedleCover
WoodedTundraCover
Terrain/evergreen.png
@@ -810,7 +810,7 @@ Shared parameters for various materials.
summer
- Effects/landmass
+ Effects/forest
DeciduousNeedleCover
Terrain/dec_evergreen.png
1000