Selaa lähdekoodia

Merge pull request #2487 from sebavan/DDS

PBR UV Optim
sebavan 8 vuotta sitten
vanhempi
commit
3bf434bf52

+ 84 - 75
src/Materials/PBR/babylon.pbrBaseMaterial.ts

@@ -1,39 +1,68 @@
 module BABYLON {
     class PBRMaterialDefines extends MaterialDefines implements IImageProcessingConfigurationDefines {
         public PBR = true;
+
+        public MAINUV1 = false;
+        public MAINUV2 = false;
+        public UV1 = false;
+        public UV2 = false;
+
         public ALBEDO = false;
+        public ALBEDODIRECTUV = 0;
+        public VERTEXCOLOR = false;
+
         public AMBIENT = false;
+        public AMBIENTDIRECTUV = 0;
         public AMBIENTINGRAYSCALE = false;
+
         public OPACITY = false;
+        public VERTEXALPHA = false;
+        public OPACITYDIRECTUV = 0;
         public OPACITYRGB = false;
-        public REFLECTION = false;
-        public EMISSIVE = false;
-        public REFLECTIVITY = false;
-        public BUMP = false;
-        public PARALLAX = false;
-        public PARALLAXOCCLUSION = false;
-        public SPECULAROVERALPHA = false;
-        public CLIPPLANE = false;
         public ALPHATEST = false;
         public ALPHABLEND = false;
         public ALPHAFROMALBEDO = false;
-        public POINTSIZE = false;
-        public FOG = false;
+        public ALPHATESTVALUE = 0.5;
+        public SPECULAROVERALPHA = false;
+        public RADIANCEOVERALPHA = false;
+        public ALPHAFRESNEL = false;
+        public PREMULTIPLYALPHA = false;
+
+        public EMISSIVE = false;
+        public EMISSIVEDIRECTUV = 0;
+
+        public REFLECTIVITY = false;
+        public REFLECTIVITYDIRECTUV = 0;
         public SPECULARTERM = false;
-        public NORMAL = false;
-        public TANGENT = false;
-        public UV1 = false;
-        public UV2 = false;
-        public VERTEXCOLOR = false;
-        public VERTEXALPHA = false;
-        public NUM_BONE_INFLUENCERS = 0;
-        public BonesPerMesh = 0;
-        public INSTANCES = false;
+
         public MICROSURFACEFROMREFLECTIVITYMAP = false;
         public MICROSURFACEAUTOMATIC = false;
+        public LODBASEDMICROSFURACE = false;
+        public MICROSURFACEMAP = false;
+        public MICROSURFACEMAPDIRECTUV = 0;
+
+        public METALLICWORKFLOW = false;
+        public ROUGHNESSSTOREINMETALMAPALPHA = false;
+        public ROUGHNESSSTOREINMETALMAPGREEN = false;
+        public METALLNESSSTOREINMETALMAPBLUE = false;
+        public AOSTOREINMETALMAPRED = false;
+        public ENVIRONMENTBRDF = false;
+
+        public NORMAL = false;
+        public TANGENT = false;
+        public BUMP = false;
+        public BUMPDIRECTUV = 0;
+        public PARALLAX = false;
+        public PARALLAXOCCLUSION = false;
+        public INVERTNORMALMAPX = false;
+        public INVERTNORMALMAPY = false;
+        public NORMALXYSCALE = true;
+
         public LIGHTMAP = false;
+        public LIGHTMAPDIRECTUV = 0;
         public USELIGHTMAPASSHADOWMAP = false;
-        public LOGARITHMICDEPTH = false;
+
+        public REFLECTION = false;
         public REFLECTIONMAP_3D = false;
         public REFLECTIONMAP_SPHERICAL = false;
         public REFLECTIONMAP_PLANAR = false;
@@ -49,39 +78,23 @@
         public REFLECTIONMAP_OPPOSITEZ = false;
         public LODINREFLECTIONALPHA = false;
         public GAMMAREFLECTION = false;
+
         public REFRACTION = false;
         public REFRACTIONMAP_3D = false;
         public REFRACTIONMAP_OPPOSITEZ = false;
         public LODINREFRACTIONALPHA = false;
         public GAMMAREFRACTION = false;
         public LINKREFRACTIONTOTRANSPARENCY = false;
-        public LODBASEDMICROSFURACE = false;
-        public USEPHYSICALLIGHTFALLOFF = false;
-        public RADIANCEOVERALPHA = false;
-        public INVERTNORMALMAPX = false;
-        public INVERTNORMALMAPY = false;
-        public TWOSIDEDLIGHTING = false;
-        public SHADOWFLOAT = false;
-        public NORMALXYSCALE = true;
-        public USERIGHTHANDEDSYSTEM = false;
 
-        public METALLICWORKFLOW = false;
-        public METALLICMAP = false;
-        public ROUGHNESSSTOREINMETALMAPALPHA = false;
-        public ROUGHNESSSTOREINMETALMAPGREEN = false;
-        public METALLNESSSTOREINMETALMAPBLUE = false;
-        public AOSTOREINMETALMAPRED = false;
-        public MICROSURFACEMAP = false;
-        public ENVIRONMENTBRDF = false;
+        public INSTANCES = false;
+        
+        public NUM_BONE_INFLUENCERS = 0;
+        public BonesPerMesh = 0;
 
         public MORPHTARGETS = false;
         public MORPHTARGETS_NORMAL = false;
         public MORPHTARGETS_TANGENT = false;
         public NUM_MORPH_INFLUENCERS = 0;
-        
-        public ALPHATESTVALUE = 0.5;
-        public PREMULTIPLYALPHA = false;
-        public ALPHAFRESNEL = false;
 
         public IMAGEPROCESSING = false;
         public VIGNETTE = false;
@@ -96,6 +109,15 @@
         public IMAGEPROCESSINGPOSTPROCESS = false;
         public EXPOSURE = false;
 
+        public USEPHYSICALLIGHTFALLOFF = false;
+        public TWOSIDEDLIGHTING = false;
+        public SHADOWFLOAT = false;
+        public USERIGHTHANDEDSYSTEM = false;
+        public CLIPPLANE = false;
+        public POINTSIZE = false;
+        public FOG = false;
+        public LOGARITHMICDEPTH = false;
+
         constructor() {
             super();
             this.rebuild();
@@ -523,8 +545,7 @@
                             return false;
                         }
 
-                        defines._needUVs = true;
-                        defines.ALBEDO = true;
+                        MaterialHelper.PrepareDefinesForMergedUV(this._albedoTexture, defines, "ALBEDO"); 
                     }
 
                     if (this._ambientTexture && StandardMaterial.AmbientTextureEnabled) {
@@ -532,8 +553,7 @@
                             return false;
                         }
 
-                        defines._needUVs = true;
-                        defines.AMBIENT = true;
+                        MaterialHelper.PrepareDefinesForMergedUV(this._ambientTexture, defines, "AMBIENT"); 
                         defines.AMBIENTINGRAYSCALE = this._useAmbientInGrayScale;
                     }
 
