ShiroSmith %!s(int64=4) %!d(string=hai) anos
pai
achega
d29818c026
Modificáronse 1 ficheiros con 12 adicións e 11 borrados
  1. 12 11
      hrt/prefab/rfx/TemporalFiltering.hx

+ 12 - 11
hrt/prefab/rfx/TemporalFiltering.hx

@@ -94,13 +94,9 @@ class TemporalFilteringShader extends h3d.shader.ScreenShader {
 			var prevPos = vec4(curPos, 1.0) * prevCamMat;
 			prevPos.xyz /= prevPos.w;
 
-			// Discard Pixels outside bounds
-			if( abs(prevPos.x) > 1.0 || abs(prevPos.y) > 1.0 )
-				discard;
-
+			var curColor = curFrame.get(unJitteredUV).rgb;
 			var prevUV = screenToUv(prevPos.xy);
 			var prevColor = prevFrame.get(prevUV).rgb;
-			var curColor = curFrame.get(unJitteredUV).rgb;
 
 			// Neighborhood clipping [MALAN 2012][KARIS 2014]
 			if( VARIANCE_CLIPPING ) {
@@ -116,7 +112,6 @@ class TemporalFilteringShader extends h3d.shader.ScreenShader {
 				m2 = sqrt(m2 / 5.0 - m1 * m1);
 				prevColor = ycocg2rgb(clipToAABB(rgb2ycocg(prevColor), rgb2ycocg(curColor), m1, m2));
 			}
-
 			pixelColor.rgb = mix(curColor, prevColor, amount);
 			pixelColor.a = 1.0;
 		}
@@ -125,10 +120,10 @@ class TemporalFilteringShader extends h3d.shader.ScreenShader {
 
 class TemporalFiltering extends hrt.prefab.rfx.RendererFX {
 
-	var frustumJitter = new FrustumJitter();
+	public var frustumJitter = new FrustumJitter();
 	public var pass = new h3d.pass.ScreenFx(new TemporalFilteringShader());
+	public var jitterMat = new h3d.Matrix();
 	var curMatNoJitter = new h3d.Matrix();
-	var jitterMat = new h3d.Matrix();
 
 	public function new(?parent) {
 		super(parent);
@@ -143,6 +138,14 @@ class TemporalFiltering extends hrt.prefab.rfx.RendererFX {
 		} : TemporalFilteringProps);
 	}
 
+	var tmp = new h3d.Matrix();
+	public function getMatrixJittered( camera : h3d.Camera ) : h3d.Matrix {
+		tmp.identity();
+		tmp.multiply(camera.mproj, jitterMat);
+		tmp.multiply(camera.mcam, tmp);
+		return tmp;
+	}
+
 	override function begin( r:h3d.scene.Renderer, step:h3d.impl.RendererFX.Step ) {
 		if( step == MainDraw ) {
 			var ctx = r.ctx;
@@ -160,10 +163,8 @@ class TemporalFiltering extends hrt.prefab.rfx.RendererFX {
 			s.prevJitterUV.set(-frustumJitter.prevSample.x / ctx.engine.width, frustumJitter.prevSample.y / ctx.engine.height);
 			s.jitterUV.set(-frustumJitter.curSample.x / ctx.engine.width, frustumJitter.curSample.y / ctx.engine.height);
 
-			ctx.camera.update();
 			curMatNoJitter.load(ctx.camera.m);
-			ctx.camera.mproj.multiply(ctx.camera.mproj, jitterMat);
-			ctx.camera.m.multiply(ctx.camera.mcam, ctx.camera.mproj);
+			ctx.camera.m.load(getMatrixJittered(ctx.camera));
 			@:privateAccess ctx.camera.needInv = true;
 			s.cameraInverseViewProj.initInverse(curMatNoJitter);
 		}