瀏覽代碼

added emissive to hdr before bloom

ncannasse 7 年之前
父節點
當前提交
e13f2e6d40
共有 3 個文件被更改,包括 6 次插入6 次删除
  1. 4 1
      h3d/scene/pbr/Renderer.hx
  2. 0 4
      h3d/shader/pbr/Bloom.hx
  3. 2 1
      h3d/shader/pbr/Lighting.hx

+ 4 - 1
h3d/scene/pbr/Renderer.hx

@@ -66,6 +66,7 @@ typedef RenderProps = {
 	var bloom : BloomProps;
 	var sao : SaoProps;
 	var shadow : ShadowProps;
+	var emissive : Float;
 }
 
 class Renderer extends h3d.scene.Renderer {
@@ -108,7 +109,6 @@ class Renderer extends h3d.scene.Renderer {
 		defaultPass = new h3d.pass.Default("default");
 		pbrOut.addShader(pbrIndirect);
 		pbrOut.addShader(pbrProps);
-		bloomPass.addShader(pbrProps);
 		slides.addShader(pbrProps);
 		allPasses.push(output);
 		allPasses.push(defaultPass);
@@ -217,6 +217,7 @@ class Renderer extends h3d.scene.Renderer {
 
 		pbrDirect.cameraPosition.load(ctx.camera.pos);
 		pbrIndirect.cameraPosition.load(ctx.camera.pos);
+		pbrIndirect.emissivePower = props.emissive * props.emissive;
 		pbrIndirect.irrPower = env.power * env.power;
 		pbrIndirect.irrLut = env.lut;
 		pbrIndirect.irrDiffuse = env.diffuse;
@@ -343,6 +344,7 @@ class Renderer extends h3d.scene.Renderer {
 			mode : Pbr,
 			env : null,
 			envPower : 1.,
+			emissive : 1.,
 			exposure : 0.,
 			sky : Hide,
 			tone : Reinhard,
@@ -455,6 +457,7 @@ class Renderer extends h3d.scene.Renderer {
 					<br/>
 					<input type="range" min="0" max="2" field="envPower"/>
 				</dd>
+				<dt>Emissive</dt><dd><input type="range" min="0" max="2" field="emissive"></dd>
 				<dt>Exposure</dt><dd><input type="range" min="-3" max="3" field="exposure"></dd>
 			</dl>
 			</div>

+ 0 - 4
h3d/shader/pbr/Bloom.hx

@@ -4,9 +4,6 @@ class Bloom extends ScreenShader {
 
 	static var SRC = {
 
-		var albedo : Vec3;
-		var emissive : Float;
-
 		@param var hdr : Sampler2D;
 		@param var threshold : Float;
 		@param var intensity : Float;
@@ -15,7 +12,6 @@ class Bloom extends ScreenShader {
 			pixelColor = hdr.get(calculatedUV);
 			var lum = pixelColor.rgb.dot(vec3(0.2126, 0.7152, 0.0722));
 			if( lum < threshold ) pixelColor.rgb = vec3(0.) else pixelColor.rgb *= (lum - threshold) / lum;
-			pixelColor.rgb += albedo * emissive;
 			pixelColor.rgb *= intensity;
 		}
 

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

@@ -13,6 +13,7 @@ class Indirect extends PropsDefinition {
 		@const var showSky : Bool;
 		@param var skyMap : SamplerCube;
 		@param var cameraInvViewProj : Mat4;
+		@param var emissivePower : Float;
 		var calculatedUV : Vec2;
 
 		function fragment() {
@@ -34,7 +35,7 @@ class Indirect extends PropsDefinition {
 				var specular = envSpec * (F * envBRDF.x + envBRDF.y);
 
 				var indirect = (diffuse * (1 - metalness) * (1 - F) + specular) * irrPower;
-				pixelColor.rgb += indirect * occlusion;
+				pixelColor.rgb += indirect * occlusion + albedo * emissive * emissivePower;
 			}
 		}
 	};