2
0
TothBenoit 11 сар өмнө
parent
commit
219998be75
1 өөрчлөгдсөн 15 нэмэгдсэн , 1 устгасан
  1. 15 1
      hrt/prefab/rfx/SSR.hx

+ 15 - 1
hrt/prefab/rfx/SSR.hx

@@ -28,6 +28,9 @@ class SSRShader extends h3d.shader.ScreenShader {
 		@const var batchSample : Bool;
 		@const var CHECK_ANGLE : Bool;
 
+		@param var vignettingRadius : Float;
+		@param var vignettingSoftness : Float;
+
 		var screenDepth : Float;
 
 		function reflectedRay(ray : Vec3, normal : Vec3) : Vec3 {
@@ -149,8 +152,12 @@ class SSRShader extends h3d.shader.ScreenShader {
 					discard;
 			}
 
+			var screenPos = uvToScreen(calculatedUV);
+			var dist = length(screenPos);
+			var vignetting = 1.0 - smoothstep(vignettingRadius-vignettingSoftness, vignettingRadius, dist);
+
 			var fragmentColor = hdrMap.get(uv).rgb;
-			pixelColor = saturate(vec4(fragmentColor * colorMul, intensity * roughnessFactor));
+			pixelColor = saturate(vec4(fragmentColor * colorMul, intensity * roughnessFactor * vignetting));
 		}
 	}
 }
@@ -172,6 +179,8 @@ class SSR extends RendererFX {
 	@:s public var rayMarchingResolution : Float = 0.5;
 	@:s public var support4K : Bool = false;
 	@:s public var batchSample : Bool = true;
+	@:s public var vignettingRadius : Float = 0.1;
+	@:s public var vignettingSmoothness : Float = 0.1;
 
 	function new(parent, shared) {
 		super(parent, shared);
@@ -211,6 +220,9 @@ class SSR extends RendererFX {
 			ssrShader.cameraInverseProj = r.ctx.camera.getInverseProj();
 			ssrShader.cameraPos = r.ctx.camera.pos;
 
+			ssrShader.vignettingRadius = vignettingRadius;
+			ssrShader.vignettingSoftness = vignettingSmoothness;
+
 			ssrShader.frustum = r.ctx.getCameraFrustumBuffer();
 
 			ssr = r.allocTarget("ssr", false, textureSize / resRescale, hdrMap.format);
@@ -241,6 +253,8 @@ class SSR extends RendererFX {
 				<dt>Texture size</dt><dd><input type="range" min="0" max="1" field="textureSize"/></dd>
 				<dt>Support 4K</dt><dd><input type="checkbox" field="support4K"/></dd>
 				<dt>Fast sample</dt><dd><input type="checkbox" field="batchSample"/></dd>
+				<dt>Vignetting radius</dt><dd><input type="range" min="0" max="1" field="vignettingRadius"/></dd>
+				<dt>Vignetting smoothness</dt><dd><input type="range" min="0" max="1" field="vignettingSmoothness"/></dd>
 			</dl>
 		</div>
 		'),this);