diff --git a/src/rendering/water-material.js b/src/rendering/water-material.js index 931f826d..4becf32b 100644 --- a/src/rendering/water-material.js +++ b/src/rendering/water-material.js @@ -933,24 +933,22 @@ export function createWaterMaterial(options) { } `; - const uniforms = UniformsUtils.merge([ - UniformsLib.fog, - { - time: animationUniform, - waterColor: { value: [cr, cg, cb] }, - surfaceOpacity: { value: clampedOpacity }, - waveStrength: { value: waveStrength }, - isTopFace: { value: topFaceFlag }, - surfaceDisplacementEnabled: surfaceDisplacementEnabledUniform, - halfSize: { value: halfSize }, - contactPatches: contactPatchesUniform, - contactPatchAxes: contactPatchAxesUniform, - contactPatchShapes: contactPatchShapesUniform, - reflectionTexture: reflectionTextureUniform, - reflectionMatrix: reflectionMatrixUniform, - reflectionEnabled: reflectionEnabledUniform - } - ]); + const uniforms = UniformsUtils.clone(UniformsLib.fog); + Object.assign(uniforms, { + time: animationUniform, + waterColor: { value: [cr, cg, cb] }, + surfaceOpacity: { value: clampedOpacity }, + waveStrength: { value: waveStrength }, + isTopFace: { value: topFaceFlag }, + surfaceDisplacementEnabled: surfaceDisplacementEnabledUniform, + halfSize: { value: halfSize }, + contactPatches: contactPatchesUniform, + contactPatchAxes: contactPatchAxesUniform, + contactPatchShapes: contactPatchShapesUniform, + reflectionTexture: reflectionTextureUniform, + reflectionMatrix: reflectionMatrixUniform, + reflectionEnabled: reflectionEnabledUniform + }); const material = new ShaderMaterial({ vertexShader, diff --git a/src/rendering/water-material.ts b/src/rendering/water-material.ts index 1a288dab..45360d02 100644 --- a/src/rendering/water-material.ts +++ b/src/rendering/water-material.ts @@ -1188,24 +1188,22 @@ export function createWaterMaterial(options: WaterMaterialOptions): WaterMateria } `; - const uniforms = UniformsUtils.merge([ - UniformsLib.fog, - { - time: animationUniform, - waterColor: { value: [cr, cg, cb] }, - surfaceOpacity: { value: clampedOpacity }, - waveStrength: { value: waveStrength }, - isTopFace: { value: topFaceFlag }, - surfaceDisplacementEnabled: surfaceDisplacementEnabledUniform, - halfSize: { value: halfSize }, - contactPatches: contactPatchesUniform, - contactPatchAxes: contactPatchAxesUniform, - contactPatchShapes: contactPatchShapesUniform, - reflectionTexture: reflectionTextureUniform, - reflectionMatrix: reflectionMatrixUniform, - reflectionEnabled: reflectionEnabledUniform - } - ]); + const uniforms = UniformsUtils.clone(UniformsLib.fog); + Object.assign(uniforms, { + time: animationUniform, + waterColor: { value: [cr, cg, cb] }, + surfaceOpacity: { value: clampedOpacity }, + waveStrength: { value: waveStrength }, + isTopFace: { value: topFaceFlag }, + surfaceDisplacementEnabled: surfaceDisplacementEnabledUniform, + halfSize: { value: halfSize }, + contactPatches: contactPatchesUniform, + contactPatchAxes: contactPatchAxesUniform, + contactPatchShapes: contactPatchShapesUniform, + reflectionTexture: reflectionTextureUniform, + reflectionMatrix: reflectionMatrixUniform, + reflectionEnabled: reflectionEnabledUniform + }); const material = new ShaderMaterial({ vertexShader, diff --git a/tests/domain/water-material.test.ts b/tests/domain/water-material.test.ts index 78963b1a..1a3a07b1 100644 --- a/tests/domain/water-material.test.ts +++ b/tests/domain/water-material.test.ts @@ -616,5 +616,14 @@ describe("water material helpers", () => { expect(result.reflectionTextureUniform).not.toBeNull(); expect(result.reflectionMatrixUniform).not.toBeNull(); expect(result.reflectionEnabledUniform?.value).toBe(0); + expect(result.animationUniform).toBe(material.uniforms["time"]); + expect(result.reflectionEnabledUniform).toBe(material.uniforms["reflectionEnabled"]); + + if (result.animationUniform !== null && result.reflectionEnabledUniform !== null) { + result.animationUniform.value = 2.5; + result.reflectionEnabledUniform.value = 0.36; + expect(material.uniforms["time"]?.value).toBe(2.5); + expect(material.uniforms["reflectionEnabled"]?.value).toBe(0.36); + } }); }); \ No newline at end of file