فهرست منبع

Fix shadow update when object is culled (#26293)

Ondřej Španěl 2 سال پیش
والد
کامیت
0fc8d3d099
2فایلهای تغییر یافته به همراه17 افزوده شده و 14 حذف شده
  1. 3 14
      src/renderers/WebGLRenderer.js
  2. 14 0
      src/renderers/webgl/WebGLObjects.js

+ 3 - 14
src/renderers/WebGLRenderer.js

@@ -1093,6 +1093,9 @@ class WebGLRenderer {
 
 			const shadowsArray = currentRenderState.state.shadowsArray;
 
+			// muse be done before shadowMap.render, so that the number is the the same for shadows and real objects
+			this.info.render.frame ++;
+
 			shadowMap.render( shadowsArray, scene, camera );
 
 			if ( _clippingEnabled === true ) clipping.endShadows();
@@ -1101,7 +1104,6 @@ class WebGLRenderer {
 
 			if ( this.info.autoReset === true ) this.info.reset();
 
-			this.info.render.frame ++;
 
 			//
 
@@ -1231,19 +1233,6 @@ class WebGLRenderer {
 
 					if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
 
-						if ( object.isSkinnedMesh ) {
-
-							// update skeleton only once in a frame
-
-							if ( object.skeleton.frame !== info.render.frame ) {
-
-								object.skeleton.update();
-								object.skeleton.frame = info.render.frame;
-
-							}
-
-						}
-
 						const geometry = objects.update( object );
 						const material = object.material;
 

+ 14 - 0
src/renderers/webgl/WebGLObjects.js

@@ -37,6 +37,20 @@ function WebGLObjects( gl, geometries, attributes, info ) {
 
 		}
 
+		if ( object.isSkinnedMesh ) {
+
+			// update skeleton only once in a frame
+
+			if ( object.skeleton.frame !== info.render.frame ) {
+
+				object.skeleton.update();
+				object.skeleton.frame = info.render.frame;
+
+			}
+
+		}
+
+
 		return buffergeometry;
 
 	}