Explorar el Código

added renderer occlusion, bloom saturation

ncannasse hace 7 años
padre
commit
8b051a23a3

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

@@ -47,6 +47,7 @@ typedef RenderProps = {
 	var tone : TonemapMap;
 	var shadow : ShadowProps;
 	var emissive : Float;
+	var occlusion : Float;
 }
 
 class Renderer extends h3d.scene.Renderer {
@@ -207,6 +208,7 @@ class Renderer extends h3d.scene.Renderer {
 		pbrProps.pbrTex = pbr;
 		pbrProps.otherTex = other;
 		pbrProps.cameraInverseViewProj = ctx.camera.getInverseViewProj();
+		pbrProps.occlusionPower = props.occlusion * props.occlusion;
 
 		pbrDirect.cameraPosition.load(ctx.camera.pos);
 		pbrIndirect.cameraPosition.load(ctx.camera.pos);
@@ -365,8 +367,9 @@ class Renderer extends h3d.scene.Renderer {
 			envPower : 1.,
 			emissive : 1.,
 			exposure : 0.,
-			sky : Hide,
-			tone : Reinhard,
+			sky : Irrad,
+			tone : Linear,
+			occlusion : 1.,
 			shadow : {
 				enable : true,
 				power : 40,
@@ -441,6 +444,7 @@ class Renderer extends h3d.scene.Renderer {
 					<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>Occlusion</dt><dd><input type="range" min="0" max="2" field="occlusion"></dd>
 				<dt>Exposure</dt><dd><input type="range" min="-3" max="3" field="exposure"></dd>
 			</dl>
 			</div>

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

@@ -7,12 +7,14 @@ class Bloom extends ScreenShader {
 		@param var hdr : Sampler2D;
 		@param var threshold : Float;
 		@param var intensity : Float;
+		@param var colorMatrix : Mat4;
 
 		function fragment() {
 			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 *= intensity;
+			pixelColor.rgb = (vec4(pixelColor.rgb,1.) * colorMatrix).rgb;
 		}
 
 	};

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

@@ -10,6 +10,7 @@ class PropsImport extends hxsl.Shader {
 		@const var isScreen : Bool = true;
 
 		@param var cameraInverseViewProj : Mat4;
+		@param var occlusionPower : Float;
 
 		var albedo : Vec3;
 		var depth : Float;
@@ -32,7 +33,7 @@ class PropsImport extends hxsl.Shader {
 			var pbr = pbrTex.get(uv);
 			metalness = pbr.r;
 			roughness = pbr.g;
-			occlusion = pbr.b;
+			occlusion = mix(1, pbr.b, occlusionPower);
 
 			var other = otherTex.get(uv);
 			emissive = other.r;

+ 5 - 0
hxd/prefab/rfx/Bloom.hx

@@ -5,6 +5,7 @@ typedef BloomProps = {
 	var threshold : Float;
 	var intensity : Float;
 	var blur : Float;
+	var saturation : Float;
 }
 
 class Bloom extends RendererFX {
@@ -19,6 +20,7 @@ class Bloom extends RendererFX {
 			blur : 3,
 			intensity : 1.,
 			threshold : 0.5,
+			saturation: 0,
 		} : BloomProps);
 	}
 
@@ -30,6 +32,8 @@ class Bloom extends RendererFX {
 			bloomPass.shader.hdr = ctx.getGlobal("hdr");
 			bloomPass.shader.threshold = pb.threshold;
 			bloomPass.shader.intensity = pb.intensity;
+			bloomPass.shader.colorMatrix.identity();
+			bloomPass.shader.colorMatrix.colorSaturate(pb.saturation);
 			bloomPass.render();
 			ctx.engine.popTarget();
 
@@ -47,6 +51,7 @@ class Bloom extends RendererFX {
 			<dt>Threshold</dt><dd><input type="range" min="0" max="1" field="threshold"/></dd>
 			<dt>Size</dt><dd><input type="range" min="0" max="1" field="size"/></dd>
 			<dt>Blur</dt><dd><input type="range" min="0" max="20" field="blur"/></dd>
+			<dt>Saturation</dt><dd><input type="range" min="-1" max="1" field="saturation"/></dd>
 			</dl>
 		'),props);
 	}