Browse Source

Add configuration for auto microsurface if no alpha on specmap

Sébastien Vandenberghe 10 năm trước cách đây
mục cha
commit
fd3072fdb0

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 7 - 1
materialsLibrary/dist/babylon.pbrMaterial.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2 - 2
materialsLibrary/dist/babylon.pbrMaterial.min.js


+ 1 - 0
materialsLibrary/dist/dts/babylon.pbrMaterial.d.ts

@@ -55,6 +55,7 @@ declare module BABYLON {
         opacityFresnelParameters: FresnelParameters;
         opacityFresnelParameters: FresnelParameters;
         emissiveFresnelParameters: FresnelParameters;
         emissiveFresnelParameters: FresnelParameters;
         useMicroSurfaceFromReflectivityMapAlpha: boolean;
         useMicroSurfaceFromReflectivityMapAlpha: boolean;
+        useAutoMicroSurfaceFromReflectivityMap: boolean;
         useScalarInLinearSpace: boolean;
         useScalarInLinearSpace: boolean;
         private _renderTargets;
         private _renderTargets;
         private _worldViewProjectionMatrix;
         private _worldViewProjectionMatrix;

+ 6 - 0
materialsLibrary/materials/pbr/babylon.pbrMaterial.ts

@@ -64,6 +64,7 @@ module BABYLON {
         public BonesPerMesh = 0;
         public BonesPerMesh = 0;
         public INSTANCES = false;
         public INSTANCES = false;
         public MICROSURFACEFROMREFLECTIVITYMAP = false;
         public MICROSURFACEFROMREFLECTIVITYMAP = false;
+        public MICROSURFACEAUTOMATIC = false;
         public EMISSIVEASILLUMINATION = false;
         public EMISSIVEASILLUMINATION = false;
         public LINKEMISSIVEWITHALBEDO = false;
         public LINKEMISSIVEWITHALBEDO = false;
         public LIGHTMAP = false;
         public LIGHTMAP = false;
@@ -165,6 +166,7 @@ module BABYLON {
         public emissiveFresnelParameters: FresnelParameters;
         public emissiveFresnelParameters: FresnelParameters;
 
 
         public useMicroSurfaceFromReflectivityMapAlpha = false;
         public useMicroSurfaceFromReflectivityMapAlpha = false;
+        public useAutoMicroSurfaceFromReflectivityMap = false;
         public useScalarInLinearSpace = false;
         public useScalarInLinearSpace = false;
 
 
         private _renderTargets = new SmartArray<RenderTargetTexture>(16);
         private _renderTargets = new SmartArray<RenderTargetTexture>(16);
@@ -453,6 +455,7 @@ module BABYLON {
                             needUVs = true;
                             needUVs = true;
                             this._defines.REFLECTIVITY = true;
                             this._defines.REFLECTIVITY = true;
                             this._defines.MICROSURFACEFROMREFLECTIVITYMAP = this.useMicroSurfaceFromReflectivityMapAlpha;
                             this._defines.MICROSURFACEFROMREFLECTIVITYMAP = this.useMicroSurfaceFromReflectivityMapAlpha;
+                            this._defines.MICROSURFACEAUTOMATIC = this.useAutoMicroSurfaceFromReflectivityMap;
                         }
                         }
                     }
                     }
                 }
                 }
