diff --git a/packages/dev/core/src/Culling/Helper/computeShaderBoundingHelper.ts b/packages/dev/core/src/Culling/Helper/computeShaderBoundingHelper.ts index 319a065a4c9..23c1d8ad810 100644 --- a/packages/dev/core/src/Culling/Helper/computeShaderBoundingHelper.ts +++ b/packages/dev/core/src/Culling/Helper/computeShaderBoundingHelper.ts @@ -268,7 +268,7 @@ export class ComputeShaderBoundingHelper implements IBoundingInfoHelperPlatform ); ubo.updateFloat3("morphTargetTextureInfo", manager._textureVertexStride, manager._textureWidth, manager._textureHeight); - ubo.updateInt("morphTargetCount", manager.numInfluencers); + ubo.updateFloat("morphTargetCount", manager.numInfluencers); ubo.update(); } diff --git a/packages/dev/core/src/Materials/Node/Blocks/Vertex/morphTargetsBlock.ts b/packages/dev/core/src/Materials/Node/Blocks/Vertex/morphTargetsBlock.ts index 6b062c05870..e1de549677a 100644 --- a/packages/dev/core/src/Materials/Node/Blocks/Vertex/morphTargetsBlock.ts +++ b/packages/dev/core/src/Materials/Node/Blocks/Vertex/morphTargetsBlock.ts @@ -292,7 +292,7 @@ export class MorphTargetsBlock extends NodeMaterialBlock { const uniformsPrefix = isWebGPU ? "uniforms." : ""; if (manager?.isUsingTextureForTargets) { injectionCode += `for (${isWebGPU ? "var" : "int"} i = 0; i < NUM_MORPH_INFLUENCERS; i++) {\n`; - injectionCode += `if (i >= ${uniformsPrefix}morphTargetCount) { break; }\n`; + injectionCode += `if (${isWebGPU ? "f32" : "float"}(i) >= ${uniformsPrefix}morphTargetCount) { break; }\n`; injectionCode += `vertexID = ${isWebGPU ? "f32(vertexInputs.vertexIndex" : "float(gl_VertexID"}) * ${uniformsPrefix}morphTargetTextureInfo.x;\n`; if (supportPositions) { diff --git a/packages/dev/core/src/Morph/morphTargetManager.ts b/packages/dev/core/src/Morph/morphTargetManager.ts index 6eac272e420..963dda9f414 100644 --- a/packages/dev/core/src/Morph/morphTargetManager.ts +++ b/packages/dev/core/src/Morph/morphTargetManager.ts @@ -403,7 +403,7 @@ export class MorphTargetManager implements IDisposable { effect.setFloat3("morphTargetTextureInfo", this._textureVertexStride, this._textureWidth, this._textureHeight); effect.setFloatArray("morphTargetTextureIndices", this._morphTargetTextureIndices); effect.setTexture("morphTargets", this._targetStoreTexture); - effect.setInt("morphTargetCount", this.numInfluencers); + effect.setFloat("morphTargetCount", this.numInfluencers); } /** diff --git a/packages/dev/core/src/Shaders/ShadersInclude/morphTargetsVertex.fx b/packages/dev/core/src/Shaders/ShadersInclude/morphTargetsVertex.fx index 2ba99dc9039..26f1b876421 100644 --- a/packages/dev/core/src/Shaders/ShadersInclude/morphTargetsVertex.fx +++ b/packages/dev/core/src/Shaders/ShadersInclude/morphTargetsVertex.fx @@ -2,7 +2,7 @@ #ifdef MORPHTARGETS_TEXTURE #if {X} == 0 for (int i = 0; i < NUM_MORPH_INFLUENCERS; i++) { - if (i >= morphTargetCount) break; + if (float(i) >= morphTargetCount) break; vertexID = float(gl_VertexID) * morphTargetTextureInfo.x; diff --git a/packages/dev/core/src/Shaders/ShadersInclude/morphTargetsVertexDeclaration.fx b/packages/dev/core/src/Shaders/ShadersInclude/morphTargetsVertexDeclaration.fx index 5e31221e855..d946746b1b1 100644 --- a/packages/dev/core/src/Shaders/ShadersInclude/morphTargetsVertexDeclaration.fx +++ b/packages/dev/core/src/Shaders/ShadersInclude/morphTargetsVertexDeclaration.fx @@ -24,6 +24,6 @@ attribute vec4 color{X}; #endif #elif {X} == 0 - uniform int morphTargetCount; + uniform float morphTargetCount; #endif #endif diff --git a/packages/dev/core/src/ShadersWGSL/ShadersInclude/morphTargetsVertex.fx b/packages/dev/core/src/ShadersWGSL/ShadersInclude/morphTargetsVertex.fx index f3dfc0505d5..a04b002adbe 100644 --- a/packages/dev/core/src/ShadersWGSL/ShadersInclude/morphTargetsVertex.fx +++ b/packages/dev/core/src/ShadersWGSL/ShadersInclude/morphTargetsVertex.fx @@ -2,7 +2,7 @@ #ifdef MORPHTARGETS_TEXTURE #if {X} == 0 for (var i = 0; i < NUM_MORPH_INFLUENCERS; i = i + 1) { - if (i >= uniforms.morphTargetCount) { + if (f32(i) >= uniforms.morphTargetCount) { break; } diff --git a/packages/dev/core/src/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.fx b/packages/dev/core/src/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.fx index e8e4440d04f..904e64e4c1e 100644 --- a/packages/dev/core/src/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.fx +++ b/packages/dev/core/src/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.fx @@ -24,6 +24,6 @@ attribute color{X} : vec4; #endif #elif {X} == 0 - uniform morphTargetCount: i32; + uniform morphTargetCount: f32; #endif #endif diff --git a/packages/dev/core/src/ShadersWGSL/boundingInfo.compute.fx b/packages/dev/core/src/ShadersWGSL/boundingInfo.compute.fx index 240bc8f08e4..49bca851752 100644 --- a/packages/dev/core/src/ShadersWGSL/boundingInfo.compute.fx +++ b/packages/dev/core/src/ShadersWGSL/boundingInfo.compute.fx @@ -71,7 +71,7 @@ const identity = mat4x4f( struct Settings { morphTargetTextureInfo: vec3f, - morphTargetCount: i32, + morphTargetCount: f32, indexResult : u32, }; @@ -165,7 +165,7 @@ fn main(@builtin(global_invocation_id) global_id : vec3) { #ifdef MORPHTARGETS for (var i = 0; i < NUM_MORPH_INFLUENCERS; i = i + 1) { - if (i >= settings.morphTargetCount) { + if (f32(i) >= settings.morphTargetCount) { break; } positionUpdated = positionUpdated + (readVector3FromRawSampler(i, index) - position) * morphTargetInfluences[i];