From 30bc0b2c1e1ebba93441d95fdf76880acdd90e05 Mon Sep 17 00:00:00 2001 From: GuoLei1990 Date: Wed, 24 Jul 2024 10:54:26 +0800 Subject: [PATCH 1/2] "v1.2.0" --- packages/core/package.json | 2 +- packages/design/package.json | 2 +- packages/galacean/package.json | 2 +- packages/loader/package.json | 2 +- packages/math/package.json | 2 +- packages/physics-lite/package.json | 2 +- packages/physics-physx/package.json | 2 +- packages/rhi-webgl/package.json | 2 +- packages/shader-lab/package.json | 2 +- packages/xr-webxr/package.json | 2 +- packages/xr/package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 820abd40a..1889587dc 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@galacean/engine-core", - "version": "1.2.0-beta.7", + "version": "1.2.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/design/package.json b/packages/design/package.json index 43e89aee3..9c2947993 100644 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -1,6 +1,6 @@ { "name": "@galacean/engine-design", - "version": "1.2.0-beta.7", + "version": "1.2.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/galacean/package.json b/packages/galacean/package.json index c8a19faee..a7b179406 100644 --- a/packages/galacean/package.json +++ b/packages/galacean/package.json @@ -1,6 +1,6 @@ { "name": "@galacean/engine", - "version": "1.2.0-beta.7", + "version": "1.2.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/loader/package.json b/packages/loader/package.json index 0c6acbb77..1debdddda 100644 --- a/packages/loader/package.json +++ b/packages/loader/package.json @@ -1,6 +1,6 @@ { "name": "@galacean/engine-loader", - "version": "1.2.0-beta.7", + "version": "1.2.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/math/package.json b/packages/math/package.json index f78850035..f85e7736e 100644 --- a/packages/math/package.json +++ b/packages/math/package.json @@ -1,6 +1,6 @@ { "name": "@galacean/engine-math", - "version": "1.2.0-beta.7", + "version": "1.2.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/physics-lite/package.json b/packages/physics-lite/package.json index dee95f0d0..cacf342d9 100644 --- a/packages/physics-lite/package.json +++ b/packages/physics-lite/package.json @@ -1,6 +1,6 @@ { "name": "@galacean/engine-physics-lite", - "version": "1.2.0-beta.7", + "version": "1.2.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/physics-physx/package.json b/packages/physics-physx/package.json index 7608ed3cd..527cd52f6 100644 --- a/packages/physics-physx/package.json +++ b/packages/physics-physx/package.json @@ -1,6 +1,6 @@ { "name": "@galacean/engine-physics-physx", - "version": "1.2.0-beta.7", + "version": "1.2.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/rhi-webgl/package.json b/packages/rhi-webgl/package.json index 84569ffbb..b4fbc7925 100644 --- a/packages/rhi-webgl/package.json +++ b/packages/rhi-webgl/package.json @@ -1,6 +1,6 @@ { "name": "@galacean/engine-rhi-webgl", - "version": "1.2.0-beta.7", + "version": "1.2.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/shader-lab/package.json b/packages/shader-lab/package.json index c3e8f5cd6..5952666b1 100644 --- a/packages/shader-lab/package.json +++ b/packages/shader-lab/package.json @@ -1,6 +1,6 @@ { "name": "@galacean/engine-shader-lab", - "version": "1.2.0-beta.7", + "version": "1.2.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/xr-webxr/package.json b/packages/xr-webxr/package.json index 48ee98976..b8313cb8a 100644 --- a/packages/xr-webxr/package.json +++ b/packages/xr-webxr/package.json @@ -1,6 +1,6 @@ { "name": "@galacean/engine-xr-webxr", - "version": "1.2.0-beta.7", + "version": "1.2.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/xr/package.json b/packages/xr/package.json index 4574b770d..e49d82a1e 100644 --- a/packages/xr/package.json +++ b/packages/xr/package.json @@ -1,6 +1,6 @@ { "name": "@galacean/engine-xr", - "version": "1.2.0-beta.7", + "version": "1.2.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" From 07970c9ef916b55cc050802e93b188f0af957333 Mon Sep 17 00:00:00 2001 From: AZhan Date: Fri, 26 Jul 2024 19:01:45 +0800 Subject: [PATCH 2/2] fix: SkinnedRenderer.boundingBox updates are not timely --- packages/core/src/Renderer.ts | 26 ++++++++----------- packages/core/src/mesh/SkinnedMeshRenderer.ts | 5 ++-- tests/src/core/SkinnedMeshRenderer.test.ts | 9 +++++++ 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/packages/core/src/Renderer.ts b/packages/core/src/Renderer.ts index e6f63e62d..76279d730 100644 --- a/packages/core/src/Renderer.ts +++ b/packages/core/src/Renderer.ts @@ -54,6 +54,8 @@ export class Renderer extends Component implements IComponentCustomClone { protected _materials: Material[] = []; @ignoreClone protected _dirtyUpdateFlag: number = 0; + @ignoreClone + protected _transform: Transform; @deepClone private _shaderData: ShaderData = new ShaderData(ShaderDataGroup.Renderer); @@ -159,7 +161,7 @@ export class Renderer extends Component implements IComponentCustomClone { this._addResourceReferCount(this.shaderData, 1); this._onTransformChanged = this._onTransformChanged.bind(this); - this._registerEntityTransformListener(); + this._setTransform(entity.transform); shaderData.enableMacro(Renderer._receiveShadowMacro); shaderData.setVector4(Renderer._rendererLayerProperty, this._rendererLayer); @@ -350,7 +352,7 @@ export class Renderer extends Component implements IComponentCustomClone { protected override _onDestroy(): void { super._onDestroy(); - this._unRegisterEntityTransformListener(); + this._setTransform(null); this._addResourceReferCount(this.shaderData, -1); const materials = this._materials; @@ -376,15 +378,14 @@ export class Renderer extends Component implements IComponentCustomClone { * @internal */ _updateShaderData(context: RenderContext, onlyMVP: boolean): void { - const entity = this.entity; - const worldMatrix = entity.transform.worldMatrix; + const worldMatrix = this._transform.worldMatrix; if (onlyMVP) { this._updateMVPShaderData(context, worldMatrix); return; } this._updateTransformShaderData(context, worldMatrix); - const layer = entity.layer; + const layer = this.entity.layer; this._rendererLayer.set(layer & 65535, (layer >>> 16) & 65535, 0, 0); } @@ -399,7 +400,7 @@ export class Renderer extends Component implements IComponentCustomClone { Matrix.invert(worldMatrix, normalMatrix); normalMatrix.transpose(); - shaderData.setMatrix(Renderer._localMatrixProperty, this.entity.transform.localMatrix); + shaderData.setMatrix(Renderer._localMatrixProperty, this._transform.localMatrix); shaderData.setMatrix(Renderer._worldMatrixProperty, worldMatrix); shaderData.setMatrix(Renderer._mvMatrixProperty, mvMatrix); shaderData.setMatrix(Renderer._mvInvMatrixProperty, mvInvMatrix); @@ -417,15 +418,10 @@ export class Renderer extends Component implements IComponentCustomClone { /** * @internal */ - protected _registerEntityTransformListener(): void { - this.entity.transform._updateFlagManager.addListener(this._onTransformChanged); - } - - /** - * @internal - */ - protected _unRegisterEntityTransformListener(): void { - this.entity.transform._updateFlagManager.removeListener(this._onTransformChanged); + protected _setTransform(transform: Transform): void { + this._transform?._updateFlagManager.removeListener(this._onTransformChanged); + transform?._updateFlagManager.addListener(this._onTransformChanged); + this._transform = transform; } /** diff --git a/packages/core/src/mesh/SkinnedMeshRenderer.ts b/packages/core/src/mesh/SkinnedMeshRenderer.ts index 2bb8bdcde..e6a1a2c75 100644 --- a/packages/core/src/mesh/SkinnedMeshRenderer.ts +++ b/packages/core/src/mesh/SkinnedMeshRenderer.ts @@ -128,7 +128,7 @@ export class SkinnedMeshRenderer extends MeshRenderer { override _updateShaderData(context: RenderContext, onlyMVP: boolean): void { const { entity, skin } = this; - const worldMatrix = (skin?.rootBone ?? entity).transform.worldMatrix; + const worldMatrix = this._transform.worldMatrix; if (onlyMVP) { this._updateMVPShaderData(context, worldMatrix); @@ -223,7 +223,7 @@ export class SkinnedMeshRenderer extends MeshRenderer { protected override _updateBounds(worldBounds: BoundingBox): void { const rootBone = this.skin?.rootBone; if (rootBone) { - BoundingBox.transform(this._localBounds, rootBone.transform.worldMatrix, worldBounds); + BoundingBox.transform(this._localBounds, this._transform.worldMatrix, worldBounds); } else { super._updateBounds(worldBounds); } @@ -269,6 +269,7 @@ export class SkinnedMeshRenderer extends MeshRenderer { } break; case SkinUpdateFlag.RootBoneChanged: + this._setTransform((value).transform); this._dirtyUpdateFlag |= RendererUpdateFlags.WorldVolume; break; } diff --git a/tests/src/core/SkinnedMeshRenderer.test.ts b/tests/src/core/SkinnedMeshRenderer.test.ts index 2af09034b..219612ad9 100644 --- a/tests/src/core/SkinnedMeshRenderer.test.ts +++ b/tests/src/core/SkinnedMeshRenderer.test.ts @@ -72,8 +72,10 @@ describe("SkinnedMeshRenderer", async () => { new Matrix(1, 0, 0, -1, 0, 0, 0, -1, 0, 0, -2, -1).invert() ]; + const position = new Vector3(); const modelMesh = new ModelMesh(engine); const entity = rootEntity.createChild("SkinEntity"); + entity.transform.position = position; const rootBone = entity.createChild("RootBone"); rootBone.createChild("Joint0"); rootBone.createChild("Joint1"); @@ -84,6 +86,8 @@ describe("SkinnedMeshRenderer", async () => { skinnedMR.skin = skin; engine.update(); + expect(skinnedMR.bounds.min).to.deep.eq(position); + expect(skinnedMR.bounds.max).to.deep.eq(position); // Test that the skin is set correctly. expect(skinnedMR.skin).to.be.equal(skin); @@ -94,6 +98,11 @@ describe("SkinnedMeshRenderer", async () => { // Test that the rootBone is set correctly. expect(skinnedMR.rootBone).to.be.equal(rootBone0); + + position.set(1, 0, 0); + rootBone0.transform.position = position; + expect(skinnedMR.bounds.min).to.deep.eq(position); + expect(skinnedMR.bounds.max).to.deep.eq(position); }); it("clone", () => {