From 2eccca9302c04acb18e96739b631ab7d447c0902 Mon Sep 17 00:00:00 2001 From: zhuxudong Date: Thu, 17 Feb 2022 16:15:38 +0800 Subject: [PATCH 01/21] fix: normal attributer is need in unlit (#637) * fix: normal attributer is need in unlit --- .../core/src/shaderlib/blendShape_vert.glsl | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/core/src/shaderlib/blendShape_vert.glsl b/packages/core/src/shaderlib/blendShape_vert.glsl index bf83659c8d..237371e07d 100644 --- a/packages/core/src/shaderlib/blendShape_vert.glsl +++ b/packages/core/src/shaderlib/blendShape_vert.glsl @@ -7,18 +7,20 @@ position.xyz += POSITION_BS2 * u_blendShapeWeights[2]; position.xyz += POSITION_BS3 * u_blendShapeWeights[3]; - #if defined( O3_HAS_NORMAL ) && defined( OASIS_BLENDSHAPE_NORMAL ) - normal.xyz += NORMAL_BS0 * u_blendShapeWeights[0]; - normal.xyz += NORMAL_BS1 * u_blendShapeWeights[1]; - normal.xyz += NORMAL_BS2 * u_blendShapeWeights[2]; - normal.xyz += NORMAL_BS3 * u_blendShapeWeights[3]; - #endif + #ifndef OMIT_NORMAL + #if defined( O3_HAS_NORMAL ) && defined( OASIS_BLENDSHAPE_NORMAL ) + normal.xyz += NORMAL_BS0 * u_blendShapeWeights[0]; + normal.xyz += NORMAL_BS1 * u_blendShapeWeights[1]; + normal.xyz += NORMAL_BS2 * u_blendShapeWeights[2]; + normal.xyz += NORMAL_BS3 * u_blendShapeWeights[3]; + #endif - #if defined( O3_HAS_TANGENT ) && defined( O3_NORMAL_TEXTURE ) && defined(OASIS_BLENDSHAPE_TANGENT) - tangent.xyz += TANGENT_BS0 * u_blendShapeWeights[0]; - tangent.xyz += TANGENT_BS1 * u_blendShapeWeights[1]; - tangent.xyz += TANGENT_BS2 * u_blendShapeWeights[2]; - tangent.xyz += TANGENT_BS3 * u_blendShapeWeights[3]; + #if defined( O3_HAS_TANGENT ) && defined( O3_NORMAL_TEXTURE ) && defined(OASIS_BLENDSHAPE_TANGENT) + tangent.xyz += TANGENT_BS0 * u_blendShapeWeights[0]; + tangent.xyz += TANGENT_BS1 * u_blendShapeWeights[1]; + tangent.xyz += TANGENT_BS2 * u_blendShapeWeights[2]; + tangent.xyz += TANGENT_BS3 * u_blendShapeWeights[3]; + #endif #endif #endif -#endif \ No newline at end of file +#endif From b28c936db920b19e3a665a461929c6f3c1777dea Mon Sep 17 00:00:00 2001 From: yangfengzzz Date: Thu, 17 Feb 2022 17:17:11 +0800 Subject: [PATCH 02/21] fix: physx bug (#651) * fix: physx bug * fix: opt collider shape scale --- .../core/src/physics/shape/CapsuleColliderShape.ts | 1 + .../src/shape/PhysXBoxColliderShape.ts | 4 +++- .../src/shape/PhysXCapsuleColliderShape.ts | 6 ++++-- .../physics-physx/src/shape/PhysXColliderShape.ts | 14 ++++++++------ .../src/shape/PhysXPlaneColliderShape.ts | 9 ++++++--- .../src/shape/PhysXSphereColliderShape.ts | 4 +++- 6 files changed, 25 insertions(+), 13 deletions(-) diff --git a/packages/core/src/physics/shape/CapsuleColliderShape.ts b/packages/core/src/physics/shape/CapsuleColliderShape.ts index ee34e86f09..0fb253d570 100644 --- a/packages/core/src/physics/shape/CapsuleColliderShape.ts +++ b/packages/core/src/physics/shape/CapsuleColliderShape.ts @@ -53,5 +53,6 @@ export class CapsuleColliderShape extends ColliderShape { this._height, this._material._nativeMaterial ); + (this._nativeShape).setUpAxis(ColliderShapeUpAxis.Y); } } diff --git a/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts b/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts index 65cb0c0d8f..08b430e622 100644 --- a/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts @@ -28,7 +28,7 @@ export class PhysXBoxColliderShape extends PhysXColliderShape implements IBoxCol this._halfSize.z * this._scale.z ); this._allocShape(material); - this._setLocalPose(); + this._setLocalPose(this._scale); this.setUniqueID(uniqueID); } @@ -46,6 +46,8 @@ export class PhysXBoxColliderShape extends PhysXColliderShape implements IBoxCol * {@inheritDoc IColliderShape.setWorldScale } */ setWorldScale(scale: Vector3): void { + this._setLocalPose(this._scale); + scale.cloneTo(this._scale); Vector3.multiply(this._halfSize, this._scale, PhysXBoxColliderShape._tempHalfExtents); this._pxGeometry.halfExtents = PhysXBoxColliderShape._tempHalfExtents; diff --git a/packages/physics-physx/src/shape/PhysXCapsuleColliderShape.ts b/packages/physics-physx/src/shape/PhysXCapsuleColliderShape.ts index b3e373b831..46fbce4e49 100644 --- a/packages/physics-physx/src/shape/PhysXCapsuleColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXCapsuleColliderShape.ts @@ -27,7 +27,7 @@ export class PhysXCapsuleColliderShape extends PhysXColliderShape implements ICa this._pxGeometry = new PhysXPhysics._physX.PxCapsuleGeometry(this._radius, this._halfHeight); this._allocShape(material); - this._setLocalPose(); + this._setLocalPose(this._scale); this.setUniqueID(uniqueID); } @@ -85,13 +85,15 @@ export class PhysXCapsuleColliderShape extends PhysXColliderShape implements ICa this._rotation.setValue(0, PhysXColliderShape.halfSqrt, 0, PhysXColliderShape.halfSqrt); break; } - this._setLocalPose(); + this._setLocalPose(this._scale); } /** * {@inheritDoc IColliderShape.setWorldScale } */ setWorldScale(scale: Vector3): void { + this._setLocalPose(this._scale); + switch (this._upAxis) { case ColliderShapeUpAxis.X: this._pxGeometry.radius = this._radius * Math.max(scale.y, scale.z); diff --git a/packages/physics-physx/src/shape/PhysXColliderShape.ts b/packages/physics-physx/src/shape/PhysXColliderShape.ts index d72b3f9e82..0ae06697e6 100644 --- a/packages/physics-physx/src/shape/PhysXColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXColliderShape.ts @@ -21,11 +21,11 @@ export enum ShapeFlag { export abstract class PhysXColliderShape implements IColliderShape { static readonly halfSqrt: number = 0.70710678118655; static transform = { - translation: null, + translation: new Vector3(), rotation: null }; protected _position: Vector3 = new Vector3(); - protected _rotation: Quaternion = new Quaternion(0, 0, PhysXColliderShape.halfSqrt, PhysXColliderShape.halfSqrt); + protected _rotation: Quaternion = new Quaternion(); protected _scale: Vector3 = new Vector3(1, 1, 1); private _shapeFlags: ShapeFlag = ShapeFlag.SCENE_QUERY_SHAPE | ShapeFlag.SIMULATION_SHAPE; @@ -42,8 +42,10 @@ export abstract class PhysXColliderShape implements IColliderShape { * {@inheritDoc IColliderShape.setPosition } */ setPosition(value: Vector3): void { - value.cloneTo(this._position); - this._setLocalPose(); + if (value !== this._position) { + value.cloneTo(this._position); + } + this._setLocalPose(this._scale); } /** @@ -92,9 +94,9 @@ export abstract class PhysXColliderShape implements IColliderShape { this._pxShape.setFlags(new PhysXPhysics._physX.PxShapeFlags(this._shapeFlags)); } - protected _setLocalPose(): void { + protected _setLocalPose(scale: Vector3): void { const transform = PhysXColliderShape.transform; - transform.translation = this._position; + Vector3.multiply(this._position, scale, transform.translation); transform.rotation = this._rotation; this._pxShape.setLocalPose(PhysXColliderShape.transform); } diff --git a/packages/physics-physx/src/shape/PhysXPlaneColliderShape.ts b/packages/physics-physx/src/shape/PhysXPlaneColliderShape.ts index 9dd59e8e3c..5c78fba4a3 100644 --- a/packages/physics-physx/src/shape/PhysXPlaneColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXPlaneColliderShape.ts @@ -15,10 +15,11 @@ export class PhysXPlaneColliderShape extends PhysXColliderShape implements IPlan */ constructor(uniqueID: number, material: PhysXPhysicsMaterial) { super(); + this._rotation.setValue(0, 0, PhysXColliderShape.halfSqrt, PhysXColliderShape.halfSqrt); this._pxGeometry = new PhysXPhysics._physX.PxPlaneGeometry(); this._allocShape(material); - this._setLocalPose(); + this._setLocalPose(this._scale); this.setUniqueID(uniqueID); } @@ -29,11 +30,13 @@ export class PhysXPlaneColliderShape extends PhysXColliderShape implements IPlan Quaternion.rotationYawPitchRoll(value.x, value.y, value.z, this._rotation); Quaternion.rotateZ(this._rotation, Math.PI * 0.5, this._rotation); this._rotation.normalize(); - this._setLocalPose(); + this._setLocalPose(this._scale); } /** * {@inheritDoc IColliderShape.setWorldScale } */ - setWorldScale(scale: Vector3): void {} + setWorldScale(scale: Vector3): void { + this._setLocalPose(this._scale); + } } diff --git a/packages/physics-physx/src/shape/PhysXSphereColliderShape.ts b/packages/physics-physx/src/shape/PhysXSphereColliderShape.ts index 71a4c2a32f..28df217123 100644 --- a/packages/physics-physx/src/shape/PhysXSphereColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXSphereColliderShape.ts @@ -24,7 +24,7 @@ export class PhysXSphereColliderShape extends PhysXColliderShape implements ISph this._pxGeometry = new PhysXPhysics._physX.PxSphereGeometry(this._radius * this._maxScale); this._allocShape(material); - this._setLocalPose(); + this._setLocalPose(this._scale); this.setUniqueID(uniqueID); } @@ -41,6 +41,8 @@ export class PhysXSphereColliderShape extends PhysXColliderShape implements ISph * {@inheritDoc IColliderShape.setWorldScale } */ setWorldScale(scale: Vector3): void { + this._setLocalPose(this._scale); + this._maxScale = Math.max(scale.x, Math.max(scale.x, scale.y)); this._pxGeometry.radius = this._radius * this._maxScale; this._pxShape.setGeometry(this._pxGeometry); From 55ce80f450093eb81cecd3b2b466b3a17820b054 Mon Sep 17 00:00:00 2001 From: GuoLei1990 Date: Thu, 17 Feb 2022 17:19:34 +0800 Subject: [PATCH 03/21] v0.6.7 --- lerna.json | 2 +- packages/controls/package.json | 4 ++-- packages/core/package.json | 6 +++--- packages/design/package.json | 4 ++-- packages/draco/package.json | 4 ++-- packages/framebuffer-picker/package.json | 4 ++-- packages/loader/package.json | 10 +++++----- packages/math/package.json | 4 ++-- packages/oasis-engine/package.json | 10 +++++----- packages/physics-lite/package.json | 6 +++--- packages/physics-physx/package.json | 6 +++--- packages/rhi-webgl/package.json | 8 ++++---- packages/stats/package.json | 4 ++-- 13 files changed, 36 insertions(+), 36 deletions(-) diff --git a/lerna.json b/lerna.json index 4933ed73f2..763bae7337 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "npmClient": "npm", - "version": "0.6.6", + "version": "0.6.7", "bootstrap": { "hoist": true }, diff --git a/packages/controls/package.json b/packages/controls/package.json index 3d582e29c6..efdd499dc0 100644 --- a/packages/controls/package.json +++ b/packages/controls/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/controls", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "scripts": { "b:types": "tsc", @@ -15,6 +15,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.6" + "oasis-engine": "0.6.7" } } diff --git a/packages/core/package.json b/packages/core/package.json index 2e57b9dcce..2f99225e40 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/core", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/math": "0.6.6" + "@oasis-engine/math": "0.6.7" }, "devDependencies": { - "@oasis-engine/design": "0.6.6" + "@oasis-engine/design": "0.6.7" } } diff --git a/packages/design/package.json b/packages/design/package.json index 6a45186d1b..2bc5d084d3 100755 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/design", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -13,6 +13,6 @@ ], "types": "types/index.d.ts", "dependencies": { - "@oasis-engine/math": "0.6.6" + "@oasis-engine/math": "0.6.7" } } diff --git a/packages/draco/package.json b/packages/draco/package.json index 059c0c8bee..0090b77d8c 100644 --- a/packages/draco/package.json +++ b/packages/draco/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/draco", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "scripts": { "b:types": "tsc" @@ -13,6 +13,6 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.6" + "@oasis-engine/core": "0.6.7" } } diff --git a/packages/framebuffer-picker/package.json b/packages/framebuffer-picker/package.json index e5fe2aa33e..a3a3e6e55a 100755 --- a/packages/framebuffer-picker/package.json +++ b/packages/framebuffer-picker/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/framebuffer-picker", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,6 +14,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.6" + "oasis-engine": "0.6.7" } } diff --git a/packages/loader/package.json b/packages/loader/package.json index e11b75ea09..1944f80c69 100755 --- a/packages/loader/package.json +++ b/packages/loader/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/loader", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "types": "types/index.d.ts", "scripts": { @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.6", - "@oasis-engine/draco": "0.6.6", - "@oasis-engine/math": "0.6.6", - "@oasis-engine/rhi-webgl": "0.6.6" + "@oasis-engine/core": "0.6.7", + "@oasis-engine/draco": "0.6.7", + "@oasis-engine/math": "0.6.7", + "@oasis-engine/rhi-webgl": "0.6.7" } } diff --git a/packages/math/package.json b/packages/math/package.json index 317b2c213f..9ac1dc026b 100755 --- a/packages/math/package.json +++ b/packages/math/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/math", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -15,6 +15,6 @@ "types/**/*" ], "devDependencies": { - "@oasis-engine/design": "0.6.6" + "@oasis-engine/design": "0.6.7" } } diff --git a/packages/oasis-engine/package.json b/packages/oasis-engine/package.json index d5e8f6749c..0430451b8a 100755 --- a/packages/oasis-engine/package.json +++ b/packages/oasis-engine/package.json @@ -1,6 +1,6 @@ { "name": "oasis-engine", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "scripts": { "b:types": "tsc" @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.6", - "@oasis-engine/loader": "0.6.6", - "@oasis-engine/math": "0.6.6", - "@oasis-engine/rhi-webgl": "0.6.6" + "@oasis-engine/core": "0.6.7", + "@oasis-engine/loader": "0.6.7", + "@oasis-engine/math": "0.6.7", + "@oasis-engine/rhi-webgl": "0.6.7" } } diff --git a/packages/physics-lite/package.json b/packages/physics-lite/package.json index 58ef5691be..51e510c5a8 100644 --- a/packages/physics-lite/package.json +++ b/packages/physics-lite/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/physics-lite", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -15,8 +15,8 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.6.6", - "oasis-engine": "0.6.6" + "@oasis-engine/design": "0.6.7", + "oasis-engine": "0.6.7" }, "publishConfig": { "access": "public" diff --git a/packages/physics-physx/package.json b/packages/physics-physx/package.json index d6f08f35ff..16bf9504ce 100644 --- a/packages/physics-physx/package.json +++ b/packages/physics-physx/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/physics-physx", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -15,8 +15,8 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.6.6", - "oasis-engine": "0.6.6" + "@oasis-engine/design": "0.6.7", + "oasis-engine": "0.6.7" }, "publishConfig": { "access": "public" diff --git a/packages/rhi-webgl/package.json b/packages/rhi-webgl/package.json index d82564fbe7..69d21f3d80 100755 --- a/packages/rhi-webgl/package.json +++ b/packages/rhi-webgl/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/rhi-webgl", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,10 +14,10 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.6", - "@oasis-engine/math": "0.6.6" + "@oasis-engine/core": "0.6.7", + "@oasis-engine/math": "0.6.7" }, "devDependencies": { - "@oasis-engine/design": "0.6.6" + "@oasis-engine/design": "0.6.7" } } diff --git a/packages/stats/package.json b/packages/stats/package.json index e8bae0d2d9..ed2a98c9ec 100755 --- a/packages/stats/package.json +++ b/packages/stats/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/stats", - "version": "0.6.6", + "version": "0.6.7", "license": "MIT", "scripts": { "b:types": "tsc" @@ -14,6 +14,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.6" + "oasis-engine": "0.6.7" } } From a704854601f9b2a153f008296cd001c6e85fd21c Mon Sep 17 00:00:00 2001 From: Hu Song Date: Wed, 2 Mar 2022 15:15:57 +0800 Subject: [PATCH 04/21] fix: get pixel buffer use mip level should right shift (#656) Co-authored-by: gz65555 --- packages/core/src/texture/Texture2D.ts | 4 ++-- packages/core/src/texture/TextureCubeMap.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core/src/texture/Texture2D.ts b/packages/core/src/texture/Texture2D.ts index 4585145fa0..0057e5a028 100644 --- a/packages/core/src/texture/Texture2D.ts +++ b/packages/core/src/texture/Texture2D.ts @@ -143,8 +143,8 @@ export class Texture2D extends Texture { (this._platformTexture as IPlatformTexture2D).getPixelBuffer( 0, 0, - this._width, - this._height, + this._width >> xOrMipLevelOrOut, + this._height >> xOrMipLevelOrOut, xOrMipLevelOrOut, yOrMipLevel ); diff --git a/packages/core/src/texture/TextureCubeMap.ts b/packages/core/src/texture/TextureCubeMap.ts index 19cd803f73..9a5ff00a88 100644 --- a/packages/core/src/texture/TextureCubeMap.ts +++ b/packages/core/src/texture/TextureCubeMap.ts @@ -168,8 +168,8 @@ export class TextureCubeMap extends Texture { face, 0, 0, - this._width, - this._height, + this._width >> xOrMipLevelOrOut, + this._height >> xOrMipLevelOrOut, xOrMipLevelOrOut, yOrMipLevel ); From 070e621e49e806a69f6de5efc72e963c852cdac5 Mon Sep 17 00:00:00 2001 From: luzhuang <364439895@qq.com> Date: Wed, 2 Mar 2022 15:21:30 +0800 Subject: [PATCH 05/21] Update AnimatorState.ts (#657) fix: fix comment --- packages/core/src/animation/AnimatorState.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/animation/AnimatorState.ts b/packages/core/src/animation/AnimatorState.ts index 04bfd3ef6c..7dd7d20abf 100644 --- a/packages/core/src/animation/AnimatorState.ts +++ b/packages/core/src/animation/AnimatorState.ts @@ -55,7 +55,7 @@ export class AnimatorState { } /** - * The start time of the clip, the range is 0 to 1, default is 1. + * The end time of the clip, the range is 0 to 1, default is 1. */ get clipEndTime() { return this._clipEndTime; From ffe530c68919751f2b438800124c64f01d419299 Mon Sep 17 00:00:00 2001 From: Bob <768442443@qq.com> Date: Wed, 2 Mar 2022 15:28:35 +0800 Subject: [PATCH 06/21] Rename `ability` to `component`. (#608) --- packages/core/src/ComponentsDependencies.ts | 4 ++-- packages/core/src/Entity.ts | 6 +++--- packages/core/src/lighting/KHR_lights.ts | 14 +++++++------- packages/core/src/shadow/ShadowFeature.ts | 14 +++++++------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/core/src/ComponentsDependencies.ts b/packages/core/src/ComponentsDependencies.ts index 51ef0c0b35..dd24d813f4 100644 --- a/packages/core/src/ComponentsDependencies.ts +++ b/packages/core/src/ComponentsDependencies.ts @@ -70,8 +70,8 @@ export class ComponentsDependencies { private constructor() {} } -export function dependencies(...abilityClass: ComponentConstructor[]) { +export function dependencies(...componentClass: ComponentConstructor[]) { return function (target: T): void { - abilityClass.forEach((ability) => ComponentsDependencies.register(target, ability)); + componentClass.forEach((component) => ComponentsDependencies.register(target, component)); }; } diff --git a/packages/core/src/Entity.ts b/packages/core/src/Entity.ts index e43315d68d..e289f0ed66 100644 --- a/packages/core/src/Entity.ts +++ b/packages/core/src/Entity.ts @@ -343,9 +343,9 @@ export class Entity extends EngineObject { if (this._destroyed) return; super.destroy(); - const abilityArray = this._components; - for (let i = abilityArray.length - 1; i >= 0; i--) { - abilityArray[i].destroy(); + const components = this._components; + for (let i = components.length - 1; i >= 0; i--) { + components[i].destroy(); } this._components.length = 0; diff --git a/packages/core/src/lighting/KHR_lights.ts b/packages/core/src/lighting/KHR_lights.ts index 30ff8dc5fe..5b4927d085 100644 --- a/packages/core/src/lighting/KHR_lights.ts +++ b/packages/core/src/lighting/KHR_lights.ts @@ -11,25 +11,25 @@ class KHR_lights { for (let i = 0; i < lights.length; i++) { const { name, type, spot } = lights[i]; let { color, intensity } = lights[i]; - let ability; + let component; let props; color = color ? color : [1, 1, 1]; intensity = intensity === undefined ? 1 : intensity; switch (type) { case "ambient": - ability = AmbientLight; + component = AmbientLight; props = { name, color, intensity }; break; case "directional": - ability = DirectLight; + component = DirectLight; props = { name, color, intensity }; break; case "point": - ability = PointLight; + component = PointLight; props = { name, color, intensity }; break; case "spot": - ability = SpotLight; + component = SpotLight; props = { name, color, intensity, angle: spot.outerConeAngle }; break; default: @@ -37,8 +37,8 @@ class KHR_lights { break; } - if (ability) { - results[i] = { ability, props }; + if (component) { + results[i] = { component, props }; } } return results; diff --git a/packages/core/src/shadow/ShadowFeature.ts b/packages/core/src/shadow/ShadowFeature.ts index 41b919990b..96b3079559 100644 --- a/packages/core/src/shadow/ShadowFeature.ts +++ b/packages/core/src/shadow/ShadowFeature.ts @@ -90,20 +90,20 @@ export class ShadowFeature extends SceneFeature { const items = renderQueue.items; for (let i = 0, len = items.length; i < len; i++) { const item = items[i]; - const ability: Component = item.component; + const component: Component = item.component; - const receiveShadow = (ability as any).recieveShadow; - const castShadow = (ability as any).castShadow; + const receiveShadow = (component as any).recieveShadow; + const castShadow = (component as any).castShadow; if (receiveShadow === true) { - ability.entity.layer |= Layer.Layer30; //SHADOW; + component.entity.layer |= Layer.Layer30; //SHADOW; } else if (receiveShadow === false) { - ability.entity.layer &= ~Layer.Layer30; //SHADOW; + component.entity.layer &= ~Layer.Layer30; //SHADOW; } if (castShadow === true) { - ability.entity.layer |= Layer.Layer31; //SHADOW_MAP; + component.entity.layer |= Layer.Layer31; //SHADOW_MAP; } else if (castShadow === false) { - ability.entity.layer &= ~Layer.Layer31; //SHADOW_MAP; + component.entity.layer &= ~Layer.Layer31; //SHADOW_MAP; } } } From bec99aac8e50ddf00f378c413057a46420ac9a96 Mon Sep 17 00:00:00 2001 From: zhuxudong Date: Wed, 2 Mar 2022 16:08:26 +0800 Subject: [PATCH 07/21] fix: resize max uniform vector count (#660) * fix: resize max uniform vector count Co-authored-by: shensi.zxd --- packages/core/src/mesh/SkinnedMeshRenderer.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/core/src/mesh/SkinnedMeshRenderer.ts b/packages/core/src/mesh/SkinnedMeshRenderer.ts index 225e583b31..1469e4ff06 100644 --- a/packages/core/src/mesh/SkinnedMeshRenderer.ts +++ b/packages/core/src/mesh/SkinnedMeshRenderer.ts @@ -123,23 +123,24 @@ export class SkinnedMeshRenderer extends MeshRenderer { const rhi = this.entity.engine._hardwareRenderer; if (!rhi) return; const maxAttribUniformVec4 = rhi.renderStates.getParameter(rhi.gl.MAX_VERTEX_UNIFORM_VECTORS); - const maxJoints = Math.floor((maxAttribUniformVec4 - 20) / 4); + const maxJoints = Math.floor((maxAttribUniformVec4 - 30) / 4); const shaderData = this.shaderData; - const jointCount = this.jointNodes?.length; + const jointCount = jointNodes.length; + if (jointCount) { shaderData.enableMacro("O3_HAS_SKIN"); shaderData.setInt(SkinnedMeshRenderer._jointCountProperty, jointCount); - if (joints.length > maxJoints) { + if (jointCount > maxJoints) { if (rhi.canIUseMoreJoints) { this._useJointTexture = true; } else { Logger.error( - `component's joints count(${joints}) greater than device's MAX_VERTEX_UNIFORM_VECTORS number ${maxAttribUniformVec4}, and don't support jointTexture in this device. suggest joint count less than ${maxJoints}.`, + `component's joints count(${jointCount}) greater than device's MAX_VERTEX_UNIFORM_VECTORS number ${maxAttribUniformVec4}, and don't support jointTexture in this device. suggest joint count less than ${maxJoints}.`, this ); } } else { - const maxJoints = Math.max(SkinnedMeshRenderer._maxJoints, joints.length); + const maxJoints = Math.max(SkinnedMeshRenderer._maxJoints, jointCount); SkinnedMeshRenderer._maxJoints = maxJoints; shaderData.disableMacro("O3_USE_JOINT_TEXTURE"); shaderData.enableMacro("O3_JOINTS_NUM", maxJoints.toString()); From 339a4a533bf6ab7014c308b22419034ec33fb6c3 Mon Sep 17 00:00:00 2001 From: singlecoder Date: Thu, 3 Mar 2022 15:07:30 +0800 Subject: [PATCH 08/21] =?UTF-8?q?fix(2d):=20can=20not=20update=20world=20p?= =?UTF-8?q?osition=20for=20sprite=20renderer=20when=20call=20=E2=80=A6=20(?= =?UTF-8?q?#635)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(2d): can not update wrold position for sprite renderer when call bounds in the same frame --- packages/core/src/2d/sprite/Sprite.ts | 69 +++++++++---------- packages/core/src/2d/sprite/SpriteMask.ts | 28 +++++--- packages/core/src/2d/sprite/SpriteRenderer.ts | 32 ++++++--- 3 files changed, 76 insertions(+), 53 deletions(-) diff --git a/packages/core/src/2d/sprite/Sprite.ts b/packages/core/src/2d/sprite/Sprite.ts index 1454680535..cd2600de9e 100644 --- a/packages/core/src/2d/sprite/Sprite.ts +++ b/packages/core/src/2d/sprite/Sprite.ts @@ -2,6 +2,8 @@ import { BoundingBox, MathUtil, Rect, Vector2, Vector4 } from "@oasis-engine/mat import { RefObject } from "../../asset/RefObject"; import { Engine } from "../../Engine"; import { Texture2D } from "../../texture/Texture2D"; +import { UpdateFlag } from "../../UpdateFlag"; +import { UpdateFlagManager } from "../../UpdateFlagManager"; /** * 2D sprite. @@ -31,6 +33,7 @@ export class Sprite extends RefObject { private _atlasRegion: Rect = new Rect(0, 0, 1, 1); private _atlasRegionOffset: Vector4 = new Vector4(0, 0, 0, 0); private _dirtyFlag: DirtyFlag = DirtyFlag.all; + private _updateFlagManager: UpdateFlagManager = new UpdateFlagManager(); /** * The reference to the used texture. @@ -146,26 +149,6 @@ export class Sprite extends RefObject { } } - /** - * Clone. - * @returns Cloned sprite - */ - clone(): Sprite { - const cloneSprite = new Sprite( - this._engine, - this._texture, - this._region, - this._pivot, - this._pixelsPerUnit, - this.name - ); - cloneSprite._assetID = this._assetID; - cloneSprite._atlasRotated = this._atlasRotated; - this._atlasRegion.cloneTo(cloneSprite._atlasRegion); - this._atlasRegionOffset.cloneTo(cloneSprite._atlasRegionOffset); - return cloneSprite; - } - /** * Constructor a Sprite. * @param engine - Engine to which the sprite belongs @@ -195,6 +178,33 @@ export class Sprite extends RefObject { this._triangles = Sprite._rectangleTriangles; } + /** + * Clone. + * @returns Cloned sprite + */ + clone(): Sprite { + const cloneSprite = new Sprite( + this._engine, + this._texture, + this._region, + this._pivot, + this._pixelsPerUnit, + this.name + ); + cloneSprite._assetID = this._assetID; + cloneSprite._atlasRotated = this._atlasRotated; + this._atlasRegion.cloneTo(cloneSprite._atlasRegion); + this._atlasRegionOffset.cloneTo(cloneSprite._atlasRegionOffset); + return cloneSprite; + } + + /** + * @internal + */ + _registerUpdateFlag(): UpdateFlag { + return this._updateFlagManager.register(); + } + /** * @override */ @@ -271,9 +281,9 @@ export class Sprite extends RefObject { } /** - * Update mesh. + * @internal */ - private _updateMesh(): void { + _updateMesh(): void { if (this._isContainDirtyFlag(DirtyFlag.positions)) { this._updatePositionsAndBounds(); } @@ -343,20 +353,8 @@ export class Sprite extends RefObject { uv[3].setValue(left, bottom); } } - } - /** - * @internal - * Update mesh data of the sprite. - * @returns True if the data is refreshed, false otherwise. - */ - _updateMeshData(): boolean { - if (this._isContainDirtyFlag(DirtyFlag.all)) { - this._updateMesh(); - this._setDirtyFlagFalse(DirtyFlag.all); - return true; - } - return false; + this._setDirtyFlagFalse(DirtyFlag.all); } private _isContainDirtyFlag(type: number): boolean { @@ -365,6 +363,7 @@ export class Sprite extends RefObject { private _setDirtyFlagTrue(type: number): void { this._dirtyFlag |= type; + this._updateFlagManager.distribute(); } private _setDirtyFlagFalse(type: number): void { diff --git a/packages/core/src/2d/sprite/SpriteMask.ts b/packages/core/src/2d/sprite/SpriteMask.ts index c7646265e0..796fa65b34 100644 --- a/packages/core/src/2d/sprite/SpriteMask.ts +++ b/packages/core/src/2d/sprite/SpriteMask.ts @@ -1,6 +1,7 @@ import { Vector3 } from "@oasis-engine/math"; import { Camera } from "../../Camera"; import { assignmentClone, deepClone, ignoreClone } from "../../clone/CloneManager"; +import { ICustomClone } from "../../clone/ComponentCloner"; import { Entity } from "../../Entity"; import { Renderer } from "../../Renderer"; import { SpriteMaskElement } from "../../RenderPipeline/SpriteMaskElement"; @@ -13,7 +14,7 @@ import { Sprite } from "./Sprite"; /** * A component for masking Sprites. */ -export class SpriteMask extends Renderer { +export class SpriteMask extends Renderer implements ICustomClone { /** @internal */ static _textureProperty: ShaderProperty = Shader.getPropertyByName("u_maskTexture"); /** @internal */ @@ -27,13 +28,13 @@ export class SpriteMask extends Renderer { @deepClone private _positions: Vector3[] = [new Vector3(), new Vector3(), new Vector3(), new Vector3()]; @ignoreClone - private _isSpriteDirty: boolean = true; - @ignoreClone private _worldMatrixDirtyFlag: UpdateFlag; - @assignmentClone + @ignoreClone private _sprite: Sprite = null; @assignmentClone private _alphaCutoff: number = 0.5; + @ignoreClone + private _spriteDirty: UpdateFlag; /** The mask layers the sprite mask influence to. */ @assignmentClone @@ -48,8 +49,11 @@ export class SpriteMask extends Renderer { set sprite(value: Sprite) { if (this._sprite !== value) { + this._spriteDirty && this._spriteDirty.destroy(); this._sprite = value; - this._isSpriteDirty = true; + if (value) { + this._spriteDirty = value._registerUpdateFlag(); + } } } @@ -83,6 +87,7 @@ export class SpriteMask extends Renderer { */ _onDestroy(): void { this._worldMatrixDirtyFlag.destroy(); + this._spriteDirty && this._spriteDirty.destroy(); super._onDestroy(); } @@ -104,9 +109,9 @@ export class SpriteMask extends Renderer { const transform = this.entity.transform; // Update sprite data. - const localDirty = sprite._updateMeshData(); + sprite._updateMesh(); - if (this._worldMatrixDirtyFlag.flag || localDirty || this._isSpriteDirty) { + if (this._worldMatrixDirtyFlag.flag || this._spriteDirty.flag) { const localPositions = sprite._positions; const localVertexPos = SpriteMask._tempVec3; const worldMatrix = transform.worldMatrix; @@ -117,7 +122,7 @@ export class SpriteMask extends Renderer { Vector3.transformToVec3(localVertexPos, worldMatrix, positions[i]); } - this._isSpriteDirty = false; + this._spriteDirty.flag = false; this._worldMatrixDirtyFlag.flag = false; } @@ -130,4 +135,11 @@ export class SpriteMask extends Renderer { camera._renderPipeline._allSpriteMasks.add(this); this._maskElement = maskElement; } + + /** + * @internal + */ + _cloneTo(target: SpriteMask): void { + target.sprite = this._sprite; + } } diff --git a/packages/core/src/2d/sprite/SpriteRenderer.ts b/packages/core/src/2d/sprite/SpriteRenderer.ts index 045c1672f1..4d94bd32cd 100644 --- a/packages/core/src/2d/sprite/SpriteRenderer.ts +++ b/packages/core/src/2d/sprite/SpriteRenderer.ts @@ -1,6 +1,7 @@ import { BoundingBox, Color, Vector3 } from "@oasis-engine/math"; import { Camera } from "../../Camera"; import { assignmentClone, deepClone, ignoreClone } from "../../clone/CloneManager"; +import { ICustomClone } from "../../clone/ComponentCloner"; import { Entity } from "../../Entity"; import { Renderer } from "../../Renderer"; import { CompareFunction } from "../../shader/enums/CompareFunction"; @@ -14,7 +15,7 @@ import { Sprite } from "./Sprite"; /** * Renders a Sprite for 2D graphics. */ -export class SpriteRenderer extends Renderer { +export class SpriteRenderer extends Renderer implements ICustomClone { private static _textureProperty: ShaderProperty = Shader.getPropertyByName("u_spriteTexture"); private static _tempVec3: Vector3 = new Vector3(); @@ -27,7 +28,7 @@ export class SpriteRenderer extends Renderer { @deepClone private _positions: Vector3[] = [new Vector3(), new Vector3(), new Vector3(), new Vector3()]; - @assignmentClone + @ignoreClone private _sprite: Sprite = null; @deepClone private _color: Color = new Color(1, 1, 1, 1); @@ -40,9 +41,11 @@ export class SpriteRenderer extends Renderer { @assignmentClone private _cacheFlipY: boolean = false; @ignoreClone - private _dirtyFlag: number = DirtyFlag.All; + private _dirtyFlag: number = 0; @ignoreClone private _isWorldMatrixDirty: UpdateFlag; + @ignoreClone + private _spriteDirty: UpdateFlag; @assignmentClone private _maskInteraction: SpriteMaskInteraction = SpriteMaskInteraction.None; @assignmentClone @@ -57,8 +60,11 @@ export class SpriteRenderer extends Renderer { set sprite(value: Sprite | null) { if (this._sprite !== value) { + this._spriteDirty && this._spriteDirty.destroy(); this._sprite = value; - this._setDirtyFlagTrue(DirtyFlag.Sprite); + if (value) { + this._spriteDirty = value._registerUpdateFlag(); + } } } @@ -154,9 +160,9 @@ export class SpriteRenderer extends Renderer { const { transform } = this.entity; // Update sprite data. - const localDirty = sprite._updateMeshData(); + sprite._updateMesh(); - if (this._isWorldMatrixDirty.flag || localDirty || this._isContainDirtyFlag(DirtyFlag.Sprite)) { + if (this._isWorldMatrixDirty.flag || this._spriteDirty.flag) { const localPositions = sprite._positions; const localVertexPos = SpriteRenderer._tempVec3; const worldMatrix = transform.worldMatrix; @@ -169,8 +175,8 @@ export class SpriteRenderer extends Renderer { } this._setDirtyFlagFalse(DirtyFlag.Flip); - this._setDirtyFlagFalse(DirtyFlag.Sprite); this._isWorldMatrixDirty.flag = false; + this._spriteDirty.flag = false; this._cacheFlipX = flipX; this._cacheFlipY = flipY; } else if (this._isContainDirtyFlag(DirtyFlag.Flip)) { @@ -217,6 +223,7 @@ export class SpriteRenderer extends Renderer { */ _onDestroy(): void { this._isWorldMatrixDirty.destroy(); + this._spriteDirty && this._spriteDirty.destroy(); super._onDestroy(); } @@ -232,6 +239,13 @@ export class SpriteRenderer extends Renderer { this._dirtyFlag &= ~type; } + /** + * @internal + */ + _cloneTo(target: SpriteRenderer): void { + target.sprite = this._sprite; + } + /** * @override */ @@ -279,7 +293,5 @@ export class SpriteRenderer extends Renderer { enum DirtyFlag { Flip = 0x1, - Sprite = 0x2, - All = 0x3, - MaskInteraction = 0x4 + MaskInteraction = 0x2 } From 5140986fca6cad110f55860605902b45fd30b3b1 Mon Sep 17 00:00:00 2001 From: Cleam Lee Date: Thu, 3 Mar 2022 15:57:56 +0800 Subject: [PATCH 09/21] refactor: remove Promise.finally (#671) * refactor: remove Promise.finally Co-authored-by: lizhigao --- packages/core/src/asset/ResourceManager.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/core/src/asset/ResourceManager.ts b/packages/core/src/asset/ResourceManager.ts index be051e4a3e..473edba708 100644 --- a/packages/core/src/asset/ResourceManager.ts +++ b/packages/core/src/asset/ResourceManager.ts @@ -213,9 +213,10 @@ export class ResourceManager { promise .then((res: EngineObject) => { if (loader.useCache) this._addAsset(url, res); + delete this._loadingPromises[url]; }) - .catch((err: Error) => Promise.reject(err)) - .finally(() => { + .catch((err: Error) => { + Promise.reject(err) delete this._loadingPromises[url]; }); return promise; From 5de3857320dcd3e356da4bfecf0fe3f24f69172b Mon Sep 17 00:00:00 2001 From: zhuxudong Date: Fri, 4 Mar 2022 11:13:13 +0800 Subject: [PATCH 10/21] fix: use linear color space in gltf (#674) Co-authored-by: shensi.zxd --- packages/core/src/shaderlib/pbr/pbr_helper.glsl | 3 +++ .../KHR_materials_pbrSpecularGlossiness.ts | 13 +++++++++++-- packages/loader/src/gltf/parser/MaterialParser.ts | 13 +++++++++++-- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/core/src/shaderlib/pbr/pbr_helper.glsl b/packages/core/src/shaderlib/pbr/pbr_helper.glsl index 5d626fbc8f..d04bcd745e 100644 --- a/packages/core/src/shaderlib/pbr/pbr_helper.glsl +++ b/packages/core/src/shaderlib/pbr/pbr_helper.glsl @@ -51,6 +51,9 @@ PhysicalMaterial getPhysicalMaterial( #ifdef HAS_SPECULARGLOSSINESSMAP vec4 specularGlossinessColor = texture2D(u_specularGlossinessSampler, v_uv ); + #ifndef OASIS_COLORSPACE_GAMMA + specularGlossinessColor = gammaToLinear(specularGlossinessColor); + #endif specularColor *= specularGlossinessColor.rgb; glossiness *= specularGlossinessColor.a; #endif diff --git a/packages/loader/src/gltf/extensions/KHR_materials_pbrSpecularGlossiness.ts b/packages/loader/src/gltf/extensions/KHR_materials_pbrSpecularGlossiness.ts index fd78e27579..6faeef7983 100644 --- a/packages/loader/src/gltf/extensions/KHR_materials_pbrSpecularGlossiness.ts +++ b/packages/loader/src/gltf/extensions/KHR_materials_pbrSpecularGlossiness.ts @@ -14,7 +14,12 @@ class KHR_materials_pbrSpecularGlossiness extends ExtensionParser { const { diffuseFactor, diffuseTexture, specularFactor, glossinessFactor, specularGlossinessTexture } = schema; if (diffuseFactor) { - material.baseColor = new Color(...diffuseFactor); + material.baseColor = new Color( + Color.linearToGammaSpace(diffuseFactor[0]), + Color.linearToGammaSpace(diffuseFactor[1]), + Color.linearToGammaSpace(diffuseFactor[2]), + diffuseFactor[3] + ); } if (diffuseTexture) { @@ -23,7 +28,11 @@ class KHR_materials_pbrSpecularGlossiness extends ExtensionParser { } if (specularFactor) { - material.specularColor = new Color(...specularFactor); + material.specularColor = new Color( + Color.linearToGammaSpace(specularFactor[0]), + Color.linearToGammaSpace(specularFactor[1]), + Color.linearToGammaSpace(specularFactor[2]) + ); } if (glossinessFactor !== undefined) { diff --git a/packages/loader/src/gltf/parser/MaterialParser.ts b/packages/loader/src/gltf/parser/MaterialParser.ts index 6ab5d02737..28a6ad074e 100644 --- a/packages/loader/src/gltf/parser/MaterialParser.ts +++ b/packages/loader/src/gltf/parser/MaterialParser.ts @@ -58,7 +58,12 @@ export class MaterialParser extends Parser { pbrMetallicRoughness; if (baseColorFactor) { - material.baseColor = new Color(...baseColorFactor); + material.baseColor = new Color( + Color.linearToGammaSpace(baseColorFactor[0]), + Color.linearToGammaSpace(baseColorFactor[1]), + Color.linearToGammaSpace(baseColorFactor[2]), + baseColorFactor[3] + ); } if (baseColorTexture) { material.baseTexture = textures[baseColorTexture.index]; @@ -85,7 +90,11 @@ export class MaterialParser extends Parser { } if (emissiveFactor) { - m.emissiveColor = new Color(...emissiveFactor); + m.emissiveColor = new Color( + Color.linearToGammaSpace(emissiveFactor[0]), + Color.linearToGammaSpace(emissiveFactor[1]), + Color.linearToGammaSpace(emissiveFactor[2]) + ); } if (normalTexture) { From 16baed70efd847356b9a11694567add6471f60d3 Mon Sep 17 00:00:00 2001 From: Hu Song Date: Fri, 4 Mar 2022 11:40:25 +0800 Subject: [PATCH 11/21] Fix Background Draw (#675) Co-authored-by: gz65555 --- .../core/src/RenderPipeline/BasicRenderPipeline.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/core/src/RenderPipeline/BasicRenderPipeline.ts b/packages/core/src/RenderPipeline/BasicRenderPipeline.ts index 327ec60758..5a687087b7 100644 --- a/packages/core/src/RenderPipeline/BasicRenderPipeline.ts +++ b/packages/core/src/RenderPipeline/BasicRenderPipeline.ts @@ -180,10 +180,12 @@ export class BasicRenderPipeline { } else { this._opaqueQueue.render(camera, pass.replaceMaterial, pass.mask); this._alphaTestQueue.render(camera, pass.replaceMaterial, pass.mask); - if (background.mode === BackgroundMode.Sky) { - this._drawSky(engine, camera, background.sky); - } else if (background.mode === BackgroundMode.Texture && background.texture) { - this._drawBackgroundTexture(engine, background); + if (camera.clearFlags === CameraClearFlags.DepthColor) { + if (background.mode === BackgroundMode.Sky) { + this._drawSky(engine, camera, background.sky); + } else if (background.mode === BackgroundMode.Texture && background.texture) { + this._drawBackgroundTexture(engine, background); + } } this._transparentQueue.render(camera, pass.replaceMaterial, pass.mask); } From 1eff3c208503fb84b3e40d27da7e2d0df0c42aab Mon Sep 17 00:00:00 2001 From: zhuxudong Date: Thu, 10 Mar 2022 11:32:37 +0800 Subject: [PATCH 12/21] fix: break texcoor to avoid `_vertexSlotChanged` error (#684) Co-authored-by: shensi.zxd --- packages/loader/src/gltf/parser/MeshParser.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/loader/src/gltf/parser/MeshParser.ts b/packages/loader/src/gltf/parser/MeshParser.ts index 84d64fb709..0a6cc77425 100644 --- a/packages/loader/src/gltf/parser/MeshParser.ts +++ b/packages/loader/src/gltf/parser/MeshParser.ts @@ -164,15 +164,19 @@ export class MeshParser extends Parser { case "TEXCOORD_3": const texturecoords3 = GLTFUtil.floatBufferToVector2Array(bufferData); mesh.setUVs(texturecoords3, 3); + break; case "TEXCOORD_4": const texturecoords4 = GLTFUtil.floatBufferToVector2Array(bufferData); mesh.setUVs(texturecoords4, 4); + break; case "TEXCOORD_5": const texturecoords5 = GLTFUtil.floatBufferToVector2Array(bufferData); mesh.setUVs(texturecoords5, 5); + break; case "TEXCOORD_6": const texturecoords6 = GLTFUtil.floatBufferToVector2Array(bufferData); mesh.setUVs(texturecoords6, 6); + break; case "TEXCOORD_7": const texturecoords7 = GLTFUtil.floatBufferToVector2Array(bufferData); mesh.setUVs(texturecoords7, 7); From 89ad3eb238e9890e9098d1bb4367c8a86db0fabb Mon Sep 17 00:00:00 2001 From: GuoLei1990 Date: Mon, 14 Mar 2022 17:52:30 +0800 Subject: [PATCH 13/21] v0.6.8 --- lerna.json | 2 +- packages/controls/package.json | 4 ++-- packages/core/package.json | 6 +++--- packages/design/package.json | 4 ++-- packages/draco/package.json | 4 ++-- packages/framebuffer-picker/package.json | 4 ++-- packages/loader/package.json | 10 +++++----- packages/math/package.json | 4 ++-- packages/oasis-engine/package.json | 10 +++++----- packages/physics-lite/package.json | 6 +++--- packages/physics-physx/package.json | 6 +++--- packages/rhi-webgl/package.json | 8 ++++---- packages/stats/package.json | 4 ++-- 13 files changed, 36 insertions(+), 36 deletions(-) diff --git a/lerna.json b/lerna.json index 763bae7337..fb6e85d3c7 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "npmClient": "npm", - "version": "0.6.7", + "version": "0.6.8", "bootstrap": { "hoist": true }, diff --git a/packages/controls/package.json b/packages/controls/package.json index efdd499dc0..57e35304e1 100644 --- a/packages/controls/package.json +++ b/packages/controls/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/controls", - "version": "0.6.7", + "version": "0.6.8", "license": "MIT", "scripts": { "b:types": "tsc", @@ -15,6 +15,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.7" + "oasis-engine": "0.6.8" } } diff --git a/packages/core/package.json b/packages/core/package.json index 2f99225e40..d67f8052f4 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/core", - "version": "0.6.7", + "version": "0.6.8", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/math": "0.6.7" + "@oasis-engine/math": "0.6.8" }, "devDependencies": { - "@oasis-engine/design": "0.6.7" + "@oasis-engine/design": "0.6.8" } } diff --git a/packages/design/package.json b/packages/design/package.json index 2bc5d084d3..e92b79b700 100755 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/design", - "version": "0.6.7", + "version": "0.6.8", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -13,6 +13,6 @@ ], "types": "types/index.d.ts", "dependencies": { - "@oasis-engine/math": "0.6.7" + "@oasis-engine/math": "0.6.8" } } diff --git a/packages/draco/package.json b/packages/draco/package.json index 0090b77d8c..325972e5bf 100644 --- a/packages/draco/package.json +++ b/packages/draco/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/draco", - "version": "0.6.7", + "version": "0.6.8", "license": "MIT", "scripts": { "b:types": "tsc" @@ -13,6 +13,6 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.7" + "@oasis-engine/core": "0.6.8" } } diff --git a/packages/framebuffer-picker/package.json b/packages/framebuffer-picker/package.json index a3a3e6e55a..08d38de5c2 100755 --- a/packages/framebuffer-picker/package.json +++ b/packages/framebuffer-picker/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/framebuffer-picker", - "version": "0.6.7", + "version": "0.6.8", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,6 +14,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.7" + "oasis-engine": "0.6.8" } } diff --git a/packages/loader/package.json b/packages/loader/package.json index 1944f80c69..ca3085f01d 100755 --- a/packages/loader/package.json +++ b/packages/loader/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/loader", - "version": "0.6.7", + "version": "0.6.8", "license": "MIT", "types": "types/index.d.ts", "scripts": { @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.7", - "@oasis-engine/draco": "0.6.7", - "@oasis-engine/math": "0.6.7", - "@oasis-engine/rhi-webgl": "0.6.7" + "@oasis-engine/core": "0.6.8", + "@oasis-engine/draco": "0.6.8", + "@oasis-engine/math": "0.6.8", + "@oasis-engine/rhi-webgl": "0.6.8" } } diff --git a/packages/math/package.json b/packages/math/package.json index 9ac1dc026b..1848400bf9 100755 --- a/packages/math/package.json +++ b/packages/math/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/math", - "version": "0.6.7", + "version": "0.6.8", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -15,6 +15,6 @@ "types/**/*" ], "devDependencies": { - "@oasis-engine/design": "0.6.7" + "@oasis-engine/design": "0.6.8" } } diff --git a/packages/oasis-engine/package.json b/packages/oasis-engine/package.json index 0430451b8a..449cdd9d15 100755 --- a/packages/oasis-engine/package.json +++ b/packages/oasis-engine/package.json @@ -1,6 +1,6 @@ { "name": "oasis-engine", - "version": "0.6.7", + "version": "0.6.8", "license": "MIT", "scripts": { "b:types": "tsc" @@ -14,9 +14,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.7", - "@oasis-engine/loader": "0.6.7", - "@oasis-engine/math": "0.6.7", - "@oasis-engine/rhi-webgl": "0.6.7" + "@oasis-engine/core": "0.6.8", + "@oasis-engine/loader": "0.6.8", + "@oasis-engine/math": "0.6.8", + "@oasis-engine/rhi-webgl": "0.6.8" } } diff --git a/packages/physics-lite/package.json b/packages/physics-lite/package.json index 51e510c5a8..5696d4c8d1 100644 --- a/packages/physics-lite/package.json +++ b/packages/physics-lite/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/physics-lite", - "version": "0.6.7", + "version": "0.6.8", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -15,8 +15,8 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.6.7", - "oasis-engine": "0.6.7" + "@oasis-engine/design": "0.6.8", + "oasis-engine": "0.6.8" }, "publishConfig": { "access": "public" diff --git a/packages/physics-physx/package.json b/packages/physics-physx/package.json index 16bf9504ce..101047fd1a 100644 --- a/packages/physics-physx/package.json +++ b/packages/physics-physx/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/physics-physx", - "version": "0.6.7", + "version": "0.6.8", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -15,8 +15,8 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/design": "0.6.7", - "oasis-engine": "0.6.7" + "@oasis-engine/design": "0.6.8", + "oasis-engine": "0.6.8" }, "publishConfig": { "access": "public" diff --git a/packages/rhi-webgl/package.json b/packages/rhi-webgl/package.json index 69d21f3d80..5932f0f763 100755 --- a/packages/rhi-webgl/package.json +++ b/packages/rhi-webgl/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/rhi-webgl", - "version": "0.6.7", + "version": "0.6.8", "license": "MIT", "main": "dist/main.js", "module": "dist/module.js", @@ -14,10 +14,10 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.6.7", - "@oasis-engine/math": "0.6.7" + "@oasis-engine/core": "0.6.8", + "@oasis-engine/math": "0.6.8" }, "devDependencies": { - "@oasis-engine/design": "0.6.7" + "@oasis-engine/design": "0.6.8" } } diff --git a/packages/stats/package.json b/packages/stats/package.json index ed2a98c9ec..307142b064 100755 --- a/packages/stats/package.json +++ b/packages/stats/package.json @@ -1,6 +1,6 @@ { "name": "@oasis-engine/stats", - "version": "0.6.7", + "version": "0.6.8", "license": "MIT", "scripts": { "b:types": "tsc" @@ -14,6 +14,6 @@ "types/**/*" ], "dependencies": { - "oasis-engine": "0.6.7" + "oasis-engine": "0.6.8" } } From b940b04cf64492a2dcf7813a8468e12507a57dc7 Mon Sep 17 00:00:00 2001 From: ChenMo Date: Mon, 21 Mar 2022 11:41:35 +0800 Subject: [PATCH 14/21] fix: scene romove entity bug (#698) --- packages/core/src/Scene.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/Scene.ts b/packages/core/src/Scene.ts index 2fc7e09b58..eebcd0905c 100644 --- a/packages/core/src/Scene.ts +++ b/packages/core/src/Scene.ts @@ -137,7 +137,7 @@ export class Scene extends EngineObject { removeRootEntity(entity: Entity): void { if (entity._isRoot && entity._scene == this) { this._removeEntity(entity); - this._isActiveInEngine && entity._processInActive(); + this._isActiveInEngine && entity._isActiveInHierarchy && entity._processInActive(); Entity._traverseSetOwnerScene(entity, null); } } From 89f75170eae28e1cea7095fe0a522ec3d6329ded Mon Sep 17 00:00:00 2001 From: zhuxudong Date: Tue, 22 Mar 2022 11:29:04 +0800 Subject: [PATCH 15/21] fix: position is deleted from entity (#699) Co-authored-by: shensi.zxd --- packages/controls/src/OrbitControl.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/controls/src/OrbitControl.ts b/packages/controls/src/OrbitControl.ts index e68e0fe2aa..b3ede278c4 100644 --- a/packages/controls/src/OrbitControl.ts +++ b/packages/controls/src/OrbitControl.ts @@ -400,7 +400,7 @@ export class OrbitControl extends Script { */ pan(deltaX: number, deltaY: number) { // perspective only - const position: Vector3 = this.camera.position; + const position: Vector3 = this.camera.transform.position; position.cloneTo(this._vPan); this._vPan.subtract(this.target); let targetDistance = this._vPan.length(); From f077f1b667928231d64402b5cb72cb8860a8ed9a Mon Sep 17 00:00:00 2001 From: zhuxudong Date: Sat, 2 Apr 2022 17:40:59 +0800 Subject: [PATCH 16/21] fix: make free control not depend on scene (#724) Co-authored-by: shensi.zxd --- packages/controls/src/FreeControl.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/controls/src/FreeControl.ts b/packages/controls/src/FreeControl.ts index 52d42353e3..d31bea0868 100644 --- a/packages/controls/src/FreeControl.ts +++ b/packages/controls/src/FreeControl.ts @@ -72,7 +72,7 @@ export class FreeControl extends Script { this.camera = entity; // @ts-ignore // @todo In the future, the dependence on html elements will be removed and realized through the input of the packaging engine. - this.mainElement = this.scene.engine.canvas._webCanvas; + this.mainElement = this.engine.canvas._webCanvas; this.domElement = document; this.movementSpeed = 1.0; From c2e238ebf797c2889815be13d6a84efbed2391fb Mon Sep 17 00:00:00 2001 From: GuoLei1990 Date: Wed, 20 Apr 2022 15:42:55 +0800 Subject: [PATCH 17/21] refactor: opt code --- packages/core/src/mesh/ModelMesh.ts | 8 ++------ packages/core/tests/ModelMesh.test.ts | 6 +++--- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/core/src/mesh/ModelMesh.ts b/packages/core/src/mesh/ModelMesh.ts index 920fefc87b..787a9b86f8 100644 --- a/packages/core/src/mesh/ModelMesh.ts +++ b/packages/core/src/mesh/ModelMesh.ts @@ -29,7 +29,7 @@ export class ModelMesh extends Mesh { private _vertexChangeFlag: number = 0; private _indicesChangeFlag: boolean = false; private _elementCount: number = 0; - private _lastUploadVertexCount: number = 0; + private _lastUploadVertexCount: number = -1; private _positions: Vector3[] = []; private _normals: Vector3[] | null = null; @@ -97,13 +97,9 @@ export class ModelMesh extends Mesh { throw "Not allowed to access data while accessible is false."; } - const count = positions.length; this._positions = positions; + this._vertexCount = positions.length; this._vertexChangeFlag |= ValueChanged.Position; - - if (this._vertexCount !== count) { - this._vertexCount = count; - } } /** diff --git a/packages/core/tests/ModelMesh.test.ts b/packages/core/tests/ModelMesh.test.ts index 7b11ca8ab4..c40bd28210 100644 --- a/packages/core/tests/ModelMesh.test.ts +++ b/packages/core/tests/ModelMesh.test.ts @@ -168,6 +168,9 @@ describe("ModelMesh Test", function () { expect(frame0.deltaTangents).toBe(deltaTangents); modelMesh.setPositions(positionsX); + modelMesh.clearBlendShapes(); + expect(modelMesh.blendShapes.length).toBe(0); + expect(modelMesh.vertexCount).toBe(4); // @ts-ignore const vertices = modelMesh._verticesFloat32; @@ -184,9 +187,6 @@ describe("ModelMesh Test", function () { modelMesh.setIndices(null); modelMesh.setPositions(positions); - - modelMesh.clearBlendShapes(); - expect(modelMesh.blendShapes.length).toBe(0); }); it("upload data with no longer used", () => { modelMesh.uploadData(true); From e528ee3d785f3d08258c7ca114086c75376c7c67 Mon Sep 17 00:00:00 2001 From: susiwen8 Date: Fri, 22 Apr 2022 12:13:52 +0800 Subject: [PATCH 18/21] fix: constrain min shininess to `1e-4` (#749) * fix: constrain min shininess to `1e-4` --- packages/core/src/material/BlinnPhongMaterial.ts | 2 +- packages/core/tests/material/BlinnPhongMaterial.test.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/src/material/BlinnPhongMaterial.ts b/packages/core/src/material/BlinnPhongMaterial.ts index f859f0de49..80c423cf92 100644 --- a/packages/core/src/material/BlinnPhongMaterial.ts +++ b/packages/core/src/material/BlinnPhongMaterial.ts @@ -145,7 +145,7 @@ export class BlinnPhongMaterial extends BaseMaterial { } set shininess(value: number) { - this.shaderData.setFloat(BlinnPhongMaterial._shininessProp, value); + this.shaderData.setFloat(BlinnPhongMaterial._shininessProp, Math.max(value, 1e-4)); } /** diff --git a/packages/core/tests/material/BlinnPhongMaterial.test.ts b/packages/core/tests/material/BlinnPhongMaterial.test.ts index 01fce008d7..767f6adcd3 100644 --- a/packages/core/tests/material/BlinnPhongMaterial.test.ts +++ b/packages/core/tests/material/BlinnPhongMaterial.test.ts @@ -49,11 +49,13 @@ describe("BlinnPhongMaterial", () => { material.specularTexture = null; material.emissiveTexture = null; material.normalTexture = null; + material.shininess = 0; expect(material.baseTexture).toBeNull(); expect(material.specularTexture).toBeNull(); expect(material.emissiveTexture).toBeNull(); expect(material.normalTexture).toBeNull(); + expect(material.shininess).toBe(1e-4); }); it("clone", () => { From 470117a619eb4fd3410789a98965983605b5298f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=B9=85=E5=8F=94?= <768442443@qq.com> Date: Fri, 22 Apr 2022 12:58:21 +0800 Subject: [PATCH 19/21] Add a ts-ignore (#679) * types: add ts-ignore to XMLHttpRequestBodyInit because typedoc does not know it --- packages/core/src/asset/request.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/src/asset/request.ts b/packages/core/src/asset/request.ts index fd6bae53e0..f294055750 100644 --- a/packages/core/src/asset/request.ts +++ b/packages/core/src/asset/request.ts @@ -122,6 +122,7 @@ function requestRes(url: string, config: RequestConfig): AssetPromise { xhr.setRequestHeader(name, headers[name]); }); } + // @ts-ignore xhr.send(config.body as XMLHttpRequestBodyInit); }); } From a904314ed4e442268cfe38c433d39cca03a64efb Mon Sep 17 00:00:00 2001 From: GuoLei1990 Date: Fri, 22 Apr 2022 14:41:06 +0800 Subject: [PATCH 20/21] refactor: fix code --- packages/physics-physx/src/shape/PhysXBoxColliderShape.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts b/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts index 678e21d5da..8e9dd22d2b 100644 --- a/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts @@ -1,8 +1,8 @@ import { IBoxColliderShape } from "@oasis-engine/design"; import { Vector3 } from "oasis-engine"; import { PhysXPhysics } from "../PhysXPhysics"; -import { PhysXColliderShape } from "./PhysXColliderShape"; import { PhysXPhysicsMaterial } from "../PhysXPhysicsMaterial"; +import { PhysXColliderShape } from "./PhysXColliderShape"; /** * Box collider shape in PhysX. @@ -28,7 +28,7 @@ export class PhysXBoxColliderShape extends PhysXColliderShape implements IBoxCol this._halfSize.z * this._scale.z ); this._allocShape(material); - this._setLocalPose(this._scale); + this._setLocalPose(); this.setUniqueID(uniqueID); } @@ -46,7 +46,7 @@ export class PhysXBoxColliderShape extends PhysXColliderShape implements IBoxCol * {@inheritDoc IColliderShape.setWorldScale } */ setWorldScale(scale: Vector3): void { - this._setLocalPose(this._scale); + this._setLocalPose(); scale.cloneTo(this._scale); this._setLocalPose(); From 2cf421b9728b1424026c28914bac8554693e6527 Mon Sep 17 00:00:00 2001 From: GuoLei1990 Date: Fri, 22 Apr 2022 14:47:32 +0800 Subject: [PATCH 21/21] refactor: opt code --- packages/physics-physx/src/shape/PhysXBoxColliderShape.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts b/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts index 8e9dd22d2b..dc2de23575 100644 --- a/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts +++ b/packages/physics-physx/src/shape/PhysXBoxColliderShape.ts @@ -46,8 +46,6 @@ export class PhysXBoxColliderShape extends PhysXColliderShape implements IBoxCol * {@inheritDoc IColliderShape.setWorldScale } */ setWorldScale(scale: Vector3): void { - this._setLocalPose(); - scale.cloneTo(this._scale); this._setLocalPose();