Add surfaceDisplacementEnabled to water material tests and validation

This commit is contained in:
2026-04-07 07:22:13 +02:00
parent 0b4c144090
commit c82d547dd8
7 changed files with 25 additions and 11 deletions

View File

@@ -733,7 +733,8 @@ describe("buildRuntimeSceneFromDocument", () => {
colorHex: "#2f79c4",
surfaceOpacity: 0.7,
waveStrength: 0.35,
foamContactLimit: 6
foamContactLimit: 6,
surfaceDisplacementEnabled: false
}
}
});

View File

@@ -296,7 +296,8 @@ describe("box brush commands", () => {
colorHex: "#3a7dc2",
surfaceOpacity: 0.65,
waveStrength: 0.4,
foamContactLimit: 6
foamContactLimit: 6,
surfaceDisplacementEnabled: false
}
}
})
@@ -308,7 +309,8 @@ describe("box brush commands", () => {
colorHex: "#3a7dc2",
surfaceOpacity: 0.65,
waveStrength: 0.4,
foamContactLimit: 6
foamContactLimit: 6,
surfaceDisplacementEnabled: false
}
});
@@ -324,7 +326,8 @@ describe("box brush commands", () => {
colorHex: "#3a7dc2",
surfaceOpacity: 0.65,
waveStrength: 0.4,
foamContactLimit: 6
foamContactLimit: 6,
surfaceDisplacementEnabled: false
}
});
});

View File

@@ -552,7 +552,8 @@ describe("validateSceneDocument", () => {
water: {
colorHex: "#3a7dc2",
surfaceOpacity: 0.6,
waveStrength: 0.3
waveStrength: 0.3,
surfaceDisplacementEnabled: false
}
};
(invalidWaterBrush as any).volume = {
@@ -599,6 +600,10 @@ describe("validateSceneDocument", () => {
code: "invalid-box-water-wave-strength",
path: "brushes.brush-invalid-volume-water.volume.water.waveStrength"
}),
expect.objectContaining({
code: "invalid-box-water-surface-displacement-enabled",
path: "brushes.brush-invalid-volume-water.volume.water.surfaceDisplacementEnabled"
}),
expect.objectContaining({
code: "invalid-box-fog-color",
path: "brushes.brush-invalid-volume-fog.volume.fog.colorHex"

View File

@@ -608,8 +608,9 @@ describe("water material helpers", () => {
expect(material.uniforms["fogDensity"]).toBeDefined();
expect(material.uniforms["surfaceOpacity"]?.value).toBeGreaterThan(0.14);
expect(material.uniforms["waveStrength"]?.value).toBe(0.35);
expect(material.uniforms["surfaceDisplacementEnabled"]?.value).toBe(0);
expect(material.uniforms["isTopFace"]?.value).toBe(1);
expect(material.vertexShader).not.toContain("transformed.y +=");
expect(material.vertexShader).toContain("surfaceDisplacementEnabled");
expect(result.contactPatchesUniform?.value).toHaveLength(MAX_BOX_BRUSH_WATER_FOAM_CONTACT_LIMIT);
expect(result.contactPatchShapesUniform?.value).toHaveLength(MAX_BOX_BRUSH_WATER_FOAM_CONTACT_LIMIT);
expect(result.reflectionTextureUniform).not.toBeNull();

View File

@@ -151,7 +151,8 @@ describe("scene document JSON", () => {
colorHex: "#2f79c4",
surfaceOpacity: 0.65,
waveStrength: 0.35,
foamContactLimit: 9
foamContactLimit: 9,
surfaceDisplacementEnabled: true
}
}
});
@@ -308,7 +309,8 @@ describe("scene document JSON", () => {
expect(migratedDocument.brushes["brush-water-legacy"]?.volume).toEqual({
mode: "water",
water: expect.objectContaining({
foamContactLimit: 24
foamContactLimit: 24,
surfaceDisplacementEnabled: false
})
});
});

View File

@@ -28,7 +28,7 @@ describe("resolveUnderwaterFogState", () => {
expect(fogState).not.toBeNull();
expect(fogState?.colorHex).toBe("#347aa0");
expect(fogState?.density ?? 0).toBeCloseTo(0.03352, 5);
expect(fogState?.density ?? 0).toBeCloseTo(0.08295, 5);
});
it("does not enable fog when the camera is not submerged", () => {

View File

@@ -100,7 +100,8 @@ describe("water volume integration", () => {
colorHex: "#4da6d9",
surfaceOpacity: 0.55,
waveStrength: 0.35,
foamContactLimit: 6
foamContactLimit: 6,
surfaceDisplacementEnabled: false
}
}
});
@@ -144,7 +145,8 @@ describe("water volume integration", () => {
colorHex: "#12a4ff",
surfaceOpacity: 0.55,
waveStrength: 0.35,
foamContactLimit: 6
foamContactLimit: 6,
surfaceDisplacementEnabled: false
}
});
});