diff --git a/assets/mods/basegame/weathers/WeatherGeneric.json b/assets/mods/basegame/weathers/WeatherGeneric.json index 7e5bc621f..818a8dab5 100644 --- a/assets/mods/basegame/weathers/WeatherGeneric.json +++ b/assets/mods/basegame/weathers/WeatherGeneric.json @@ -2,10 +2,15 @@ "skyboxGradColourMap": "generic_skybox.tga", "daylightClut": "clut_daylight.tga", "classification": "generic", + "cloudGamma": [0.44, 2.0], "clouds": { "normal": { "filename": "cloud_normal.png", "tw": 1024, "th": 512 + }, + "large": { + "filename": "cloud_large.png", + "tw": 2048, "th": 1024 } } } \ No newline at end of file diff --git a/assets/mods/basegame/weathers/cloud_large.kra b/assets/mods/basegame/weathers/cloud_large.kra new file mode 100644 index 000000000..a7868c660 --- /dev/null +++ b/assets/mods/basegame/weathers/cloud_large.kra @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44df971ff0412128b06e4580a6c80c350280bdd4dd53456a8281559c328514d7 +size 6261901 diff --git a/assets/mods/basegame/weathers/cloud_large.png b/assets/mods/basegame/weathers/cloud_large.png new file mode 100644 index 000000000..4c6793260 --- /dev/null +++ b/assets/mods/basegame/weathers/cloud_large.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:741d9a1e00d0a9bccc4fb151b1f1bdfeb1e34906dc74c22ebc1ae552ea5d3758 +size 959425 diff --git a/assets/mods/basegame/weathers/cloud_normal.png b/assets/mods/basegame/weathers/cloud_normal.png index aba59561f..a60d771fd 100644 --- a/assets/mods/basegame/weathers/cloud_normal.png +++ b/assets/mods/basegame/weathers/cloud_normal.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe3db92949155a69db70c8837895947feb927ba925c3d4c9396c5f491f04db45 -size 117859 +oid sha256:a83b7e880871329fdfa8ccfe509a9d470155206935348de5e0f9de3605f5e0d3 +size 349899 diff --git a/src/net/torvald/terrarum/TerrarumAppConfiguration.kt b/src/net/torvald/terrarum/TerrarumAppConfiguration.kt index b8104f4c4..6094cb2c4 100644 --- a/src/net/torvald/terrarum/TerrarumAppConfiguration.kt +++ b/src/net/torvald/terrarum/TerrarumAppConfiguration.kt @@ -67,7 +67,7 @@ basegame // Commit counts up to the Release 0.3.1: 2278 // Commit counts up to the Release 0.3.2: 2732 - const val VERSION_TAG: String = "test001" + const val VERSION_TAG: String = "test002" ////////////////////////////////////////////////////////// // CONFIGURATION FOR TILE MAKER // diff --git a/src/net/torvald/terrarum/weather/BaseModularWeather.kt b/src/net/torvald/terrarum/weather/BaseModularWeather.kt index dc39b18fc..a1f6ee36a 100644 --- a/src/net/torvald/terrarum/weather/BaseModularWeather.kt +++ b/src/net/torvald/terrarum/weather/BaseModularWeather.kt @@ -16,6 +16,7 @@ data class BaseModularWeather( var skyboxGradColourMap: GdxColorMap, // row 0: skybox grad top, row 1: skybox grad bottom, row 2: sunlight (RGBA) val daylightClut: GdxColorMap, val classification: String, + val cloudGamma: FloatArray, var clouds: HashMap, val mixFrom: String? = null, val mixPercentage: Double? = null diff --git a/src/net/torvald/terrarum/weather/WeatherMixer.kt b/src/net/torvald/terrarum/weather/WeatherMixer.kt index dc3617ebd..267767791 100644 --- a/src/net/torvald/terrarum/weather/WeatherMixer.kt +++ b/src/net/torvald/terrarum/weather/WeatherMixer.kt @@ -76,6 +76,9 @@ internal object WeatherMixer : RNGConsumer { private var astrumOffX = 0f private var astrumOffY = 0f + private var cloudGamma1 = 0.5f + private var cloudGamma2 = 2f + private val moonlightMax = Cvec(0.23f, 0.24f, 0.25f, 0.21f) // actual moonlight is around ~4100K but our mesopic vision makes it appear blueish (wikipedia: Purkinje effect) override fun loadFromSave(s0: Long, s1: Long) { @@ -134,6 +137,7 @@ internal object WeatherMixer : RNGConsumer { GdxColorMap(1, 3, Color(0x55aaffff), Color(0xaaffffff.toInt()), Color.WHITE), GdxColorMap(2, 2, Color.WHITE, Color.WHITE, Color.WHITE, Color.WHITE), "default", + floatArrayOf(1f, 1f), HashMap() ) @@ -150,6 +154,10 @@ internal object WeatherMixer : RNGConsumer { // currentWeather = weatherList[WEATHER_GENERIC]!![0] // force set weather + // update clouds + cloudGamma1 = currentWeather.cloudGamma[0] + cloudGamma2 = currentWeather.cloudGamma[1] + if (!globalLightOverridden) { world.globalLight = WeatherMixer.globalLightNow @@ -178,9 +186,10 @@ internal object WeatherMixer : RNGConsumer { } // TODO add cloud-only colour strip on the CLUT batch.shader = shaderClouds batch.inUse { - currentWeather.clouds["normal"]?.get(0, 0)?.let { - batch.draw(it, 0f, -150f) - } + batch.shader.setUniformf("inverseGamma", cloudGamma1, cloudGamma2) + currentWeather.clouds["large"]?.get(0, 0)?.let { batch.draw(it, -400f - INGAME.WORLD_UPDATE_TIMER * 0.06f, -600f) } + currentWeather.clouds["normal"]?.get(0, 1)?.let { batch.draw(it, 600f - INGAME.WORLD_UPDATE_TIMER * 0.09f, -300f) } + currentWeather.clouds["normal"]?.get(0, 0)?.let { batch.draw(it, 200f - INGAME.WORLD_UPDATE_TIMER * 0.13f, -150f) } } @@ -393,6 +402,8 @@ internal object WeatherMixer : RNGConsumer { val classification = JSON.getString("classification") + val cloudGamma = JSON["cloudGamma"].asFloatArray() + val cloudsMap = HashMap() val clouds = JSON["clouds"] clouds.forEachSiblings { name, json -> @@ -415,7 +426,8 @@ internal object WeatherMixer : RNGConsumer { skyboxGradColourMap = skybox, daylightClut = daylight, classification = classification, - clouds = cloudsMap + cloudGamma = cloudGamma, + clouds = cloudsMap, ) } diff --git a/src/shaders/clouds.frag b/src/shaders/clouds.frag index d47037abe..78ee21690 100644 --- a/src/shaders/clouds.frag +++ b/src/shaders/clouds.frag @@ -14,7 +14,7 @@ out vec4 fragColor; const vec2 boolean = vec2(0.0, 1.0); -uniform vec2 inverseGamma = vec2(0.5, 2.0); // vec2(inverse gamma RGB, inverse gamma RGA) +uniform vec2 inverseGamma = vec2(10, 2.0); // vec2(inverse gamma RGB, inverse gamma RGA) void main() { vec4 inCol = v_color * texture(u_texture, v_texCoords);