diff --git a/Effects/urban.eff b/Effects/urban.eff index 1f43cbb73..f98dfc696 100644 --- a/Effects/urban.eff +++ b/Effects/urban.eff @@ -1,280 +1,492 @@ - Effects/urban - Effects/terrain-default - - /sim/rendering/snow-level-m - 0.008 - 0.75 0.59 0.05 - /sim/rendering/quality-level - - - 15 - 6 - 7 - - - - - /sim/rendering/urban-shader - /sim/rendering/shader-effects - - 4.0 - /sim/rendering/quality-level - - - - 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 - texture[0]/image - texture[0]/filter - texture[0]/wrap-s - texture[0]/wrap-t - - texture[0]/internal-format - - - - 1 - texture[2]/image - texture[2]/filter - texture[2]/wrap-s - texture[2]/wrap-t - texture[2]/internal-format - - - 2 - texture[2]/image - nearest-mipmap-nearest - texture[2]/wrap-s - texture[2]/wrap-t - texture[2]/internal-format - - average - average - average - min - - - - 3 - noise - - - Shaders/urban.vert - Shaders/urban.frag - - tangent - 6 - - - binormal - 7 - - - normal - 15 - - - - BaseTex - sampler-2d - 0 - - - NormalTex - sampler-2d - 1 - - - QDMTex - sampler-2d - 2 - - - NoiseTex - sampler-3d - 3 - - - depth_factor - float - depth-factor - - - tile_size - float - xsize - - - night_color - float-vec3 - night-color - - - quality_level - float - quality-level - - - snowlevel - float - snow-level - - - max_lod_level - float - max-lod-level - - - - - - - /sim/rendering/urban-shader - /sim/rendering/shader-effects - - 2.0 - /sim/rendering/quality-level - - - - 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 - texture[0]/image - texture[0]/filter - texture[0]/wrap-s - texture[0]/wrap-t - - texture[0]/internal-format - - - - 1 - texture[2]/image - texture[2]/filter - texture[2]/wrap-s - texture[2]/wrap-t - - texture[2]/internal-format - - - - 2 - noise - - - Shaders/urban.vert - Shaders/urban.frag - - tangent - 6 - - - binormal - 7 - - - normal - 15 - - - - BaseTex - sampler-2d - 0 - - - NormalTex - sampler-2d - 1 - - - NoiseTex - sampler-3d - 2 - - - depth_factor - float - depth-factor - - - tile_size - float - xsize - - - night_color - float-vec3 - night-color - - - quality_level - float - quality-level - - - snowlevel - float - snow-level - - - + Effects/urban + Effects/terrain-default + + + /sim/rendering/snow-level-m + + 0.008 + 0.75 0.59 0.05 + + /sim/rendering/shaders/quality-level + + + + + /environment/ground-visibility-m + + + /environment/visibility-m + + + /environment/ground-haze-thickness-m + + + /rendering/scene/scattering + + + /environment/terminator-relative-position-m + + + /sim/rendering/scattering-shader + + + + + + 15 + 6 + 7 + + + + + /sim/rendering/shaders/urban + /sim/rendering/shaders/quality-level + + 4.0 + /sim/rendering/shaders/quality-level + + + + 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 + + texture[0]/image + + + texture[0]/filter + + + texture[0]/wrap-s + + + texture[0]/wrap-t + + + texture[0]/internal-format + + + + 1 + + texture[2]/image + + + texture[2]/filter + + + texture[2]/wrap-s + + + texture[2]/wrap-t + + + texture[2]/internal-format + + + + 2 + + texture[2]/image + + nearest-mipmap-nearest + + texture[2]/wrap-s + + + texture[2]/wrap-t + + + texture[2]/internal-format + + + average + average + average + min + + + + 3 + noise + + + Shaders/include_fog.vert + Shaders/urban.vert + Shaders/include_fog.frag + Shaders/urban.frag + + tangent + 6 + + + binormal + 7 + + + normal + 15 + + + + BaseTex + sampler-2d + 0 + + + NormalTex + sampler-2d + 1 + + + QDMTex + sampler-2d + 2 + + + NoiseTex + sampler-3d + 3 + + + depth_factor + float + + depth-factor + + + + tile_size + float + + xsize + + + + night_color + float-vec3 + + night-color + + + + quality_level + float + + quality-level + + + + snowlevel + float + + snow-level + + + + max_lod_level + float + + max-lod-level + + + + + visibility + float + + visibility + + + + avisibility + float + + avisibility + + + + hazeLayerAltitude + float + + lthickness + + + + scattering + float + + scattering + + + + terminator + float + + terminator + + + + fogType + int + + fogtype + + + + + + + + + /sim/rendering/shaders/urban + + + 2.0 + /sim/rendering/shaders/quality-level + + + + 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 + + texture[0]/image + + + texture[0]/filter + + + texture[0]/wrap-s + + + texture[0]/wrap-t + + + texture[0]/internal-format + + + + 1 + + texture[2]/image + + + texture[2]/filter + + + texture[2]/wrap-s + + + texture[2]/wrap-t + + + texture[2]/internal-format + + + + 2 + noise + + + Shaders/include_fog.vert + Shaders/urban.vert + Shaders/include_fog.frag + Shaders/urban.frag + + tangent + 6 + + + binormal + 7 + + + normal + 15 + + + + + visibility + float + + visibility + + + + avisibility + float + + avisibility + + + + hazeLayerAltitude + float + + lthickness + + + + scattering + float + + scattering + + + + terminator + float + + terminator + + + + fogType + int + + fogtype + + + + + BaseTex + sampler-2d + 0 + + + NormalTex + sampler-2d + 1 + + + NoiseTex + sampler-3d + 2 + + + depth_factor + float + + depth-factor + + + + tile_size + float + + xsize + + + + night_color + float-vec3 + + night-color + + + + quality_level + float + + quality-level + + + + snowlevel + float + + snow-level + + + + + + diff --git a/Shaders/urban.frag b/Shaders/urban.frag index addceb67c..5fed00807 100644 --- a/Shaders/urban.frag +++ b/Shaders/urban.frag @@ -33,6 +33,12 @@ int linear_search_steps = 10; int GlobalIterationCount = 0; int gIterationCap = 64; +////fog "include" ///// +uniform int fogType; + +vec3 fog_Func(vec3 color, int type); +////////////////////// + void QDM(inout vec3 p, inout vec3 v) { const int MAX_LEVEL = TEXTURE_MIP_LEVELS; @@ -43,9 +49,9 @@ void QDM(inout vec3 p, inout vec3 v) vec3 p2 = p; float level = MAX_LEVEL; - vec2 dirSign = (sign(v.xy) + 1.0) * 0.5; - GlobalIterationCount = 0; - float d = 0.0; + vec2 dirSign = (sign(v.xy) + 1.0) * 0.5; + GlobalIterationCount = 0; + float d = 0.0; while (level >= 0.0 && GlobalIterationCount < gIterationCap) { @@ -77,8 +83,8 @@ void QDM(inout vec3 p, inout vec3 v) level++; //use additional convergence speed-up - #ifdef USE_QDM_ASCEND_INTERVAL - if(frac(level*0.5) > EPSILON) + #ifdef USE_QDM_ASCEND_INTERVAL + if(frac(level*0.5) > EPSILON) level++; #elseif USE_QDM_ASCEND_CONST level++; @@ -113,10 +119,10 @@ void QDM(inout vec3 p, inout vec3 v) float ray_intersect_QDM(vec2 dp, vec2 ds) { - vec3 p = vec3( dp, 0.0 ); - vec3 v = vec3( ds, 1.0 ); - QDM( p, v ); - return p.z; + vec3 p = vec3( dp, 0.0 ); + vec3 v = vec3( ds, 1.0 ); + QDM( p, v ); + return p.z; } float ray_intersect_relief(vec2 dp, vec2 ds) @@ -154,10 +160,10 @@ float ray_intersect_relief(vec2 dp, vec2 ds) float ray_intersect(vec2 dp, vec2 ds) { - if ( quality_level >= 4.0 ) - return ray_intersect_QDM( dp, ds ); - else - return ray_intersect_relief( dp, ds ); + if ( quality_level >= 4.0 ) + return ray_intersect_QDM( dp, ds ); + else + return ray_intersect_relief( dp, ds ); } void main (void) @@ -206,12 +212,6 @@ void main (void) emission_factor *= 0.5*pow(tc.r+0.8*tc.g+0.2*tc.b, 2.0) -0.2; ambient_light += (emission_factor * vec4(night_color, 0.0)); - float fogFactor; - float fogCoord = ecPos3.z / (1.0 + smoothstep(0.3, 0.7, emission_factor)); - const float LOG2 = 1.442695; - fogFactor = exp2(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord * LOG2); - fogFactor = clamp(fogFactor, 0.0, 1.0); - vec4 noisevec = texture3D(NoiseTex, (rawpos.xyz)*0.01*scale); vec4 nvL = texture3D(NoiseTex, (rawpos.xyz)*0.00066*scale); @@ -225,19 +225,19 @@ void main (void) n += noisevec[2]*0.8; n += noisevec[3]*2.1; - n = mix(0.6, n, fogFactor); + n = mix(0.6, n, length(ecPosition.xyz) ); vec4 finalColor = texture2D(BaseTex, uv); finalColor = mix(finalColor, clamp(n+nvL[2]*4.1+vec4(0.1, 0.1, nvL[2]*2.2, 1.0), 0.7, 1.0), step(0.8,Nz)*(1.0-emis)*smoothstep(snowlevel+300.0, snowlevel+360.0, (rawpos.z)+nvL[1]*3000.0)); finalColor *= ambient_light; - if (gl_Fog.density == 1.0) - fogFactor=1.0; - vec4 p = vec4( ecPos3 + tile_size * V * (d-1.0) * depth_factor / s.z, 1.0 ); vec4 iproj = gl_ProjectionMatrix * p; iproj /= iproj.w; - gl_FragColor = mix(gl_Fog.color ,finalColor, fogFactor); + + finalColor.rgb = fog_Func(finalColor.rgb, fogType); + gl_FragColor = finalColor; + gl_FragDepth = (iproj.z+1.0)/2.0; } diff --git a/Shaders/urban.vert b/Shaders/urban.vert index 806d37c0d..831f922d3 100644 --- a/Shaders/urban.vert +++ b/Shaders/urban.vert @@ -12,6 +12,12 @@ varying vec4 constantColor; attribute vec3 tangent, binormal; +////fog "include"//////// +uniform int fogType; + +void fog_func(int type); +///////////////////////// + void main(void) { rawpos = gl_Vertex; @@ -25,4 +31,5 @@ void main(void) + gl_Color * (gl_LightModel.ambient + gl_LightSource[0].ambient); gl_Position = ftransform(); gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + fog_func(fogType); }