From 4b7bfab14f1c447481d387158af2d3dbc6ad5714 Mon Sep 17 00:00:00 2001 From: GuoLei1990 Date: Mon, 22 Jul 2024 19:46:32 +0800 Subject: [PATCH 1/3] fix: particle render bug --- packages/core/src/particle/ParticleRenderer.ts | 16 ++++++++-------- .../particle/color_over_lifetime_module.glsl | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/core/src/particle/ParticleRenderer.ts b/packages/core/src/particle/ParticleRenderer.ts index a84c010f65..14b7efd87a 100644 --- a/packages/core/src/particle/ParticleRenderer.ts +++ b/packages/core/src/particle/ParticleRenderer.ts @@ -159,14 +159,6 @@ export class ParticleRenderer extends Renderer { return; } - const generator = this.generator; - generator._update(this.engine.time.deltaTime); - - // No particles to render - if (generator._firstActiveElement === generator._firstFreeElement) { - return; - } - super._prepareRender(context); } @@ -201,6 +193,14 @@ export class ParticleRenderer extends Renderer { } protected override _updateRendererShaderData(context: RenderContext): void { + const generator = this.generator; + generator._update(this.engine.time.deltaTime); + + // No particles to render + if (generator._firstActiveElement === generator._firstFreeElement) { + return; + } + const shaderData = this.shaderData; shaderData.setFloat(ParticleRenderer._lengthScale, this.lengthScale); shaderData.setFloat(ParticleRenderer._speedScale, this.velocityScale); diff --git a/packages/core/src/shaderlib/particle/color_over_lifetime_module.glsl b/packages/core/src/shaderlib/particle/color_over_lifetime_module.glsl index d4f4f8ce23..cba09fb300 100644 --- a/packages/core/src/shaderlib/particle/color_over_lifetime_module.glsl +++ b/packages/core/src/shaderlib/particle/color_over_lifetime_module.glsl @@ -22,7 +22,7 @@ float time = key.x; if(alphaAge <= time){ if(i == 0){ - value.a = colorKeys[0].y; + value.a = alphaKeys[0].y; } else { vec2 lastKey = alphaKeys[i-1]; From bd09bc8443c53464eb10b7e9832f4169f7c4d331 Mon Sep 17 00:00:00 2001 From: GuoLei1990 Date: Mon, 22 Jul 2024 19:59:27 +0800 Subject: [PATCH 2/3] refactor: opt update func name --- packages/core/src/Renderer.ts | 8 +++++--- packages/core/src/mesh/SkinnedMeshRenderer.ts | 4 ++-- packages/core/src/particle/ParticleRenderer.ts | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/core/src/Renderer.ts b/packages/core/src/Renderer.ts index a5701d35cb..b15444fd55 100644 --- a/packages/core/src/Renderer.ts +++ b/packages/core/src/Renderer.ts @@ -334,9 +334,8 @@ export class Renderer extends Component implements IComponentCustomClone { this._distanceForSort = Vector3.distanceSquared(boundsCenter, cameraPosition); } - // Update once per frame per renderer, not influenced by batched if (this._renderFrameCount !== this.engine.time.frameCount) { - this._updateRendererShaderData(context); + this._update(context); } this._render(context); @@ -411,7 +410,10 @@ export class Renderer extends Component implements IComponentCustomClone { */ _batch(elementA: SubRenderElement, elementB?: SubRenderElement): void {} - protected _updateRendererShaderData(context: RenderContext): void { + /** + * Update once per frame per renderer, not influenced by batched. + */ + protected _update(context: RenderContext): void { const { layer } = this.entity; this._rendererLayer.set(layer & 65535, (layer >>> 16) & 65535, 0, 0); } diff --git a/packages/core/src/mesh/SkinnedMeshRenderer.ts b/packages/core/src/mesh/SkinnedMeshRenderer.ts index 4d62830ba6..77b5ea9312 100644 --- a/packages/core/src/mesh/SkinnedMeshRenderer.ts +++ b/packages/core/src/mesh/SkinnedMeshRenderer.ts @@ -154,7 +154,7 @@ export class SkinnedMeshRenderer extends MeshRenderer { this._blendShapeWeights && (target._blendShapeWeights = this._blendShapeWeights.slice()); } - protected override _updateRendererShaderData(context: RenderContext): void { + protected override _update(context: RenderContext): void { const { skin } = this; if (skin?.bones.length > 0) { skin._updateSkinMatrices(this); @@ -210,7 +210,7 @@ export class SkinnedMeshRenderer extends MeshRenderer { } } - super._updateRendererShaderData(context); + super._update(context); } /** diff --git a/packages/core/src/particle/ParticleRenderer.ts b/packages/core/src/particle/ParticleRenderer.ts index 14b7efd87a..a03b357191 100644 --- a/packages/core/src/particle/ParticleRenderer.ts +++ b/packages/core/src/particle/ParticleRenderer.ts @@ -192,7 +192,7 @@ export class ParticleRenderer extends Renderer { } } - protected override _updateRendererShaderData(context: RenderContext): void { + protected override _update(context: RenderContext): void { const generator = this.generator; generator._update(this.engine.time.deltaTime); From c56ba16ddeccdf6d30eff4f6ce889a665697f02b Mon Sep 17 00:00:00 2001 From: GuoLei1990 Date: Mon, 22 Jul 2024 20:11:06 +0800 Subject: [PATCH 3/3] refactor: opt code --- packages/core/src/Renderer.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core/src/Renderer.ts b/packages/core/src/Renderer.ts index b15444fd55..9b2b4f2f18 100644 --- a/packages/core/src/Renderer.ts +++ b/packages/core/src/Renderer.ts @@ -323,6 +323,10 @@ export class Renderer extends Component implements IComponentCustomClone { * @internal */ _prepareRender(context: RenderContext): void { + if (this._renderFrameCount !== this.engine.time.frameCount) { + this._update(context); + } + const virtualCamera = context.virtualCamera; const cameraPosition = virtualCamera.position; const boundsCenter = this.bounds.getCenter(Renderer._tempVector0); @@ -334,10 +338,6 @@ export class Renderer extends Component implements IComponentCustomClone { this._distanceForSort = Vector3.distanceSquared(boundsCenter, cameraPosition); } - if (this._renderFrameCount !== this.engine.time.frameCount) { - this._update(context); - } - this._render(context); // union camera global macro and renderer macro.