Forráskód Böngészése

Link emissive with reflectivity

Sébastien Vandenberghe 9 éve
szülő
commit
cb0d06cb7f

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 9 - 1
materialsLibrary/dist/babylon.pbrMaterial.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 2 - 2
materialsLibrary/dist/babylon.pbrMaterial.min.js


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

@@ -57,6 +57,7 @@ declare module BABYLON {
         useAutoMicroSurfaceFromReflectivityMap: boolean;
         useScalarInLinearSpace: boolean;
         usePhysicalLightFalloff: boolean;
+        useRadianceOverAlpha: boolean;
         disableLighting: boolean;
         private _renderTargets;
         private _worldViewProjectionMatrix;

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

@@ -90,6 +90,7 @@ module BABYLON {
         public REFRACTIONMAPINLINEARSPACE = false;
         public LODBASEDMICROSFURACE = false;
         public USEPHYSICALLIGHTFALLOFF = false;
+        public RADIANCEOVERALPHA = false;
 
         constructor() {
             super();
@@ -168,6 +169,7 @@ module BABYLON {
         public useAutoMicroSurfaceFromReflectivityMap = false;
         public useScalarInLinearSpace = false;
         public usePhysicalLightFalloff = true;
+        public useRadianceOverAlpha = true;
         
         public disableLighting = false;
 
@@ -567,6 +569,10 @@ module BABYLON {
             if (this.usePhysicalLightFalloff) {
                 this._defines.USEPHYSICALLIGHTFALLOFF = true;
             }
+            
+            if (this.useRadianceOverAlpha) {
+                this._defines.RADIANCEOVERALPHA = true;
+            }
 
             // Attribs
             if (mesh) {
@@ -1138,6 +1144,7 @@ module BABYLON {
             newPBRMaterial.indexOfRefraction = this.indexOfRefraction;
             newPBRMaterial.invertRefractionY = this.invertRefractionY;
             newPBRMaterial.usePhysicalLightFalloff = this.usePhysicalLightFalloff;
+            newPBRMaterial.useRadianceOverAlpha = this.useRadianceOverAlpha;
 
             newPBRMaterial.emissiveFresnelParameters = this.emissiveFresnelParameters.clone();
             newPBRMaterial.opacityFresnelParameters = this.opacityFresnelParameters.clone();
@@ -1223,6 +1230,7 @@ module BABYLON {
             serializationObject.indexOfRefraction = this.indexOfRefraction;
             serializationObject.invertRefractionY = this.invertRefractionY;
             serializationObject.usePhysicalLightFalloff = this.usePhysicalLightFalloff;
+            serializationObject.useRadianceOverAlpha = this.useRadianceOverAlpha;
 
             serializationObject.emissiveFresnelParameters = this.emissiveFresnelParameters.serialize();
             serializationObject.opacityFresnelParameters = this.opacityFresnelParameters.serialize();
@@ -1321,6 +1329,7 @@ module BABYLON {
             material.indexOfRefraction = source.indexOfRefraction;
             material.invertRefractionY = source.invertRefractionY;
             material.usePhysicalLightFalloff = source.usePhysicalLightFalloff;
+            material.useRadianceOverAlpha = source.useRadianceOverAlpha;
 
             material.emissiveFresnelParameters = FresnelParameters.Parse(source.emissiveFresnelParameters);
             material.opacityFresnelParameters = FresnelParameters.Parse(source.opacityFresnelParameters);

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

@@ -1281,7 +1281,11 @@ vec3 surfaceEmissiveColor = vEmissiveColor;
 #endif
 
 #ifdef SPECULAROVERALPHA
-    alpha = clamp(alpha + dot(finalSpecular, vec3(0.3, 0.59, 0.11)), 0., 1.);
+    alpha = clamp(alpha + getLuminance(finalSpecular), 0., 1.);
+#endif
+
+#ifdef RADIANCEOVERALPHA
+    alpha = clamp(alpha + getLuminance(environmentRadiance), 0., 1.);
 #endif
 
 // Composition