откорректированны параметры

This commit is contained in:
2026-08-10 04:29:26 +04:00
parent 4f6944668e
commit eedd020064
2 changed files with 14 additions and 9 deletions
@@ -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);