diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-03-29 02:23:36 +1100 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-03-29 02:23:36 +1100 |
commit | 53d4183ac349021b0eb3cd96639bc2bdc6aab90c (patch) | |
tree | eeae3a2a61e055d06370781c20877c45babbd4eb /source/base | |
parent | 3c75c5d46057855c3965cc8e5feaac19c069b570 (diff) |
Add a default brightness limit
Diffstat (limited to 'source/base')
-rw-r--r-- | source/base/StarCellularLighting.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/source/base/StarCellularLighting.cpp b/source/base/StarCellularLighting.cpp index 3e5cf9a..cefd751 100644 --- a/source/base/StarCellularLighting.cpp +++ b/source/base/StarCellularLighting.cpp @@ -154,16 +154,23 @@ void CellularLightingCalculator::calculate(Lightmap& output) { output = Lightmap(arrayMax[0] - arrayMin[0], arrayMax[1] - arrayMin[1]); + float brightnessLimit = m_config.getFloat("brightnessLimit", 1.5f); + if (m_monochrome) { for (size_t x = arrayMin[0]; x < arrayMax[0]; ++x) { for (size_t y = arrayMin[1]; y < arrayMax[1]; ++y) { - output.set(x - arrayMin[0], y - arrayMin[1], m_lightArray.right().getLight(x, y)); + auto light = min(m_lightArray.right().getLight(x, y), brightnessLimit); + output.set(x - arrayMin[0], y - arrayMin[1], light); } } } else { for (size_t x = arrayMin[0]; x < arrayMax[0]; ++x) { for (size_t y = arrayMin[1]; y < arrayMax[1]; ++y) { - output.set(x - arrayMin[0], y - arrayMin[1], m_lightArray.left().getLight(x, y)); + auto light = m_lightArray.left().getLight(x, y); + float intensity = ColoredLightTraits::maxIntensity(light); + if (intensity > brightnessLimit) + light *= brightnessLimit / intensity; + output.set(x - arrayMin[0], y - arrayMin[1], light); } } } |