Skip to content

Commit

Permalink
Fix particle bugs (#2256)
Browse files Browse the repository at this point in the history
* fix: particle render bug
  • Loading branch information
GuoLei1990 authored Jul 23, 2024
1 parent e3bf27e commit 63203db
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 18 deletions.
14 changes: 8 additions & 6 deletions packages/core/src/Renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -334,11 +338,6 @@ 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._render(context);

// union camera global macro and renderer macro.
Expand Down Expand Up @@ -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);
}
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/mesh/SkinnedMeshRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -210,7 +210,7 @@ export class SkinnedMeshRenderer extends MeshRenderer {
}
}

super._updateRendererShaderData(context);
super._update(context);
}

/**
Expand Down
18 changes: 9 additions & 9 deletions packages/core/src/particle/ParticleRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down Expand Up @@ -200,7 +192,15 @@ 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);

// 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down

0 comments on commit 63203db

Please sign in to comment.