فهرست منبع

- Add worldUV option for ssao

ShiroSmith 7 سال پیش
والد
کامیت
0f3c5bd688
2فایلهای تغییر یافته به همراه8 افزوده شده و 1 حذف شده
  1. 4 1
      h3d/shader/SAO.hx
  2. 4 0
      hxd/prefab/rfx/Sao.hx

+ 4 - 1
h3d/shader/SAO.hx

@@ -10,6 +10,7 @@ class SAO extends ScreenShader {
 
 
 		@range(4,30) @const var numSamples : Int;
 		@range(4,30) @const var numSamples : Int;
 		@range(1,10) @const var numSpiralTurns : Int;
 		@range(1,10) @const var numSpiralTurns : Int;
+		@const var useWorldUV : Bool;
 
 
 		@ignore @param var depthTexture : Channel;
 		@ignore @param var depthTexture : Channel;
 		@ignore @param var normalTexture : Channel3;
 		@ignore @param var normalTexture : Channel3;
@@ -61,7 +62,9 @@ class SAO extends ScreenShader {
 			var origin = getPosition(vUV);
 			var origin = getPosition(vUV);
 			var normal = normalTexture.get(vUV);
 			var normal = normalTexture.get(vUV);
 
 
-			var sampleNoise = noiseTexture.get(vUV * noiseScale / screenRatio).x;
+			var noiseUv : Vec2;
+			noiseUv = useWorldUV ? origin.xy + origin.z : vUV;
+			var sampleNoise = noiseTexture.get(noiseUv).x;
 			var randomPatternRotationAngle = 2.0 * PI * sampleNoise;
 			var randomPatternRotationAngle = 2.0 * PI * sampleNoise;
 
 
 			// change from WS to DepthUV space
 			// change from WS to DepthUV space

+ 4 - 0
hxd/prefab/rfx/Sao.hx

@@ -7,6 +7,7 @@ typedef SaoProps = {
 	var radius : Float;
 	var radius : Float;
 	var intensity : Float;
 	var intensity : Float;
 	var bias : Float;
 	var bias : Float;
+	var useWorldUV : Bool;
 }
 }
 
 
 class Sao extends RendererFX {
 class Sao extends RendererFX {
@@ -24,6 +25,7 @@ class Sao extends RendererFX {
 			radius : 1,
 			radius : 1,
 			intensity : 1,
 			intensity : 1,
 			bias : 0.1,
 			bias : 0.1,
+			useWorldUV : false,
 		} : SaoProps);
 		} : SaoProps);
 	}
 	}
 
 
@@ -43,6 +45,7 @@ class Sao extends RendererFX {
 			sao.shader.bias = props.bias * props.bias;
 			sao.shader.bias = props.bias * props.bias;
 			sao.shader.depthTextureChannel = depth.channel;
 			sao.shader.depthTextureChannel = depth.channel;
 			sao.shader.normalTextureChannel = normal.channel;
 			sao.shader.normalTextureChannel = normal.channel;
+			sao.shader.useWorldUV = props.useWorldUV;
 			sao.apply(depth.texture,normal.texture,ctx.camera);
 			sao.apply(depth.texture,normal.texture,ctx.camera);
 			ctx.engine.popTarget();
 			ctx.engine.popTarget();
 
 
@@ -64,6 +67,7 @@ class Sao extends RendererFX {
 			<dt>Size</dt><dd><input type="range" min="0" max="1" field="size"/></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>Blur</dt><dd><input type="range" min="0" max="20" field="blur"/></dd>
 			<dt>Samples</dt><dd><input type="range" min="3" max="256" field="samples" step="1"/></dd>
 			<dt>Samples</dt><dd><input type="range" min="3" max="256" field="samples" step="1"/></dd>
+			<dt>Use World UV</dt><dd><input type="checkbox" field="useWorldUV"/></dd>
 			</dl>
 			</dl>
 		'),props);
 		'),props);
 	}
 	}