mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 12:21:52 +09:00
light de-banding when they exceed 255 out of 1023
This commit is contained in:
@@ -7,6 +7,8 @@ import com.jme3.math.FastMath
|
||||
import net.torvald.terrarum.gameactors.ActorWithPhysics
|
||||
import net.torvald.terrarum.gameworld.GameWorld
|
||||
import net.torvald.terrarum.blockproperties.Block
|
||||
import net.torvald.terrarum.gamecontroller.Key
|
||||
import net.torvald.terrarum.gamecontroller.KeyToggler
|
||||
import org.newdawn.slick.Color
|
||||
import org.newdawn.slick.Graphics
|
||||
import java.util.*
|
||||
@@ -362,7 +364,11 @@ object LightmapRenderer {
|
||||
|
||||
for (iy in 0..1) {
|
||||
for (ix in 0..1) {
|
||||
g.color = colourMapItoL[iy * 2 + ix].normaliseToColour()
|
||||
g.color = if (KeyToggler.isOn(Key.F9))
|
||||
colourMapItoL[iy * 2 + ix].normaliseToColourHDR()
|
||||
else
|
||||
colourMapItoL[iy * 2 + ix].normaliseToColour()
|
||||
|
||||
|
||||
g.fillRect(
|
||||
(x.toFloat() * TILE_SIZE).round()
|
||||
@@ -389,7 +395,11 @@ object LightmapRenderer {
|
||||
if (x + sameLevelCounter >= this_x_end) break
|
||||
}
|
||||
|
||||
g.color = (getLight(x, y) ?: 0).normaliseToColour()
|
||||
g.color = if (KeyToggler.isOn(Key.F9))
|
||||
(getLight(x, y) ?: 0).normaliseToColourHDR()
|
||||
else
|
||||
(getLight(x, y) ?: 0).normaliseToColour()
|
||||
|
||||
g.fillRect(
|
||||
(x.toFloat() * TILE_SIZE).round().toFloat(),
|
||||
(y.toFloat() * TILE_SIZE).round().toFloat(),
|
||||
@@ -659,6 +669,78 @@ object LightmapRenderer {
|
||||
Math.min(this.rawG(), 256),
|
||||
Math.min(this.rawB(), 256)
|
||||
)
|
||||
private val RGB_HDR_LUT = floatArrayOf( // polymonial of 6.0 please refer to work_files/HDRcurveBezierLinIntp.kts
|
||||
0.0f,0.0f,0.0020097627f,0.0059880256f,0.009966114f,0.013944201f,0.01792211f,0.021899965f,0.025877733f,0.029855346f,0.033832956f,0.037810322f,0.041787688f,0.045764867f,0.04974198f,0.053718954f,
|
||||
0.05769581f,0.061672557f,0.065649144f,0.06962565f,0.07360197f,0.07757821f,0.08155425f,0.0855302f,0.08950596f,0.0934816f,0.097457066f,0.101432376f,0.10540755f,0.1093825f,0.11335737f,0.11733195f,
|
||||
0.12130644f,0.12528068f,0.12925476f,0.13322866f,0.1372023f,0.14117579f,0.14514904f,0.14912204f,0.1530949f,0.15706745f,0.16103975f,0.16501188f,0.1689837f,0.17295523f,0.17692655f,0.1808976f,
|
||||
0.18486828f,0.1888387f,0.19280887f,0.1967787f,0.20074815f,0.20471728f,0.2086861f,0.21265456f,0.21662268f,0.22059034f,0.22455761f,0.22852449f,0.23249097f,0.236457f,0.24042259f,0.24438772f,
|
||||
0.24835236f,0.2523165f,0.25628012f,0.2602432f,0.26420572f,0.26816767f,0.27212903f,0.27608976f,0.28004986f,0.28400928f,0.28796804f,0.2919261f,0.2958834f,0.2998399f,0.30379558f,0.30775046f,
|
||||
0.31170452f,0.31565768f,0.31960982f,0.32356104f,0.3275113f,0.33146045f,0.3354085f,0.3393555f,0.34330124f,0.3472458f,0.35118902f,0.355131f,0.3590715f,0.36301064f,0.36694816f,0.3708842f,
|
||||
0.3748186f,0.37875122f,0.38268217f,0.3866112f,0.3905383f,0.39446342f,0.39838645f,0.40230724f,0.40622574f,0.41014186f,0.4140555f,0.41796657f,0.4218749f,0.42578045f,0.42968303f,0.4335825f,
|
||||
0.4374788f,0.44137177f,0.44526124f,0.44914708f,0.45302916f,0.45690724f,0.46078113f,0.46465078f,0.468516f,0.47237647f,0.47623205f,0.48008266f,0.4839279f,0.48776764f,0.49160177f,0.49542972f,
|
||||
0.49925172f,0.503067f,0.5068758f,0.51067746f,0.51447207f,0.51825887f,0.52203804f,0.52580905f,0.5295716f,0.5333255f,0.5370702f,0.5408056f,0.5445313f,0.54824686f,0.55195194f,0.5556463f,
|
||||
0.5593296f,0.5630012f,0.56666094f,0.57030845f,0.5739433f,0.5775651f,0.58117324f,0.5847676f,0.5883477f,0.59191316f,0.5954636f,0.5989982f,0.60251695f,0.6060194f,0.6095051f,0.61297375f,
|
||||
0.6164247f,0.6198574f,0.62327176f,0.6266674f,0.63004386f,0.6334008f,0.63673735f,0.6400535f,0.64334905f,0.64662355f,0.6498765f,0.6531072f,0.6563159f,0.65950227f,0.6626658f,0.6658057f,
|
||||
0.6689224f,0.67201567f,0.6750844f,0.67812896f,0.6811494f,0.6841446f,0.687115f,0.69006073f,0.69298035f,0.69587505f,0.69874376f,0.70158684f,0.7044041f,0.7071951f,0.7099604f,0.7126992f,
|
||||
0.71541196f,0.7180984f,0.7207585f,0.7233927f,0.7259999f,0.7285815f,0.7311365f,0.7336652f,0.73616827f,0.73864496f,0.74109536f,0.74352026f,0.74591964f,0.7482929f,0.75064045f,0.7529628f,
|
||||
0.7552601f,0.7575324f,0.7597799f,0.7620023f,0.7641999f,0.7663732f,0.76852244f,0.77064764f,0.77274907f,0.774827f,0.7768816f,0.778913f,0.78092164f,0.7829076f,0.7848708f,0.78681165f,
|
||||
0.7887305f,0.7906278f,0.7925037f,0.7943586f,0.79619235f,0.7980046f,0.79979676f,0.801569f,0.8033212f,0.80505276f,0.8067654f,0.80845934f,0.81013274f,0.8117882f,0.8134254f,0.8150433f,
|
||||
0.8166442f,0.8182262f,0.8197912f,0.8213388f,0.8228689f,0.82438266f,0.8258789f,0.82735956f,0.8288232f,0.83027136f,0.8317035f,0.8331199f,0.8345216f,0.83590704f,0.83727884f,0.8386347f,
|
||||
0.8399765f,0.8413048f,0.84261733f,0.8439169f,0.84520334f,0.84647477f,0.84773356f,0.84897983f,0.85021216f,0.85143167f,0.85263914f,0.8538346f,0.85501665f,0.85618675f,0.85734534f,0.85849243f,
|
||||
0.8596281f,0.8607512f,0.8618634f,0.86296463f,0.8640551f,0.86513495f,0.8662042f,0.8672625f,0.8683101f,0.86934763f,0.87037516f,0.8713928f,0.8724007f,0.8733989f,0.8743876f,0.8753669f,
|
||||
0.87633693f,0.87729776f,0.8782496f,0.8791924f,0.8801264f,0.88105166f,0.8819684f,0.8828766f,0.8837764f,0.884668f,0.88555145f,0.88642687f,0.88729435f,0.88815403f,0.8890061f,0.8898505f,
|
||||
0.8906874f,0.89151704f,0.8923394f,0.8931546f,0.8939628f,0.89476323f,0.8955566f,0.8963433f,0.8971233f,0.8978967f,0.89866376f,0.89942443f,0.90017843f,0.90092534f,0.9016661f,0.9024009f,
|
||||
0.9031299f,0.90385306f,0.90456975f,0.90527993f,0.9059846f,0.90668386f,0.9073778f,0.9080655f,0.9087471f,0.9094236f,0.91009516f,0.9107616f,0.91142124f,0.9120762f,0.91272646f,0.91337216f,
|
||||
0.91401106f,0.91464555f,0.91527575f,0.915901f,0.91652024f,0.9171354f,0.9177466f,0.9183519f,0.91895264f,0.9195496f,0.9201418f,0.9207286f,0.92131186f,0.9218912f,0.9224646f,0.9230347f,
|
||||
0.9236013f,0.9241619f,0.92471933f,0.9252734f,0.92582166f,0.926367f,0.92690873f,0.9274451f,0.9279788f,0.9285084f,0.92903346f,0.929556f,0.9300736f,0.9305878f,0.93109953f,0.9316056f,
|
||||
0.9321094f,0.9326094f,0.93310535f,0.9335993f,0.93408775f,0.9345741f,0.93505687f,0.9355357f,0.93601286f,0.9364844f,0.93695444f,0.9374203f,0.93788326f,0.9383437f,0.93879974f,0.9392545f,
|
||||
0.939704f,0.94015217f,0.9405962f,0.9410379f,0.94147664f,0.941912f,0.9423454f,0.9427746f,0.9432027f,0.94362587f,0.9440483f,0.944466f,0.94488263f,0.9452952f,0.94570625f,0.9461137f,
|
||||
0.9465192f,0.9469216f,0.9473217f,0.9477191f,0.948114f,0.94850636f,0.94889617f,0.9492836f,0.9496684f,0.95005095f,0.950431f,0.95080864f,0.9511839f,0.9515568f,0.95192754f,0.9522956f,
|
||||
0.9526619f,0.9530252f,0.9533872f,0.95374584f,0.9541036f,0.9544576f,0.9548113f,0.9551606f,0.95550996f,0.95585513f,0.9561999f,0.9565413f,0.95688146f,0.9572192f,0.9575549f,0.9578891f,
|
||||
0.9582203f,0.95855105f,0.9588778f,0.9592046f,0.9595277f,0.95985f,0.9601699f,0.96048796f,0.96080476f,0.96111846f,0.96143216f,0.9617418f,0.9620512f,0.962358f,0.9626632f,0.96296734f,
|
||||
0.9632682f,0.96356916f,0.9638666f,0.96416336f,0.9644583f,0.9647509f,0.96504354f,0.96533203f,0.9656206f,0.9659069f,0.96619135f,0.96647555f,0.966756f,0.96703637f,0.9673146f,0.96759105f,
|
||||
0.96786743f,0.9681399f,0.9684123f,0.968683f,0.9689515f,0.96922004f,0.96948516f,0.9697498f,0.97001344f,0.9702742f,0.970535f,0.9707934f,0.9710503f,0.9713073f,0.9715606f,0.97181374f,
|
||||
0.9720659f,0.9723153f,0.97256464f,0.97281206f,0.9730577f,0.9733033f,0.9735461f,0.973788f,0.9740299f,0.9742682f,0.9745065f,0.974744f,0.9749787f,0.97521335f,0.97544664f,0.9756777f,
|
||||
0.97590876f,0.976138f,0.9763655f,0.976593f,0.97681826f,0.97704226f,0.9772662f,0.9774877f,0.97770816f,0.97792864f,0.97814643f,0.97836345f,0.9785805f,0.97879475f,0.9790083f,0.9792219f,
|
||||
0.9794328f,0.979643f,0.97985315f,0.9800608f,0.9802676f,0.98047435f,0.9806789f,0.9808824f,0.98108584f,0.9812874f,0.9814875f,0.98168766f,0.9818864f,0.98208326f,0.9822801f,0.9824761f,
|
||||
0.9826697f,0.9828633f,0.9830567f,0.9832471f,0.9834375f,0.98362786f,0.98381555f,0.98400277f,0.9841899f,0.98437536f,0.98455936f,0.9847434f,0.98492664f,0.9851075f,0.9852884f,0.9854693f,
|
||||
0.9856473f,0.98582506f,0.98600286f,0.986179f,0.9863537f,0.9865284f,0.9867027f,0.98687434f,0.987046f,0.98721766f,0.9873872f,0.98755586f,0.9877245f,0.9878925f,0.98805815f,0.9882238f,
|
||||
0.98838943f,0.988553f,0.9887157f,0.98887837f,0.9890407f,0.9892004f,0.98936015f,0.9895199f,0.9896781f,0.9898349f,0.9899918f,0.9901486f,0.9903028f,0.99045676f,0.9906107f,0.99076396f,
|
||||
0.9909151f,0.9910662f,0.9912173f,0.9913669f,0.9915152f,0.9916635f,0.9918118f,0.99195784f,0.99210334f,0.99224883f,0.9923943f,0.992537f,0.9926798f,0.99282247f,0.9929647f,0.9931047f,
|
||||
0.99324465f,0.99338466f,0.9935238f,0.99366105f,0.9937983f,0.9939356f,0.9940718f,0.9942063f,0.9943409f,0.9944754f,0.9946088f,0.9947407f,0.9948726f,0.99500453f,0.9951353f,0.99526453f,
|
||||
0.9953938f,0.99552304f,0.99565125f,0.9957779f,0.99590456f,0.99603117f,0.996157f,0.9962811f,0.9964051f,0.99652916f,0.9966528f,0.99677426f,0.99689573f,0.9970172f,0.9971387f,0.99725765f,
|
||||
0.99737656f,0.99749553f,0.99761444f,0.99773145f,0.99784786f,0.99796426f,0.99808073f,0.9981959f,0.9983098f,0.99842376f,0.99853766f,0.99865115f,0.9987626f,0.99887407f,0.9989855f,0.999097f,
|
||||
0.9992064f,0.99931544f,0.99942446f,0.99953353f,0.99964154f,0.9997481f,0.99985474f,0.9999613f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,
|
||||
1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f
|
||||
)
|
||||
/** To eliminated visible edge on the gradient when 255/1023 is exceeded */
|
||||
fun Int.normaliseToColourHDR() = Color(
|
||||
RGB_HDR_LUT[this.rawR()],
|
||||
RGB_HDR_LUT[this.rawG()],
|
||||
RGB_HDR_LUT[this.rawB()]
|
||||
)
|
||||
|
||||
data class Lantern(val posX: Int, val posY: Int, val luminosity: Int)
|
||||
|
||||
|
||||
28
work_files/HDRcurveBezierLinIntp.kts
Normal file
28
work_files/HDRcurveBezierLinIntp.kts
Normal file
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* Weighted bezier curve interpolation by making bunch of linear curves, calculating intersect points between
|
||||
* y = 1 / (1 + 3 * (k / n)) * eks ; eks <- [0..1023]
|
||||
* (where k: step, n: max step)
|
||||
* and take smallest value
|
||||
*/
|
||||
|
||||
val ymax = 260.0 // NOT a mistake!
|
||||
val n = 1024
|
||||
val polynomial = 6.0
|
||||
val curves = Array(n, { k -> { eks: Int ->
|
||||
val p = k.toDouble() / n.toDouble()
|
||||
val m = (ymax - ymax * p) / (768.0 * Math.pow(p, polynomial) + 256.0 - ymax * p)
|
||||
m * (eks - ymax * p) + ymax * p
|
||||
} })
|
||||
|
||||
|
||||
print("\n\n")
|
||||
|
||||
(0..n - 1).forEach { step ->
|
||||
val intersects = curves.map { f -> f(step) }.sorted()
|
||||
var c = minOf(1f, intersects[0].toFloat() / 256f)
|
||||
if (c < 0f) c = 0f
|
||||
//println("step $step\t$c")
|
||||
|
||||
if (step > 0 && step % 16 == 0) println()
|
||||
print("${c}f,")
|
||||
}
|
||||
Reference in New Issue
Block a user