auto-git:

[change] src/app/App.tsx
 [change] src/document/migrate-scene-document.ts
 [change] src/document/scene-document-validation.ts
 [change] src/document/scene-document.ts
 [change] src/document/world-settings.ts
 [change] src/rendering/advanced-rendering.ts
 [change] tests/domain/advanced-rendering.test.ts
 [change] tests/serialization/scene-document-json.test.ts
This commit is contained in:
2026-05-21 08:11:20 +02:00
parent 69b13e9738
commit 572e1434e4
8 changed files with 160 additions and 41 deletions

View File

@@ -486,9 +486,9 @@ describe("god rays parameters", () => {
}
};
expect(
resolveDominantScreenSpaceGodRaysLightInput(visibleSun, null)
).toBe(visibleSun);
expect(resolveDominantScreenSpaceGodRaysLightInput(visibleSun, null)).toBe(
visibleSun
);
expect(
resolveDominantScreenSpaceGodRaysLightInput(visibleSun, visibleMoon)
).toBe(visibleMoon);
@@ -532,9 +532,9 @@ describe("god rays parameters", () => {
).toBeGreaterThan(0.5);
expect(resolveGodRaysSourceMask(0.035)).toBeLessThan(0.5);
expect(resolveGodRaysSourceMask(0.035, 2)).toBeGreaterThan(0.5);
expect(
resolveGodRaysSourceMask(GOD_RAYS_SOURCE_MASK_RADII.haloOuter)
).toBe(0);
expect(resolveGodRaysSourceMask(GOD_RAYS_SOURCE_MASK_RADII.haloOuter)).toBe(
0
);
});
});
@@ -667,6 +667,131 @@ describe("createAdvancedRenderingComposer", () => {
expect(postprocessingState.ssaoCalls).toHaveLength(0);
});
it("keeps SMAA as the default post-process anti-aliasing effect", () => {
resetPostprocessingState();
const settings = createDefaultWorldSettings().advancedRendering;
settings.enabled = true;
createAdvancedRenderingComposer(
{
capabilities: {
isWebGL2: true
}
} as unknown as never,
new Scene(),
new PerspectiveCamera(),
settings
);
expect(postprocessingState.composerOptions[0]).toMatchObject({
multisampling: 0
});
expect(getLastEffectPassEffectNames()).toEqual([
"MockToneMappingEffect",
"MockSMAAEffect"
]);
});
it("can disable anti-aliasing in the post stack", () => {
resetPostprocessingState();
const settings = createDefaultWorldSettings().advancedRendering;
settings.enabled = true;
settings.antiAliasing.enabled = false;
createAdvancedRenderingComposer(
{
capabilities: {
isWebGL2: true
}
} as unknown as never,
new Scene(),
new PerspectiveCamera(),
settings
);
expect(postprocessingState.composerOptions[0]).toMatchObject({
multisampling: 0
});
expect(getLastEffectPassEffectNames()).toEqual(["MockToneMappingEffect"]);
});
it("uses FXAA when selected", () => {
resetPostprocessingState();
const settings = createDefaultWorldSettings().advancedRendering;
settings.enabled = true;
settings.antiAliasing.mode = "fxaa";
createAdvancedRenderingComposer(
{
capabilities: {
isWebGL2: true
}
} as unknown as never,
new Scene(),
new PerspectiveCamera(),
settings
);
expect(postprocessingState.composerOptions[0]).toMatchObject({
multisampling: 0
});
expect(getLastEffectPassEffectNames()).toEqual([
"MockToneMappingEffect",
"MockFXAAEffect"
]);
});
it("uses composer MSAA samples on WebGL2 when an MSAA mode is selected", () => {
resetPostprocessingState();
const settings = createDefaultWorldSettings().advancedRendering;
settings.enabled = true;
settings.antiAliasing.mode = "msaa4x";
createAdvancedRenderingComposer(
{
capabilities: {
isWebGL2: true
}
} as unknown as never,
new Scene(),
new PerspectiveCamera(),
settings
);
expect(postprocessingState.composerOptions[0]).toMatchObject({
multisampling: 4
});
expect(getLastEffectPassEffectNames()).toEqual(["MockToneMappingEffect"]);
});
it("falls back to no composer MSAA samples outside WebGL2", () => {
resetPostprocessingState();
const settings = createDefaultWorldSettings().advancedRendering;
settings.enabled = true;
settings.antiAliasing.mode = "msaa8x";
createAdvancedRenderingComposer(
{
capabilities: {
isWebGL2: false
}
} as unknown as never,
new Scene(),
new PerspectiveCamera(),
settings
);
expect(postprocessingState.composerOptions[0]).toMatchObject({
multisampling: 0
});
expect(getLastEffectPassEffectNames()).toEqual(["MockToneMappingEffect"]);
});
it("adds distance fog before post-world overlay layers", () => {
postprocessingState.composerOptions.length = 0;
postprocessingState.composerPasses.length = 0;

View File

@@ -1877,11 +1877,8 @@ describe("scene document JSON", () => {
const legacyDocument = JSON.parse(
serializeSceneDocument(emptyScene)
) as Record<string, any>;
const legacyFoliage =
legacyDocument.world.advancedRendering.foliage as Record<
string,
unknown
>;
const legacyFoliage = legacyDocument.world.advancedRendering
.foliage as Record<string, unknown>;
legacyDocument.version = LENS_FLARE_SCENE_DOCUMENT_VERSION;
delete legacyFoliage.windEnabled;