Răsfoiți Sursa

WebGLRenderer: Force flat shading for geometries without normals. (#32831)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
mrdoob 1 lună în urmă
părinte
comite
c57ccd0c38

+ 0 - 11
examples/webgl_loader_collada_kinematics.html

@@ -44,17 +44,6 @@
 
 				dae = collada.scene;
 
-				dae.traverse( function ( child ) {
-
-					if ( child.isMesh ) {
-
-						// model does not have normals
-						child.material.flatShading = true;
-
-					}
-
-				} );
-
 				dae.scale.x = dae.scale.y = dae.scale.z = 10.0;
 				dae.updateMatrix();
 

+ 6 - 1
src/renderers/webgl/WebGLPrograms.js

@@ -303,7 +303,12 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin
 			useFog: material.fog === true,
 			fogExp2: ( !! fog && fog.isFogExp2 ),
 
-			flatShading: ( material.flatShading === true && material.wireframe === false ),
+			flatShading: material.wireframe === false && (
+				material.flatShading === true ||
+				( geometry.attributes.normal === undefined && HAS_NORMALMAP === false &&
+					( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isMeshPhysicalMaterial )
+				)
+			),
 
 			sizeAttenuation: material.sizeAttenuation === true,
 			logarithmicDepthBuffer: logarithmicDepthBuffer,

粤ICP备19079148号