@@ -1141,6 +1144,7 @@ module BABYLON {
             newPBRMaterial.useAlphaFromAlbedoTexture = this.useAlphaFromAlbedoTexture;
             newPBRMaterial.useAlphaFromAlbedoTexture = this.useAlphaFromAlbedoTexture;
             newPBRMaterial.useEmissiveAsIllumination = this.useEmissiveAsIllumination;
             newPBRMaterial.useEmissiveAsIllumination = this.useEmissiveAsIllumination;
             newPBRMaterial.useMicroSurfaceFromReflectivityMapAlpha = this.useMicroSurfaceFromReflectivityMapAlpha;
             newPBRMaterial.useMicroSurfaceFromReflectivityMapAlpha = this.useMicroSurfaceFromReflectivityMapAlpha;
+            newPBRMaterial.useAutoMicroSurfaceFromReflectivityMap = this.useAutoMicroSurfaceFromReflectivityMap;
             newPBRMaterial.useScalarInLinearSpace = this.useScalarInLinearSpace;
             newPBRMaterial.useScalarInLinearSpace = this.useScalarInLinearSpace;
             newPBRMaterial.useSpecularOverAlpha = this.useSpecularOverAlpha;
             newPBRMaterial.useSpecularOverAlpha = this.useSpecularOverAlpha;
             newPBRMaterial.indexOfRefraction = this.indexOfRefraction;
             newPBRMaterial.indexOfRefraction = this.indexOfRefraction;
@@ -1224,6 +1228,7 @@ module BABYLON {
             serializationObject.useAlphaFromAlbedoTexture = this.useAlphaFromAlbedoTexture;
             serializationObject.useAlphaFromAlbedoTexture = this.useAlphaFromAlbedoTexture;
             serializationObject.useEmissiveAsIllumination = this.useEmissiveAsIllumination;
             serializationObject.useEmissiveAsIllumination = this.useEmissiveAsIllumination;
             serializationObject.useMicroSurfaceFromReflectivityMapAlpha = this.useMicroSurfaceFromReflectivityMapAlpha;
             serializationObject.useMicroSurfaceFromReflectivityMapAlpha = this.useMicroSurfaceFromReflectivityMapAlpha;
+            serializationObject.useAutoMicroSurfaceFromReflectivityMap = this.useAutoMicroSurfaceFromReflectivityMap;
             serializationObject.useScalarInLinear = this.useScalarInLinearSpace;
             serializationObject.useScalarInLinear = this.useScalarInLinearSpace;
             serializationObject.useSpecularOverAlpha = this.useSpecularOverAlpha;
             serializationObject.useSpecularOverAlpha = this.useSpecularOverAlpha;
             serializationObject.indexOfRefraction = this.indexOfRefraction;
             serializationObject.indexOfRefraction = this.indexOfRefraction;
@@ -1320,6 +1325,7 @@ module BABYLON {
             material.useAlphaFromAlbedoTexture = source.useAlphaFromAlbedoTexture;
             material.useAlphaFromAlbedoTexture = source.useAlphaFromAlbedoTexture;
             material.useEmissiveAsIllumination = source.useEmissiveAsIllumination;
             material.useEmissiveAsIllumination = source.useEmissiveAsIllumination;
             material.useMicroSurfaceFromReflectivityMapAlpha = source.useMicroSurfaceFromReflectivityMapAlpha;
             material.useMicroSurfaceFromReflectivityMapAlpha = source.useMicroSurfaceFromReflectivityMapAlpha;
+            material.useAutoMicroSurfaceFromReflectivityMap = source.useAutoMicroSurfaceFromReflectivityMap;
             material.useScalarInLinearSpace = source.useScalarInLinear;
             material.useScalarInLinearSpace = source.useScalarInLinear;
             material.useSpecularOverAlpha = source.useSpecularOverAlpha;
             material.useSpecularOverAlpha = source.useSpecularOverAlpha;
             material.indexOfRefraction = source.indexOfRefraction;
             material.indexOfRefraction = source.indexOfRefraction;

+ 3 - 1
materialsLibrary/materials/pbr/pbr.fragment.fx

@@ -890,7 +890,9 @@ void main(void) {
         #ifdef MICROSURFACEFROMREFLECTIVITYMAP
         #ifdef MICROSURFACEFROMREFLECTIVITYMAP
             microSurface = surfaceReflectivityColorMap.a;
             microSurface = surfaceReflectivityColorMap.a;
         #else
         #else
-            microSurface = computeDefaultMicroSurface(microSurface, surfaceReflectivityColor);
+            #ifdef MICROSURFACEAUTOMATIC
+                microSurface = computeDefaultMicroSurface(microSurface, surfaceReflectivityColor);
+            #endif
         #endif
         #endif
     #endif
     #endif