diff --git a/src/objects/Skeleton.js b/src/objects/Skeleton.js index 8764e93cecd9b8330ea225911a21a77b92ba8b3d..539c75bb20fdd88f4239ab2237d5d0d324321135 100644 --- a/src/objects/Skeleton.js +++ b/src/objects/Skeleton.js @@ -16,6 +16,8 @@ function Skeleton( bones, boneInverses ) { this.bones = bones.slice( 0 ); this.boneMatrices = new Float32Array( this.bones.length * 16 ); + this.version = - 1; + // use the supplied bone inverses or calculate the inverses if ( boneInverses === undefined ) { diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index bd6b0f83b4c03184f6efe48d90adfd4e2bd9d18f..da016412bb83f8a5dd937f3e3946b51ac5629fc3 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -1306,7 +1306,14 @@ function WebGLRenderer( parameters ) { if ( object.isSkinnedMesh ) { - object.skeleton.update(); + // update skeleton only once in a frame + + if ( object.skeleton.version !== info.render.frame ) { + + object.skeleton.update(); + object.skeleton.version = info.render.frame; + + } }