Преглед на файлове

SAO : Added scalable bias option that scales the radius with the distance following a logarithm curve.

TothBenoit преди 7 месеца
родител
ревизия
9d28616694
променени са 1 файла, в които са добавени 8 реда и са изтрити 2 реда
  1. 8 2
      h3d/shader/SAO.hx

+ 8 - 2
h3d/shader/SAO.hx

@@ -16,6 +16,7 @@ class SAO extends ScreenShader {
 		@range(1,10) @const(16) var numSpiralTurns : Int;
 		@const var useWorldUV : Bool;
 		@const var USE_FADE : Bool = false;
+		@const var USE_SCALABLE_BIAS : Bool = false;
 
 		@ignore @param var depthTexture : Channel;
 		@ignore @param var normalTexture : Channel3;
@@ -43,13 +44,18 @@ class SAO extends ScreenShader {
 			var unitOffset = vec2(cos(angle), sin(angle));
 			var targetUV = uv + radiusSS * alpha * unitOffset * screenRatio;
 			var Q = getPosition(targetUV);
+			var radius = sampleRadius;
+			if (USE_SCALABLE_BIAS) {
+				var vQ = Q * cameraView;
+				radius *= log(1.0 + vQ.z) + 1;
+			}
 			var v = Q - position;
 
 			var vv = dot(v, v);
-			var vn = dot(v, normal) - (bias * sampleRadius);
+			var vn = dot(v, normal) - bias * radius;
 
 			// Smoother transition to zero (lowers contrast, smoothing out corners). [Recommended]
-			var radius2 = sampleRadius * sampleRadius;
+			var radius2 = radius * radius;
 			var f = max(radius2 - vv, 0.0) / radius2;
 			var epsilon = 0.01;
 			return f * f * f * max(vn / (epsilon + vv), 0.0);