откорректированны параметры
This commit is contained in:
@@ -39,6 +39,7 @@ public final class FogEnvironmentContext {
|
|||||||
|
|
||||||
long timeOfDay = world.getTimeOfDay() % 24000L;
|
long timeOfDay = world.getTimeOfDay() % 24000L;
|
||||||
long totalDays = world.getTimeOfDay() / 24000L;
|
long totalDays = world.getTimeOfDay() / 24000L;
|
||||||
|
float timeOfDayNorm = timeOfDay/24000.0F;
|
||||||
|
|
||||||
// === 1. Трапеция для EMISSION ===
|
// === 1. Трапеция для EMISSION ===
|
||||||
double noiseValue = dayNoise.sample(totalDays * 0.05, 0);
|
double noiseValue = dayNoise.sample(totalDays * 0.05, 0);
|
||||||
@@ -73,10 +74,10 @@ public final class FogEnvironmentContext {
|
|||||||
double dayNoiseValue = dayNoise.sample(totalDays * 0.1, 100);
|
double dayNoiseValue = dayNoise.sample(totalDays * 0.1, 100);
|
||||||
float rawFogDayRandom = (float)(0.5 + dayNoiseValue * 0.5);
|
float rawFogDayRandom = (float)(0.5 + dayNoiseValue * 0.5);
|
||||||
|
|
||||||
// === 4. HeightFadeMax (90 ± 10 от дневного шума) ===
|
// === 4. HeightFadeMax (110 +15/-20 от дневного шума) ===
|
||||||
double heightNoise = dayNoise.sample(totalDays * 0.1, 200);
|
double heightNoise = dayNoise.sample(totalDays * 0.5, 200)+dayNoise.sample(timeOfDayNorm*2, totalDays)*0.25;
|
||||||
float rawHeightFadeMax = 90.0f + (float)(heightNoise * 10.0);
|
float rawHeightFadeMax = 110.0f + (float)(heightNoise * 15.0);
|
||||||
rawHeightFadeMax = Math.max(80.0f, Math.min(100.0f, rawHeightFadeMax));
|
rawHeightFadeMax = Math.max(90.0f, Math.min(125.0f, rawHeightFadeMax));
|
||||||
|
|
||||||
// === 5. Сглаживание ===
|
// === 5. Сглаживание ===
|
||||||
float lerpSpeed = 0.08f;
|
float lerpSpeed = 0.08f;
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ const float MIN_Y = -64.0;
|
|||||||
const float SIZE_Y = 384.0;
|
const float SIZE_Y = 384.0;
|
||||||
|
|
||||||
const float UNDERGROUND_TARGET_DENSITY = 0.008; // Подземная дымка (слабее поверхностной)
|
const float UNDERGROUND_TARGET_DENSITY = 0.008; // Подземная дымка (слабее поверхностной)
|
||||||
|
const float UNDERGROUND_EMISSION = 1.0;
|
||||||
|
|
||||||
float getEmission(uint magnitude, bool isAbsorber) {
|
float getEmission(uint magnitude, bool isAbsorber) {
|
||||||
if (isAbsorber || magnitude == 0u) return 0.0;
|
if (isAbsorber || magnitude == 0u) return 0.0;
|
||||||
@@ -51,8 +52,15 @@ void main() {
|
|||||||
float biomeHumidity = biomeParams.b;
|
float biomeHumidity = biomeParams.b;
|
||||||
float biomeTimeSensitivity = biomeParams.a;
|
float biomeTimeSensitivity = biomeParams.a;
|
||||||
|
|
||||||
|
// Под землёй и в закрытых местах туман ведёт себя иначе
|
||||||
|
float skyLight = texture(SkyLightSampler, uv).r;
|
||||||
|
float skyLightSmooth = smoothstep(0.2, 0.8, skyLight);
|
||||||
|
|
||||||
// === Emission ===
|
// === Emission ===
|
||||||
float finalEmission = biomeEmission * EmissionMultiplier * GlobalEmissionMultiplier;
|
float emissionTimeFactor = mix(1.0, EmissionMultiplier, biomeTimeSensitivity);
|
||||||
|
|
||||||
|
float surfaceEmission = biomeEmission * emissionTimeFactor;
|
||||||
|
float finalEmission = mix(UNDERGROUND_EMISSION, surfaceEmission, skyLightSmooth) * GlobalEmissionMultiplier;
|
||||||
|
|
||||||
// === Target Density ===
|
// === Target Density ===
|
||||||
// 1. Определяем, туманный ли сегодня день
|
// 1. Определяем, туманный ли сегодня день
|
||||||
@@ -72,10 +80,6 @@ void main() {
|
|||||||
float worldY = uv.y * SIZE_Y + MIN_Y;
|
float worldY = uv.y * SIZE_Y + MIN_Y;
|
||||||
float heightFade = 1.0 - clamp((worldY - HEIGHT_FADE_MIN) / (HeightFadeMax - HEIGHT_FADE_MIN), 0.0, 1.0);
|
float heightFade = 1.0 - clamp((worldY - HEIGHT_FADE_MIN) / (HeightFadeMax - HEIGHT_FADE_MIN), 0.0, 1.0);
|
||||||
|
|
||||||
// 4. Под землёй дымка другая
|
|
||||||
float skyLight = texture(SkyLightSampler, uv).r;
|
|
||||||
float skyLightSmooth = smoothstep(0.2, 0.8, skyLight);
|
|
||||||
|
|
||||||
// 4. Итоговая плотность
|
// 4. Итоговая плотность
|
||||||
float surfaceTargetDensity = biomeTargetDensityBase * hasFogToday * timeFactor * heightFade;
|
float surfaceTargetDensity = biomeTargetDensityBase * hasFogToday * timeFactor * heightFade;
|
||||||
float finalTargetDensity = mix(UNDERGROUND_TARGET_DENSITY, surfaceTargetDensity, skyLightSmooth);
|
float finalTargetDensity = mix(UNDERGROUND_TARGET_DENSITY, surfaceTargetDensity, skyLightSmooth);
|
||||||
|
|||||||
Reference in New Issue
Block a user