@@ -541,13 +561,9 @@
                         if (!this._opacityTexture.isReadyOrNotBlocking()) {
                             return false;
                         }
-                        
-                        defines._needUVs = true;
-                        defines.OPACITY = true;
 
-                        if (this._opacityTexture.getAlphaFromRGB) {
-                            defines.OPACITYRGB = true;
-                        }
+                        MaterialHelper.PrepareDefinesForMergedUV(this._opacityTexture, defines, "OPACITY"); 
+                        defines.OPACITYRGB = this._opacityTexture.getAlphaFromRGB;
                     }
 
                     var reflectionTexture = this._getReflectionTexture();
@@ -610,8 +626,7 @@
                             return false;
                         }
 
-                        defines._needUVs = true;
-                        defines.LIGHTMAP = true;
+                        MaterialHelper.PrepareDefinesForMergedUV(this._lightmapTexture, defines, "LIGHTMAP"); 
                         defines.USELIGHTMAPASSHADOWMAP = this._useLightmapAsShadowmap;
                     }
 
@@ -620,8 +635,7 @@
                             return false;
                         }
 
-                        defines._needUVs = true;
-                        defines.EMISSIVE = true;
+                        MaterialHelper.PrepareDefinesForMergedUV(this._emissiveTexture, defines, "EMISSIVE");
                     }
 
                     if (StandardMaterial.SpecularTextureEnabled) {
@@ -630,9 +644,8 @@
                                 return false;
                             }
 
-                            defines._needUVs = true;
+                            MaterialHelper.PrepareDefinesForMergedUV(this._metallicTexture, defines, "REFLECTIVITY");
                             defines.METALLICWORKFLOW = true;
