|
|
@@ -57,6 +57,7 @@ class NodeMaterialObserver {
|
|
|
|
|
|
this.renderObjects = new WeakMap();
|
|
|
this.hasNode = this.containsNode( builder );
|
|
|
+ this.hasAnimation = builder.object.isSkinnedMesh === true;
|
|
|
this.refreshUniforms = refreshUniforms;
|
|
|
this.renderId = 0;
|
|
|
|
|
|
@@ -89,6 +90,12 @@ class NodeMaterialObserver {
|
|
|
worldMatrix: renderObject.object.matrixWorld.clone()
|
|
|
};
|
|
|
|
|
|
+ if ( renderObject.object.morphTargetInfluences ) {
|
|
|
+
|
|
|
+ data.morphTargetInfluences = renderObject.object.morphTargetInfluences.slice();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
if ( renderObject.bundle !== null ) {
|
|
|
|
|
|
data.version = renderObject.bundle.version;
|
|
|
@@ -158,13 +165,15 @@ class NodeMaterialObserver {
|
|
|
|
|
|
equals( renderObject ) {
|
|
|
|
|
|
+ const { object, material } = renderObject;
|
|
|
+
|
|
|
const renderObjectData = this.getRenderObjectData( renderObject );
|
|
|
|
|
|
// world matrix
|
|
|
|
|
|
- if ( renderObjectData.worldMatrix.equals( renderObject.object.matrixWorld ) !== true ) {
|
|
|
+ if ( renderObjectData.worldMatrix.equals( object.matrixWorld ) !== true ) {
|
|
|
|
|
|
- renderObjectData.worldMatrix.copy( renderObject.object.matrixWorld );
|
|
|
+ renderObjectData.worldMatrix.copy( object.matrixWorld );
|
|
|
|
|
|
return false;
|
|
|
|
|
|
@@ -173,7 +182,6 @@ class NodeMaterialObserver {
|
|
|
// material
|
|
|
|
|
|
const materialData = renderObjectData.material;
|
|
|
- const material = renderObject.material;
|
|
|
|
|
|
for ( const property in materialData ) {
|
|
|
|
|
|
@@ -211,6 +219,26 @@ class NodeMaterialObserver {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ // morph targets
|
|
|
+
|
|
|
+ if ( renderObjectData.morphTargetInfluences ) {
|
|
|
+
|
|
|
+ let morphChanged = false;
|
|
|
+
|
|
|
+ for ( let i = 0; i < renderObjectData.morphTargetInfluences.length; i ++ ) {
|
|
|
+
|
|
|
+ if ( renderObjectData.morphTargetInfluences[ i ] !== object.morphTargetInfluences[ i ] ) {
|
|
|
+
|
|
|
+ morphChanged = true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( morphChanged ) return true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
// bundle
|
|
|
|
|
|
if ( renderObject.bundle !== null ) {
|
|
|
@@ -225,7 +253,7 @@ class NodeMaterialObserver {
|
|
|
|
|
|
needsRefresh( renderObject, nodeFrame ) {
|
|
|
|
|
|
- if ( this.hasNode || this.firstInitialization( renderObject ) )
|
|
|
+ if ( this.hasNode || this.hasAnimation || this.firstInitialization( renderObject ) )
|
|
|
return true;
|
|
|
|
|
|
const { renderId } = nodeFrame;
|