浏览代码

Merge pull request #18595 from WestLangley/dev_non_uniform_scale

InstancedMesh: Improve normal matrix calculation
Mr.doob 5 年之前
父节点
当前提交
bf656cfe93
共有 1 个文件被更改,包括 8 次插入1 次删除
  1. 8 1
      src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js

+ 8 - 1
src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js

@@ -3,7 +3,14 @@ vec3 transformedNormal = objectNormal;
 
 
 #ifdef USE_INSTANCING
 #ifdef USE_INSTANCING
 
 
-	transformedNormal = mat3( instanceMatrix ) * transformedNormal;
+	// this is in lieu of a per-instance normal-matrix
+	// shear transforms in the instance matrix are not supported
+
+	mat3 m = mat3( instanceMatrix );
+
+	transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );
+
+	transformedNormal = m * transformedNormal;
 
 
 #endif
 #endif