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 + /sim/rendering/snow-level-m @@ -98,6 +99,11 @@ sampler-1d 2 + + snowlevel + float + snow-level + 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 + /sim/rendering/snow-level-m @@ -98,6 +99,11 @@ sampler-1d 2 + + snowlevel + float + snow-level + 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/snow-level-m + + + + + /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 + + + material/ambient + material/diffuse + material/specular + ambient-and-diffuse + + transparent + transparent + smooth + back + + render-bin/bin-number + render-bin/bin-name + + + 0 + noise + + + 1 + texture[2]/image + texture[2]/filter + texture[2]/wrap-s + texture[2]/wrap-t + + texture[2]/internal-format + + + + 3 + 1d + texture[3]/image + texture[3]/filter + texture[3]/wrap-s + + texture[3]/internal-format + + + + 2 + texture[4]/image + texture[4]/filter + texture[4]/wrap-s + texture[4]/wrap-t + + texture[4]/internal-format + + + + + Shaders/forest.vert + Shaders/forest.frag + + + NoiseTex + sampler-3d + 0 + + + SampleTex + sampler-2d + 1 + + + SampleTex2 + sampler-2d + 2 + + + ColorsTex + sampler-1d + 3 + + + snowlevel + float + snow-level + + + + 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