Jelajahi Sumber

Merge pull request #11271 from jaxry/morph-target-displacement-map

Displacement Map: Add morph normal support
Mr.doob 8 tahun lalu
induk
melakukan
bd807bd1cd

+ 3 - 3
src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl

@@ -1,7 +1,7 @@
+vec3 transformedNormal = normalMatrix * objectNormal;
+
 #ifdef FLIP_SIDED
 
-	objectNormal = -objectNormal;
+	transformedNormal = - transformedNormal;
 
 #endif
-
-vec3 transformedNormal = normalMatrix * objectNormal;

+ 1 - 1
src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl

@@ -1,5 +1,5 @@
 #ifdef USE_DISPLACEMENTMAP
 
-	transformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );
+	transformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );
 
 #endif

+ 1 - 9
src/renderers/shaders/ShaderChunk/project_vertex.glsl

@@ -1,11 +1,3 @@
-#ifdef USE_SKINNING
-
-	vec4 mvPosition = modelViewMatrix * skinned;
-
-#else
-
-	vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );
-
-#endif
+vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );
 
 gl_Position = projectionMatrix * mvPosition;

+ 2 - 1
src/renderers/shaders/ShaderChunk/skinning_vertex.glsl

@@ -7,6 +7,7 @@
 	skinned += boneMatY * skinVertex * skinWeight.y;
 	skinned += boneMatZ * skinVertex * skinWeight.z;
 	skinned += boneMatW * skinVertex * skinWeight.w;
-	skinned  = bindMatrixInverse * skinned;
+
+	transformed = ( bindMatrixInverse * skinned ).xyz;
 
 #endif

+ 1 - 9
src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl

@@ -1,13 +1,5 @@
 #if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )
 
-	#ifdef USE_SKINNING
-
-		vec4 worldPosition = modelMatrix * skinned;
-
-	#else
-
-		vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );
-
-	#endif
+	vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );
 
 #endif

+ 9 - 1
src/renderers/shaders/ShaderLib/depth_vert.glsl

@@ -12,10 +12,18 @@ void main() {
 
 	#include <skinbase_vertex>
 
+	#ifdef USE_DISPLACEMENTMAP
+
+		#include <beginnormal_vertex>
+		#include <morphnormal_vertex>
+		#include <skinnormal_vertex>
+
+	#endif
+
 	#include <begin_vertex>
-	#include <displacementmap_vertex>
 	#include <morphtarget_vertex>
 	#include <skinning_vertex>
+	#include <displacementmap_vertex>
 	#include <project_vertex>
 	#include <logdepthbuf_vertex>
 	#include <clipping_planes_vertex>

+ 1 - 1
src/renderers/shaders/ShaderLib/meshphong_vert.glsl

@@ -40,9 +40,9 @@ void main() {
 #endif
 
 	#include <begin_vertex>
-	#include <displacementmap_vertex>
 	#include <morphtarget_vertex>
 	#include <skinning_vertex>
+	#include <displacementmap_vertex>
 	#include <project_vertex>
 	#include <logdepthbuf_vertex>
 	#include <clipping_planes_vertex>

+ 1 - 1
src/renderers/shaders/ShaderLib/meshphysical_vert.glsl

@@ -39,9 +39,9 @@ void main() {
 #endif
 
 	#include <begin_vertex>
-	#include <displacementmap_vertex>
 	#include <morphtarget_vertex>
 	#include <skinning_vertex>
+	#include <displacementmap_vertex>
 	#include <project_vertex>
 	#include <logdepthbuf_vertex>
 	#include <clipping_planes_vertex>

+ 1 - 1
src/renderers/shaders/ShaderLib/normal_vert.glsl

@@ -35,9 +35,9 @@ void main() {
 #endif
 
 	#include <begin_vertex>
-	#include <displacementmap_vertex>
 	#include <morphtarget_vertex>
 	#include <skinning_vertex>
+	#include <displacementmap_vertex>
 	#include <project_vertex>
 	#include <logdepthbuf_vertex>