Sebastien Vandenberghe 8 роки тому
батько
коміт
15bff7259f

+ 1 - 0
src/Materials/PBR/babylon.pbrBaseMaterial.ts

@@ -90,6 +90,7 @@
         public SAMPLER3DGREENDEPTH = false;
         public SAMPLER3DBGRMAP = false;
         public IMAGEPROCESSINGPOSTPROCESS = false;
+        public EXPOSURE = false;
 
         constructor() {
             super();

+ 8 - 4
src/Materials/babylon.imageProcessingConfiguration.ts

@@ -10,6 +10,7 @@ module BABYLON {
         VIGNETTEBLENDMODEOPAQUE: boolean;
         TONEMAPPING: boolean;
         CONTRAST: boolean;
+        EXPOSURE: boolean;
         COLORCURVES: boolean;
         COLORGRADING: boolean;
         SAMPLER3DGREENDEPTH: boolean;
@@ -120,7 +121,7 @@ module BABYLON {
          * Exposure used in the effect.
          */
         @serialize()
-        public exposure = Math.log(Math.PI) * Math.LOG2E;
+        public exposure = 1.0;
 
         @serialize()
         private _toneMappingEnabled = false;
@@ -278,7 +279,9 @@ module BABYLON {
          * @param defines the list of defines currently in use
          */
         public static PrepareUniforms(uniforms: string[], defines: IImageProcessingConfigurationDefines): void {
-            uniforms.push("exposureLinear");
+            if (defines.EXPOSURE) {
+                uniforms.push("exposureLinear");
+            }
             if (defines.CONTRAST) {
                 uniforms.push("contrast");
             }
@@ -316,12 +319,13 @@ module BABYLON {
             defines.VIGNETTEBLENDMODEOPAQUE = !defines.VIGNETTEBLENDMODEMULTIPLY;
             defines.TONEMAPPING = this.toneMappingEnabled;
             defines.CONTRAST = (this.contrast !== 1.0);
+            defines.EXPOSURE = (this.exposure !== 1.0);
             defines.COLORCURVES = (this.colorCurvesEnabled && !!this.colorCurves);
             defines.COLORGRADING = (this.colorGradingEnabled && !!this.colorGradingTexture);
             defines.SAMPLER3DGREENDEPTH = this.colorGradingWithGreenDepth;
             defines.SAMPLER3DBGRMAP = this.colorGradingBGR;
             defines.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess;
-            defines.IMAGEPROCESSING = defines.VIGNETTE || defines.TONEMAPPING || defines.CONTRAST || defines.COLORCURVES || defines.COLORGRADING;
+            defines.IMAGEPROCESSING = defines.VIGNETTE || defines.TONEMAPPING || defines.CONTRAST || defines.EXPOSURE || defines.COLORCURVES || defines.COLORGRADING;
         }
 
         /**
@@ -362,7 +366,7 @@ module BABYLON {
             }
 
             // Exposure
-            effect.setFloat("exposureLinear", Math.pow(2.0, -this.exposure) * Math.PI);
+            effect.setFloat("exposureLinear", this.exposure);
             
             // Contrast
             effect.setFloat("contrast", this.contrast);

+ 1 - 0
src/Materials/babylon.standardMaterial.ts

@@ -74,6 +74,7 @@ module BABYLON {
         public SAMPLER3DGREENDEPTH = false;
         public SAMPLER3DBGRMAP = false;
         public IMAGEPROCESSINGPOSTPROCESS = false;
+        public EXPOSURE = false;
 
         constructor() {
             super();

+ 2 - 1
src/PostProcess/babylon.imageProcessingPostProcess.ts

@@ -293,6 +293,7 @@
             SAMPLER3DGREENDEPTH: false,
             SAMPLER3DBGRMAP: false,
             IMAGEPROCESSINGPOSTPROCESS: false,
+            EXPOSURE: false,
         }
 
         constructor(name: string, options: number | PostProcessOptions, camera?: Camera, samplingMode?: number, engine?: Engine, reusable?: boolean, textureType: number = Engine.TEXTURETYPE_UNSIGNED_INT) {
@@ -324,7 +325,7 @@
             var samplers = ["textureSampler"];
             ImageProcessingConfiguration.PrepareSamplers(samplers, this._defines);
 
-            var uniforms = [];
+            var uniforms = ["scale"];
             ImageProcessingConfiguration.PrepareUniforms(uniforms, this._defines);
 
             this.updateEffect(defines, uniforms, samplers);

+ 3 - 1
src/Shaders/ShadersInclude/imageProcessingDeclaration.fx

@@ -1,4 +1,6 @@
-uniform float exposureLinear;
+#ifdef EXPOSURE
+	uniform float exposureLinear;
+#endif
 
 #ifdef CONTRAST
 	uniform float contrast;

+ 2 - 0
src/Shaders/ShadersInclude/imageProcessingFunctions.fx

@@ -51,7 +51,9 @@ vec3 sampleTexture3D(sampler2D colorTransform, vec3 color, vec2 sampler3dSetting
 
 vec4 applyImageProcessing(vec4 result) {
 
+#ifdef EXPOSURE
 	result.rgb *= exposureLinear;
+#endif
 
 #ifdef VIGNETTE
 		//vignette