-                            defines.METALLICMAP = true;
                             defines.ROUGHNESSSTOREINMETALMAPALPHA = this._useRoughnessFromMetallicTextureAlpha;
                             defines.ROUGHNESSSTOREINMETALMAPGREEN = !this._useRoughnessFromMetallicTextureAlpha && this._useRoughnessFromMetallicTextureGreen;
                             defines.METALLNESSSTOREINMETALMAPBLUE = this._useMetallnessFromMetallicTextureBlue;
@@ -643,8 +656,7 @@
                                 return false;
                             }
 
-                            defines._needUVs = true;
-                            defines.REFLECTIVITY = true;
+                            MaterialHelper.PrepareDefinesForMergedUV(this._reflectivityTexture, defines, "REFLECTIVITY");
                             defines.MICROSURFACEFROMREFLECTIVITYMAP = this._useMicroSurfaceFromReflectivityMapAlpha;
                             defines.MICROSURFACEAUTOMATIC = this._useAutoMicroSurfaceFromReflectivityMap;
                         }
@@ -654,8 +666,7 @@
                                 return false;
                             }
 
-                            defines._needUVs = true;
-                            defines.MICROSURFACEMAP = true;
+                            MaterialHelper.PrepareDefinesForMergedUV(this._microSurfaceTexture, defines, "MICROSURFACEMAP");
                         }
                     }
 
@@ -664,9 +675,8 @@
                         if (!this._bumpTexture.isReady()) {
                             return false;
                         }
