@@ -57,6 +57,7 @@ class NodeMaterialObserver {
5757
5858 this . renderObjects = new WeakMap ( ) ;
5959 this . hasNode = this . containsNode ( builder ) ;
60+ this . hasAnimation = builder . object . isSkinnedMesh === true ;
6061 this . refreshUniforms = refreshUniforms ;
6162 this . renderId = 0 ;
6263
@@ -89,6 +90,12 @@ class NodeMaterialObserver {
8990 worldMatrix : renderObject . object . matrixWorld . clone ( )
9091 } ;
9192
93+ if ( renderObject . object . morphTargetInfluences ) {
94+
95+ data . morphTargetInfluences = renderObject . object . morphTargetInfluences . slice ( ) ;
96+
97+ }
98+
9299 if ( renderObject . bundle !== null ) {
93100
94101 data . version = renderObject . bundle . version ;
@@ -158,13 +165,15 @@ class NodeMaterialObserver {
158165
159166 equals ( renderObject ) {
160167
168+ const { object, material } = renderObject ;
169+
161170 const renderObjectData = this . getRenderObjectData ( renderObject ) ;
162171
163172 // world matrix
164173
165- if ( renderObjectData . worldMatrix . equals ( renderObject . object . matrixWorld ) !== true ) {
174+ if ( renderObjectData . worldMatrix . equals ( object . matrixWorld ) !== true ) {
166175
167- renderObjectData . worldMatrix . copy ( renderObject . object . matrixWorld ) ;
176+ renderObjectData . worldMatrix . copy ( object . matrixWorld ) ;
168177
169178 return false ;
170179
@@ -173,7 +182,6 @@ class NodeMaterialObserver {
173182 // material
174183
175184 const materialData = renderObjectData . material ;
176- const material = renderObject . material ;
177185
178186 for ( const property in materialData ) {
179187
@@ -211,6 +219,26 @@ class NodeMaterialObserver {
211219
212220 }
213221
222+ // morph targets
223+
224+ if ( renderObjectData . morphTargetInfluences ) {
225+
226+ let morphChanged = false ;
227+
228+ for ( let i = 0 ; i < renderObjectData . morphTargetInfluences . length ; i ++ ) {
229+
230+ if ( renderObjectData . morphTargetInfluences [ i ] !== object . morphTargetInfluences [ i ] ) {
231+
232+ morphChanged = true ;
233+
234+ }
235+
236+ }
237+
238+ if ( morphChanged ) return true ;
239+
240+ }
241+
214242 // bundle
215243
216244 if ( renderObject . bundle !== null ) {
@@ -225,7 +253,7 @@ class NodeMaterialObserver {
225253
226254 needsRefresh ( renderObject , nodeFrame ) {
227255
228- if ( this . hasNode || this . firstInitialization ( renderObject ) )
256+ if ( this . hasNode || this . hasAnimation || this . firstInitialization ( renderObject ) )
229257 return true ;
230258
231259 const { renderId } = nodeFrame ;
0 commit comments