screen space reflections vatten och dämpad motion blur på skärnor

This commit is contained in:
2026-11-01 21:46:25 +01:00
parent a7207086b2
commit cb5070dc1c
19 changed files with 480 additions and 55 deletions

View File

@@ -3,11 +3,44 @@ using Universe.Core.Generation;
using Universe.Core.Math;
using Universe.Core.Physics;
using Universe.Core.World;
using Universe.Core.Configuration;
using System.Text.Json;
namespace Universe.Tests;
public sealed class OceanTests
{
[Fact]
public void PlanetJsonRoundTripsReflectionQualityAndRejectsInvalidGpuBudgets()
{
var quality = new OceanReflectionSettings { Enabled = true, ReflectSky = false, Strength = .7, ResolutionScale = .75,
MaxSteps = 96, StridePixels = 3, MaxDistanceMeters = 8000, MaxSurfaceDistanceMeters = 6000,
ThicknessMeters = 2.5, NormalBiasMeters = .2, EdgeFade = .1 };
var path = Path.Combine(Path.GetTempPath(), $"universe-ocean-{Guid.NewGuid():N}.json");
KnownSolarSystemCatalog Load(OceanReflectionSettings? settings)
{
var definition = new SolarSystemDocument { Systems = [new SolarSystemDefinition
{
Id = "water-system", Name = "Water test", Sector = new(0, 0, 0),
Stars = [new StarDefinition { Id = "sun", Name = "Sun", RadiusMeters = 695700000 }],
Planets = [new PlanetDefinition { Id = "ocean", Name = "Ocean", RadiusMeters = 6371000,
Orbit = new() { SemiMajorAxisAu = 1 }, Ocean = new() { MaskFromSurfaceTexture = false, ScreenSpaceReflections = settings! } }]
}] };
File.WriteAllText(path, JsonSerializer.Serialize(definition));
return KnownSolarSystemCatalog.Load(path);
}
try
{
var parsed = Load(quality).GetById("water-system").Planets.Single().Ocean!.ScreenSpaceReflections;
Assert.Equal(quality, parsed);
foreach (var invalid in new OceanReflectionSettings?[] { quality with { MaxSteps = 0 }, quality with { MaxSteps = 129 },
quality with { ResolutionScale = 0 }, quality with { ThicknessMeters = 0 }, quality with { NormalBiasMeters = -1 }, null })
{
Assert.Throws<InvalidDataException>(() => Load(invalid));
}
}
finally { File.Delete(path); }
}
[Fact]
public void WaterMaskDistinguishesBlueWaterFromLandAndIce()
{