mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-14 04:24:05 +09:00
sky model update
This commit is contained in:
Binary file not shown.
@@ -125,21 +125,17 @@ class WorldTime(initTime: Long = 0L) {
|
|||||||
val TIME_T = DAY_LENGTH * ordinalDay + second
|
val TIME_T = DAY_LENGTH * ordinalDay + second
|
||||||
|
|
||||||
val x = (TIME_T % YEAR_SECONDS).toDouble() / DAY_LENGTH + 15 // decimal days. One full day = 1.0
|
val x = (TIME_T % YEAR_SECONDS).toDouble() / DAY_LENGTH + 15 // decimal days. One full day = 1.0
|
||||||
val d = -23.44 * cos(TWO_PI * x / YEAR_DAYS)
|
|
||||||
|
|
||||||
// 51.56 and 23.44 will make yearly min/max elevation to be 75deg
|
// 51.56 and 23.44 will make yearly min/max elevation to be 75deg
|
||||||
// -0.2504264: a number that makes y=min when x=0 (x=0 is midnight)
|
val d = -23.44 * cos(TWO_PI * x / YEAR_DAYS)
|
||||||
return 51.56 * sin(TWO_PI * (x - 0.2504264)) + d
|
return -51.56 * cos(TWO_PI * x) + d
|
||||||
}
|
}
|
||||||
|
|
||||||
val solarElevationDeg: Double
|
val solarElevationDeg: Double
|
||||||
get() {
|
get() {
|
||||||
val x = (TIME_T % YEAR_SECONDS).toDouble() / DAY_LENGTH + 15 // decimal days. One full day = 1.0
|
val x = (TIME_T % YEAR_SECONDS).toDouble() / DAY_LENGTH + 15 // decimal days. One full day = 1.0
|
||||||
val d = -23.44 * cos(TWO_PI * x / YEAR_DAYS)
|
|
||||||
|
|
||||||
// 51.56 and 23.44 will make yearly min/max elevation to be 75deg
|
// 51.56 and 23.44 will make yearly min/max elevation to be 75deg
|
||||||
// -0.2504264: a number that makes y=min when x=0 (x=0 is midnight)
|
val d = -23.44 * cos(TWO_PI * x / YEAR_DAYS)
|
||||||
return 51.56 * sin(TWO_PI * (x - 0.2504264)) + d
|
return -51.56 * cos(TWO_PI * x) + d
|
||||||
}
|
}
|
||||||
val solarElevationRad: Double
|
val solarElevationRad: Double
|
||||||
get() = Math.toRadians(solarElevationDeg)
|
get() = Math.toRadians(solarElevationDeg)
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ object Skybox : Disposable {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
val deg1 = (-elevationDeg / 75.0).pow(0.8).times(-75.0)
|
val deg1 = (-elevationDeg / 75.0).pow(0.93).times(-75.0)
|
||||||
val elevation1 = -deg1
|
val elevation1 = -deg1
|
||||||
val elevation2 = -deg1 / 28.5
|
val elevation2 = -deg1 / 28.5
|
||||||
val scale = (1f - (1f - 1f / 1.8.pow(elevation1)) * 0.97f).toFloat()
|
val scale = (1f - (1f - 1f / 1.8.pow(elevation1)) * 0.97f).toFloat()
|
||||||
@@ -68,7 +68,8 @@ object Skybox : Disposable {
|
|||||||
|
|
||||||
private val elevations = (-75..75) //zw 151
|
private val elevations = (-75..75) //zw 151
|
||||||
private val elevationsD = (elevations.first.toDouble() .. elevations.last.toDouble())
|
private val elevationsD = (elevations.first.toDouble() .. elevations.last.toDouble())
|
||||||
private val turbidities = (1_0..10_0 step 1) // 99
|
private val turbidityStep = 5
|
||||||
|
private val turbidities = (1_0..10_0 step turbidityStep) // (100 / turbidityStep) - 1
|
||||||
private val turbiditiesD = (turbidities.first / 10.0..turbidities.last / 10.0)
|
private val turbiditiesD = (turbidities.first / 10.0..turbidities.last / 10.0)
|
||||||
private val elevCnt = elevations.count()
|
private val elevCnt = elevations.count()
|
||||||
private val turbCnt = turbidities.count()
|
private val turbCnt = turbidities.count()
|
||||||
@@ -94,7 +95,7 @@ object Skybox : Disposable {
|
|||||||
|
|
||||||
val elevationDeg = (it / turbCnt).plus(elevations.first).toDouble()
|
val elevationDeg = (it / turbCnt).plus(elevations.first).toDouble()
|
||||||
val elevationRad = Math.toRadians(elevationDeg)
|
val elevationRad = Math.toRadians(elevationDeg)
|
||||||
val turbidity = 1.0 + (it % turbCnt) / 10.0
|
val turbidity = 1.0 + (it % turbCnt) / (10.0 / turbidityStep)
|
||||||
|
|
||||||
val state = ArHosekSkyModel.arhosek_xyz_skymodelstate_alloc_init(turbidity, albedo, elevationRad.abs())
|
val state = ArHosekSkyModel.arhosek_xyz_skymodelstate_alloc_init(turbidity, albedo, elevationRad.abs())
|
||||||
val pixmap = Pixmap(1, gradSize, Pixmap.Format.RGBA8888)
|
val pixmap = Pixmap(1, gradSize, Pixmap.Format.RGBA8888)
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
package net.torvald.terrarum.modulebasegame.console
|
package net.torvald.terrarum.modulebasegame.console
|
||||||
|
|
||||||
|
import net.torvald.reflection.extortField
|
||||||
|
import net.torvald.terrarum.INGAME
|
||||||
import net.torvald.terrarum.console.ConsoleCommand
|
import net.torvald.terrarum.console.ConsoleCommand
|
||||||
import net.torvald.terrarum.console.Echo
|
import net.torvald.terrarum.console.Echo
|
||||||
|
import net.torvald.terrarum.gameactors.ActorWithBody
|
||||||
import net.torvald.terrarum.weather.WeatherMixer
|
import net.torvald.terrarum.weather.WeatherMixer
|
||||||
|
import net.torvald.terrarum.worlddrawer.LightmapRenderer
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2023-07-25.
|
* Created by minjaesong on 2023-07-25.
|
||||||
@@ -17,6 +21,13 @@ internal object SetSol : ConsoleCommand {
|
|||||||
try {
|
try {
|
||||||
val solarAngle = args[1].toDouble().coerceIn(-75.0..75.0)
|
val solarAngle = args[1].toDouble().coerceIn(-75.0..75.0)
|
||||||
WeatherMixer.forceSolarElev = solarAngle
|
WeatherMixer.forceSolarElev = solarAngle
|
||||||
|
LightmapRenderer.recalculate(
|
||||||
|
INGAME.extortField<ArrayList<ActorWithBody>>("visibleActorsRenderBehind")!! +
|
||||||
|
INGAME.extortField<ArrayList<ActorWithBody>>("visibleActorsRenderMiddle")!! +
|
||||||
|
INGAME.extortField<ArrayList<ActorWithBody>>("visibleActorsRenderMidTop")!! +
|
||||||
|
INGAME.extortField<ArrayList<ActorWithBody>>("visibleActorsRenderFront")!! +
|
||||||
|
INGAME.extortField<ArrayList<ActorWithBody>>("visibleActorsRenderOverlay")!!
|
||||||
|
)
|
||||||
}
|
}
|
||||||
catch (e: NumberFormatException) {
|
catch (e: NumberFormatException) {
|
||||||
Echo("Wrong number input.")
|
Echo("Wrong number input.")
|
||||||
|
|||||||
@@ -101,8 +101,8 @@ class BasicDebugInfoWindow : UICanvas() {
|
|||||||
private infix fun Double.pow(b: Double) = Math.pow(this, b)
|
private infix fun Double.pow(b: Double) = Math.pow(this, b)
|
||||||
|
|
||||||
private fun Double?.toIntAndFrac(intLen: Int, fracLen: Int = 4): String =
|
private fun Double?.toIntAndFrac(intLen: Int, fracLen: Int = 4): String =
|
||||||
if (this == null) "null" else if (this.isNaN()) "NaN" else if (this.isInfinite()) "${if (this.sign >= 0) '+' else '-'}Inf" else
|
if (this == null) "null" else if (this.isNaN()) "NaN" else if (this.isInfinite()) "${if (this >= 0.0) '+' else '-'}Inf" else
|
||||||
"${this.toInt().toString().padStart(intLen)}." +
|
"${((if (this >= 0.0) "" else "-") + "${this.absoluteValue.toInt()}").padStart(intLen)}." +
|
||||||
(10.0 pow fracLen.toDouble()).let { d -> (this.absoluteValue.times(d) % d).toInt().toString().padEnd(fracLen) }
|
(10.0 pow fracLen.toDouble()).let { d -> (this.absoluteValue.times(d) % d).toInt().toString().padEnd(fracLen) }
|
||||||
|
|
||||||
private val gap = 14f
|
private val gap = 14f
|
||||||
|
|||||||
Reference in New Issue
Block a user