diff --git a/doc/Sky.md b/doc/Sky.md index bbd9d21fe..c0be8f581 100644 --- a/doc/Sky.md +++ b/doc/Sky.md @@ -34,7 +34,7 @@ Resources: ## Tasks -- [ ] Light scatter +- [x] Light scatter - [ ] Atmosphere effect - [ ] improve fog color - [ ] Lens flare diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/sky/planet/scatter/SunScatterRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/sky/planet/scatter/SunScatterRenderer.kt index 0ff3603dd..7ffdbcd61 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/sky/planet/scatter/SunScatterRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/sky/planet/scatter/SunScatterRenderer.kt @@ -56,10 +56,9 @@ class SunScatterRenderer( } private fun calculateIntensity(progress: Float): Float { - val delta = (abs(progress - 0.5f) * 2.0f) - val sine = minOf(sin(delta * PI.toFloat() / 2.0f), 0.6f) + val delta = (abs(progress) * 2.0f) - return 1.0f - sine + return maxOf(sin(delta * PI.toFloat() / 2.0f), 0.5f) } private fun calculateSunPosition(): Vec3 { @@ -79,9 +78,9 @@ class SunScatterRenderer( if (!sky.profile.sunScatter || sky.time.phase == DayPhases.DAY || sky.time.phase == DayPhases.NIGHT || !sky.properties.sun) { return } + shader.use() if (timeUpdate) { calculateMatrix() - shader.use() shader.setMat4("uScatterMatrix", matrix) shader.setFloat("uIntensity", calculateIntensity(sky.time.progress)) shader.setVec3("uSunPosition", calculateSunPosition()) diff --git a/src/main/resources/assets/minosoft/rendering/shader/sky/scatter/sun/sun.fsh b/src/main/resources/assets/minosoft/rendering/shader/sky/scatter/sun/sun.fsh index b87330aae..702f5031e 100644 --- a/src/main/resources/assets/minosoft/rendering/shader/sky/scatter/sun/sun.fsh +++ b/src/main/resources/assets/minosoft/rendering/shader/sky/scatter/sun/sun.fsh @@ -36,11 +36,11 @@ uniform vec3 uSunPosition; #define END_DISTANCE MAX_DISTANCE - 0.2f -#define YELLOWISH vec3(0.9f, 0.8f, 0.25f) +#define YELLOWISH vec3(1.0f, 0.6f, 0.15f) #define REDISH vec3(1.0f, 0.4f, 0.05f) void main() { - foutColor = vec4(REDISH, uIntensity * 0.8f); + foutColor = vec4(REDISH, uIntensity); float distance = length(uSunPosition - finFragmentPosition); float distanceMultiplier = 0.0f;