diff --git a/data/shaders/terraintessellation/terrain.frag b/data/shaders/terraintessellation/terrain.frag index 1cde9396..9273a742 100644 --- a/data/shaders/terraintessellation/terrain.frag +++ b/data/shaders/terraintessellation/terrain.frag @@ -10,6 +10,8 @@ layout (location = 0) in vec3 inNormal; layout (location = 1) in vec2 inUV; layout (location = 2) in vec3 inViewVec; layout (location = 3) in vec3 inLightVec; +layout (location = 4) in vec3 inEyePos; +layout (location = 5) in vec3 inWorldPos; layout (location = 0) out vec4 outFragColor; @@ -40,11 +42,23 @@ vec3 sampleTerrainLayer() return color; } +float fog(float density) +{ + const float LOG2 = -1.442695; + float dist = gl_FragCoord.z / gl_FragCoord.w * 0.1; + float d = density * dist; + return 1.0 - clamp(exp2(d * d * LOG2), 0.0, 1.0); +} + void main() { vec3 N = normalize(inNormal); vec3 L = normalize(inLightVec); vec3 ambient = vec3(0.5); vec3 diffuse = max(dot(N, L), 0.0) * vec3(1.0); - outFragColor = vec4((ambient + diffuse) * sampleTerrainLayer(), 1.0); + + vec4 color = vec4((ambient + diffuse) * sampleTerrainLayer(), 1.0); + + const vec4 fogColor = vec4(0.47, 0.5, 0.67, 0.0); + outFragColor = mix(color, fogColor, fog(0.25)); } diff --git a/data/shaders/terraintessellation/terrain.frag.spv b/data/shaders/terraintessellation/terrain.frag.spv index 86bc3465..4822b129 100644 Binary files a/data/shaders/terraintessellation/terrain.frag.spv and b/data/shaders/terraintessellation/terrain.frag.spv differ diff --git a/data/shaders/terraintessellation/terrain.tese b/data/shaders/terraintessellation/terrain.tese index 64b0e0c9..e6a6379d 100644 --- a/data/shaders/terraintessellation/terrain.tese +++ b/data/shaders/terraintessellation/terrain.tese @@ -26,6 +26,8 @@ layout (location = 0) out vec3 outNormal; layout (location = 1) out vec2 outUV; layout (location = 2) out vec3 outViewVec; layout (location = 3) out vec3 outLightVec; +layout (location = 4) out vec3 outEyePos; +layout (location = 5) out vec3 outWorldPos; void main() { @@ -50,4 +52,6 @@ void main() // Calculate vectors for lighting based on tessellated position outViewVec = -pos.xyz; outLightVec = normalize(ubo.lightPos.xyz + outViewVec); + outWorldPos = pos.xyz; + outEyePos = vec3(ubo.modelview * pos); } \ No newline at end of file diff --git a/data/shaders/terraintessellation/terrain.tese.spv b/data/shaders/terraintessellation/terrain.tese.spv index a49209b0..1abf5fb1 100644 Binary files a/data/shaders/terraintessellation/terrain.tese.spv and b/data/shaders/terraintessellation/terrain.tese.spv differ