浏览代码

removed Environment hdr power/threshold, instead use hdrMax

Nicolas Cannasse 4 年之前
父节点
当前提交
2927a35af2
共有 3 个文件被更改,包括 9 次插入15 次删除
  1. 5 9
      h3d/scene/pbr/Environment.hx
  2. 2 3
      h3d/scene/pbr/Renderer.hx
  3. 2 3
      h3d/shader/pbr/Lighting.hx

+ 5 - 9
h3d/scene/pbr/Environment.hx

@@ -52,8 +52,7 @@ class IrradShader extends IrradBase {
 		@param var cubeSize : Float;
 		@param var cubeScaleFactor : Float;
 
-		@param var threshold : Float;
-		@param var scale : Float;
+		@param var hdrMax : Float;
 
 		function cosineWeightedSampling( p : Vec2, n : Vec3 ) : Vec3 {
 			var sq = sqrt(1 - p.x);
@@ -97,9 +96,8 @@ class IrradShader extends IrradBase {
 				}
 				var amount = n.dot(l).saturate();
 				if( amount > 0 ) {
-					var envMapColor = envMap.get(l).rgb;
-					envMapColor *= mix(1.0, scale, (max( max(envMapColor.r, max(envMapColor.g, envMapColor.b)) - threshold, 0) / max(0.001, (1.0 - threshold))));
-					color += gammaCorrect(envMapColor) * amount;
+					var envColor = gammaCorrect(min(envMap.get(l).rgb, hdrMax));
+					color += envColor * amount;
 					totalWeight += amount;
 				}
 			}
@@ -207,6 +205,7 @@ class Environment {
 	public var specSize : Int;
 	public var specLevels : Int;
 	public var ignoredSpecLevels : Int = 1;
+	public var hdrMax : Float = 10.0;
 
 	// 2D Texture - Panoramic
 	public var source : h3d.mat.Texture;
@@ -219,8 +218,6 @@ class Environment {
 
 	public var power : Float = 1.;
 	public var rot : Float = 0.;
-	public var threshold : Float = 0.;
-	public var scale : Float = 1.;
 
 	/*
 		Source can be cube map already prepared or a 2D equirectangular map that
@@ -355,8 +352,7 @@ class Environment {
 		screen.shader.samplesBits = sampleBits;
 		screen.shader.envMap = env;
 		screen.shader.isSRGB = env.isSRGB();
-		screen.shader.threshold = threshold;
-		screen.shader.scale = scale;
+		screen.shader.hdrMax = hdrMax;
 
 		var engine = h3d.Engine.getCurrent();
 

+ 2 - 3
h3d/scene/pbr/Renderer.hx

@@ -385,7 +385,7 @@ class Renderer extends h3d.scene.Renderer {
 			pbrIndirect.irrSpecular = env.specular;
 			pbrIndirect.irrSpecularLevels = env.specLevels;
 			pbrIndirect.cameraInvViewProj.load(ctx.camera.getInverseViewProj());
-			pbrIndirect.skyScale = 1.0;
+			pbrIndirect.skyHdrMax = 1.0;
 			pbrIndirect.drawIndirectDiffuse = true;
 			pbrIndirect.drawIndirectSpecular = true;
 
@@ -397,8 +397,7 @@ class Renderer extends h3d.scene.Renderer {
 				pbrIndirect.skyMap = switch( skyMode ) {
 				case Hide: null;
 				case Env:
-					pbrIndirect.skyScale = env.scale;
-					pbrIndirect.skyThreshold = env.threshold;
+					pbrIndirect.skyHdrMax = env.hdrMax;
 					pbrIndirect.gammaCorrect = true;
 					env.env;
 				case Specular:

+ 2 - 3
h3d/shader/pbr/Lighting.hx

@@ -20,8 +20,7 @@ class Indirect extends PropsDefinition {
 
 		// Sky Params
 		@param var skyMap : SamplerCube;
-		@param var skyThreshold : Float;
-		@param var skyScale : Float;
+		@param var skyHdrMax : Float;
 		@const var gammaCorrect : Bool;
 		@param var cameraInvViewProj : Mat4;
 		@param var skyColorValue : Vec3;
@@ -53,7 +52,7 @@ class Indirect extends PropsDefinition {
 					else {
 						var normal = (vec3( uvToScreen(calculatedUV), 1. ) * cameraInvViewProj.mat3x4()).normalize();
 						color = skyMap.get(rotateNormal(normal)).rgb;
-						color.rgb *= mix(1.0, skyScale, (max( max(color.r, max(color.g, color.b)) - skyThreshold, 0) / max(0.001, (1.0 - skyThreshold))));
+						color = min(color, skyHdrMax);
 					}
 					if( gammaCorrect )
 						color *= color;