-                        
-                        defines._needUVs = true;
-                        defines.BUMP = true;
+
+                        MaterialHelper.PrepareDefinesForMergedUV(this._bumpTexture, defines, "BUMP");
 
                         if (this._useParallax && this._albedoTexture && StandardMaterial.DiffuseTextureEnabled) {
                             defines.PARALLAX = true;
@@ -696,8 +706,7 @@
                         if (!refractionTexture.isReadyOrNotBlocking()) {
                             return false;
                         }
-                        
-                        defines._needUVs = true;
+
                         defines.REFRACTION = true;
                         defines.REFRACTIONMAP_3D = refractionTexture.isCube;
                         defines.GAMMAREFRACTION = refractionTexture.gammaSpace;
@@ -1007,17 +1016,17 @@
                     if (scene.texturesEnabled) {
                         if (this._albedoTexture && StandardMaterial.DiffuseTextureEnabled) {
                             this._uniformBuffer.updateFloat2("vAlbedoInfos", this._albedoTexture.coordinatesIndex, this._albedoTexture.level);
-                            this._uniformBuffer.updateMatrix("albedoMatrix", this._albedoTexture.getTextureMatrix());
+                            MaterialHelper.BindTextureMatrix(this._albedoTexture, this._uniformBuffer, "albedo");
                         }
 
                         if (this._ambientTexture && StandardMaterial.AmbientTextureEnabled) {
                             this._uniformBuffer.updateFloat3("vAmbientInfos", this._ambientTexture.coordinatesIndex, this._ambientTexture.level, this._ambientTextureStrength);
-                            this._uniformBuffer.updateMatrix("ambientMatrix", this._ambientTexture.getTextureMatrix());
+                            MaterialHelper.BindTextureMatrix(this._ambientTexture, this._uniformBuffer, "ambient");
                         }
 
                         if (this._opacityTexture && StandardMaterial.OpacityTextureEnabled) {
                             this._uniformBuffer.updateFloat2("vOpacityInfos", this._opacityTexture.coordinatesIndex, this._opacityTexture.level);
-                            this._uniformBuffer.updateMatrix("opacityMatrix", this._opacityTexture.getTextureMatrix());
+                            MaterialHelper.BindTextureMatrix(this._opacityTexture, this._uniformBuffer, "opacity");
                         }
 
                         var reflectionTexture = this._getReflectionTexture();
@@ -1050,33 +1059,33 @@
 
                         if (this._emissiveTexture && StandardMaterial.EmissiveTextureEnabled) {
                             this._uniformBuffer.updateFloat2("vEmissiveInfos", this._emissiveTexture.coordinatesIndex, this._emissiveTexture.level);
-                            this._uniformBuffer.updateMatrix("emissiveMatrix", this._emissiveTexture.getTextureMatrix());
+                            MaterialHelper.BindTextureMatrix(this._emissiveTexture, this._uniformBuffer, "emissive");
                         }
 
                         if (this._lightmapTexture && StandardMaterial.LightmapTextureEnabled) {
                             this._uniformBuffer.updateFloat2("vLightmapInfos", this._lightmapTexture.coordinatesIndex, this._lightmapTexture.level);
-                            this._uniformBuffer.updateMatrix("lightmapMatrix", this._lightmapTexture.getTextureMatrix());
+                            MaterialHelper.BindTextureMatrix(this._lightmapTexture, this._uniformBuffer, "lightmap");
                         }
 
                         if (StandardMaterial.SpecularTextureEnabled) {
                             if (this._metallicTexture) {
                                 this._uniformBuffer.updateFloat3("vReflectivityInfos", this._metallicTexture.coordinatesIndex, this._metallicTexture.level, this._ambientTextureStrength);
-                                this._uniformBuffer.updateMatrix("reflectivityMatrix", this._metallicTexture.getTextureMatrix());
+                                MaterialHelper.BindTextureMatrix(this._metallicTexture, this._uniformBuffer, "reflectivity");
                             }
                             else if (this._reflectivityTexture) {
                                 this._uniformBuffer.updateFloat3("vReflectivityInfos", this._reflectivityTexture.coordinatesIndex, this._reflectivityTexture.level, 1.0);
-                                this._uniformBuffer.updateMatrix("reflectivityMatrix", this._reflectivityTexture.getTextureMatrix());
+                                MaterialHelper.BindTextureMatrix(this._reflectivityTexture, this._uniformBuffer, "reflectivity");
                             }
 
                             if (this._microSurfaceTexture) {
                                 this._uniformBuffer.updateFloat2("vMicroSurfaceSamplerInfos", this._microSurfaceTexture.coordinatesIndex, this._microSurfaceTexture.level);
-                                this._uniformBuffer.updateMatrix("microSurfaceSamplerMatrix", this._microSurfaceTexture.getTextureMatrix());
+                                MaterialHelper.BindTextureMatrix(this._microSurfaceTexture, this._uniformBuffer, "microSurfaceSampler");
                             }
                         }
 
                         if (this._bumpTexture && scene.getEngine().getCaps().standardDerivatives && StandardMaterial.BumpTextureEnabled && !this._disableBumpMap) {
                             this._uniformBuffer.updateFloat3("vBumpInfos", this._bumpTexture.coordinatesIndex, this._bumpTexture.level, this._parallaxScaleBias);
-                            this._uniformBuffer.updateMatrix("bumpMatrix", this._bumpTexture.getTextureMatrix());
+                            MaterialHelper.BindTextureMatrix(this._bumpTexture, this._uniformBuffer, "bump");
                         }
 
                         var refractionTexture = this._getRefractionTexture();

+ 1 - 1
src/Shaders/ShadersInclude/pbrFragmentDeclaration.fx

@@ -32,7 +32,7 @@ uniform vec2 vEmissiveInfos;
 uniform vec2 vLightmapInfos;
 #endif
 
-#if defined(REFLECTIVITY) || defined(METALLICWORKFLOW) 
+#ifdef REFLECTIVITY
 uniform vec3 vReflectivityInfos;
 #endif
 

+ 1 - 1
src/Shaders/ShadersInclude/pbrVertexDeclaration.fx

@@ -26,7 +26,7 @@ uniform vec2 vLightmapInfos;
 uniform mat4 lightmapMatrix;
 #endif
 
-#if defined(REFLECTIVITY) || defined(METALLICWORKFLOW) 
+#ifdef REFLECTIVITY 
 uniform vec3 vReflectivityInfos;
 uniform mat4 reflectivityMatrix;
 #endif

+ 68 - 18
src/Shaders/pbr.fragment.fx

@@ -21,6 +21,14 @@ uniform vec4 vCameraInfos;
 // Input
 varying vec3 vPositionW;
 
+#ifdef MAINUV1
+	varying vec2 vMainUV1;
+#endif 
+
+#ifdef MAINUV2 
+	varying vec2 vMainUV2; 
+#endif 
+
 #ifdef NORMAL
 	varying vec3 vNormalW;
 	#ifdef USESPHERICALFROMREFLECTIONMAP
@@ -37,38 +45,80 @@ varying vec4 vColor;
 
 // Samplers
 #ifdef ALBEDO
-varying vec2 vAlbedoUV;
-uniform sampler2D albedoSampler;
+	#if ALBEDODIRECTUV == 1
+		#define vAlbedoUV vMainUV1
+	#elif ALBEDODIRECTUV == 2
+		#define vAlbedoUV vMainUV2
+	#else
+		varying vec2 vAlbedoUV;
+	#endif
+	uniform sampler2D albedoSampler;
 #endif
 
 #ifdef AMBIENT
-varying vec2 vAmbientUV;
-uniform sampler2D ambientSampler;
+	#if AMBIENTDIRECTUV == 1
+		#define vAmbientUV vMainUV1
+	#elif AMBIENTDIRECTUV == 2
+		#define vAmbientUV vMainUV2
+	#else
+		varying vec2 vAmbientUV;
+	#endif
+	uniform sampler2D ambientSampler;
 #endif
 
-#ifdef OPACITY	
-varying vec2 vOpacityUV;
-uniform sampler2D opacitySampler;
+#ifdef OPACITY
+	#if OPACITYDIRECTUV == 1
+		#define vOpacityUV vMainUV1
+	#elif OPACITYDIRECTUV == 2
+		#define vOpacityUV vMainUV2
+	#else
+		varying vec2 vOpacityUV;
+	#endif
+	uniform sampler2D opacitySampler;
 #endif
 
 #ifdef EMISSIVE
-varying vec2 vEmissiveUV;
-uniform sampler2D emissiveSampler;
+	#if EMISSIVEDIRECTUV == 1
+		#define vEmissiveUV vMainUV1
+	#elif EMISSIVEDIRECTUV == 2
+		#define vEmissiveUV vMainUV2
+	#else
+		varying vec2 vEmissiveUV;
+	#endif
+	uniform sampler2D emissiveSampler;
 #endif
 
 #ifdef LIGHTMAP
-varying vec2 vLightmapUV;
-uniform sampler2D lightmapSampler;
+	#if LIGHTMAPDIRECTUV == 1
+		#define vLightmapUV vMainUV1
+	#elif LIGHTMAPDIRECTUV == 2
+		#define vLightmapUV vMainUV2
+	#else
+		varying vec2 vLightmapUV;
+	#endif
+	uniform sampler2D lightmapSampler;
 #endif
 
-#if defined(REFLECTIVITY) || defined(METALLICWORKFLOW) 
-varying vec2 vReflectivityUV;
-uniform sampler2D reflectivitySampler;
+#ifdef REFLECTIVITY
+	#if REFLECTIVITYDIRECTUV == 1
+		#define vReflectivityUV vMainUV1
+	#elif REFLECTIVITYDIRECTUV == 2
+		#define vReflectivityUV vMainUV2
+	#else
+		varying vec2 vReflectivityUV;
+	#endif
+	uniform sampler2D reflectivitySampler;
 #endif
 
 #ifdef MICROSURFACEMAP
-varying vec2 vMicroSurfaceSamplerUV;
-uniform sampler2D microSurfaceSampler;
+	#if MICROSURFACEMAPDIRECTUV == 1
+		#define vMicroSurfaceSamplerUV vMainUV1
+	#elif MICROSURFACEMAPDIRECTUV == 2
+		#define vMicroSurfaceSamplerUV vMainUV2
+	#else
+		varying vec2 vMicroSurfaceSamplerUV;
+	#endif
+	uniform sampler2D microSurfaceSampler;
 #endif
 
 // Refraction
@@ -83,7 +133,7 @@ uniform sampler2D microSurfaceSampler;
 		#else
 			uniform samplerCube refractionSamplerLow;
 			uniform samplerCube refractionSamplerHigh;
-		#endif		
+		#endif
 	#else
 		#define sampleRefraction(s, c) texture2D(s, c)
 		
@@ -258,7 +308,7 @@ void main(void) {
 #ifdef METALLICWORKFLOW
 	vec2 metallicRoughness = surfaceReflectivityColor.rg;
 
-	#ifdef METALLICMAP
+	#ifdef REFLECTIVITY
 		vec4 surfaceMetallicColorMap = texture2D(reflectivitySampler, vReflectivityUV + uvOffset);
 
 		#ifdef AOSTOREINMETALMAPRED

+ 30 - 16
src/Shaders/pbr.vertex.fx

@@ -16,6 +16,12 @@ attribute vec2 uv;
 #ifdef UV2
 attribute vec2 uv2;
 #endif
+#ifdef MAINUV1
+varying vec2 vMainUV1;
+#endif
+#ifdef MAINUV2
+varying vec2 vMainUV2; 
+#endif 
 #ifdef VERTEXCOLOR
 attribute vec4 color;
 #endif
@@ -25,35 +31,35 @@ attribute vec4 color;
 // Uniforms
 #include<instancesDeclaration>
 
-#ifdef ALBEDO
+#if defined(ALBEDO) && ALBEDODIRECTUV == 0
 varying vec2 vAlbedoUV;
 #endif
 
-#ifdef AMBIENT
+#if defined(AMBIENT) && AMBIENTDIRECTUV == 0
 varying vec2 vAmbientUV;
 #endif
 
-#ifdef OPACITY
+#if defined(OPACITY) && OPACITYDIRECTUV == 0
 varying vec2 vOpacityUV;
 #endif
 
-#ifdef EMISSIVE
+#if defined(EMISSIVE) && EMISSIVEDIRECTUV == 0
 varying vec2 vEmissiveUV;
 #endif
 
-#ifdef LIGHTMAP
+#if defined(LIGHTMAP) && LIGHTMAPDIRECTUV == 0
 varying vec2 vLightmapUV;
 #endif
 
-#if defined(REFLECTIVITY) || defined(METALLICWORKFLOW) 
+#if defined(REFLECTIVITY) && REFLECTIVITYDIRECTUV == 0
 varying vec2 vReflectivityUV;
 #endif
 
-#ifdef MICROSURFACEMAP
+#if defined(MICROSURFACEMAP) && MICROSURFACEMAPDIRECTUV == 0
 varying vec2 vMicroSurfaceSamplerUV;
 #endif
 
-#ifdef BUMP
+#if defined(BUMP) && BUMPDIRECTUV == 0
 varying vec2 vBumpUV;
 #endif
 
@@ -136,7 +142,15 @@ void main(void) {
     vec2 uv2 = vec2(0., 0.);
 #endif
 
-#ifdef ALBEDO
+#ifdef MAINUV1
+	vMainUV1 = uv;
+#endif 
+
+#ifdef MAINUV2
+	vMainUV2 = uv2;
+#endif 
+
+#if defined(ALBEDO) && ALBEDODIRECTUV == 0 
     if (vAlbedoInfos.x == 0.)
     {
         vAlbedoUV = vec2(albedoMatrix * vec4(uv, 1.0, 0.0));
@@ -147,7 +161,7 @@ void main(void) {
     }
 #endif
 
-#ifdef AMBIENT
+#if defined(AMBIENT) && AMBIENTDIRECTUV == 0 
     if (vAmbientInfos.x == 0.)
     {
         vAmbientUV = vec2(ambientMatrix * vec4(uv, 1.0, 0.0));
@@ -158,7 +172,7 @@ void main(void) {
     }
 #endif
 
-#ifdef OPACITY
+#if defined(OPACITY) && OPACITYDIRECTUV == 0 
     if (vOpacityInfos.x == 0.)
     {
         vOpacityUV = vec2(opacityMatrix * vec4(uv, 1.0, 0.0));
@@ -169,7 +183,7 @@ void main(void) {
     }
 #endif
 
-#ifdef EMISSIVE
+#if defined(EMISSIVE) && EMISSIVEDIRECTUV == 0 
     if (vEmissiveInfos.x == 0.)
     {
         vEmissiveUV = vec2(emissiveMatrix * vec4(uv, 1.0, 0.0));
@@ -180,7 +194,7 @@ void main(void) {
     }
 #endif
 
-#ifdef LIGHTMAP
+#if defined(LIGHTMAP) && LIGHTMAPDIRECTUV == 0 
     if (vLightmapInfos.x == 0.)
     {
         vLightmapUV = vec2(lightmapMatrix * vec4(uv, 1.0, 0.0));
@@ -191,7 +205,7 @@ void main(void) {
     }
 #endif
 
-#if defined(REFLECTIVITY) || defined(METALLICWORKFLOW) 
+#if defined(REFLECTIVITY) && REFLECTIVITYDIRECTUV == 0 
     if (vReflectivityInfos.x == 0.)
     {
         vReflectivityUV = vec2(reflectivityMatrix * vec4(uv, 1.0, 0.0));
@@ -202,7 +216,7 @@ void main(void) {
     }
 #endif
 
-#ifdef MICROSURFACEMAP
+#if defined(MICROSURFACEMAP) && MICROSURFACEMAPDIRECTUV == 0 
     if (vMicroSurfaceSamplerInfos.x == 0.)
     {
         vMicroSurfaceSamplerUV = vec2(microSurfaceSamplerMatrix * vec4(uv, 1.0, 0.0));
@@ -213,7 +227,7 @@ void main(void) {
     }
 #endif
 
-#ifdef BUMP
+#if defined(BUMP) && BUMPDIRECTUV == 0 
     if (vBumpInfos.x == 0.)
     {
         vBumpUV = vec2(bumpMatrix * vec4(uv, 1.0, 0.0));