浏览代码

Update Distance and PbrShader

ShiroSmith 5 年之前
父节点
当前提交
2f63f5cfe1
共有 2 个文件被更改,包括 32 次插入14 次删除
  1. 22 12
      hrt/prefab/rfx/DistanceBlur.hx
  2. 10 2
      hrt/prefab/rfx/PbrShader.hx

+ 22 - 12
hrt/prefab/rfx/DistanceBlur.hx

@@ -16,22 +16,24 @@ class DistanceBlurShader extends PbrShader {
 
 		@param var blurredTexture : Sampler2D;
 
+		@const var DEBUG : Bool = false;
+
 		function fragment() {
 			var origin = getPosition();
 			var distance = (origin - camera.position).length();
-
-			if( distance > nearEndDistance && distance < farStartDistance )
+			
+			if( distance < nearEndDistance ) {
+				var nearIntensityFactor = clamp((distance - nearStartDistance) / (nearEndDistance - nearStartDistance), 0, 1);
+				var nearIntensity = mix(nearStartIntensity, nearEndIntensity, nearIntensityFactor);
+				pixelColor = DEBUG ? vec4(vec3(nearIntensity), 1.0) : vec4(blurredTexture.get(calculatedUV).rgb, nearIntensity);
+			}
+			else if( distance > farStartDistance ) {
+				var farIntensityFactor = clamp((distance - farStartDistance) / (farEndDistance - farStartDistance), 0, 1);
+				var farIntensity = mix(farStartIntensity, farEndIntensity, farIntensityFactor);
+				pixelColor = DEBUG ? vec4(vec3(farIntensity), 1.0) : vec4(blurredTexture.get(calculatedUV).rgb, farIntensity);
+			}
+			else 
 				discard;
-
-			var nearIntensityFactor = clamp((distance - nearStartDistance) / (nearEndDistance - nearStartDistance), 0, 1);
-			var farIntensityFactor = clamp((distance - farStartDistance) / (farEndDistance - farStartDistance), 0, 1);
-			var nearIntensity = mix(nearStartIntensity, nearEndIntensity, nearIntensityFactor);
-			var farIntensity = mix(farStartIntensity, farEndIntensity, farIntensityFactor);
-			var intensity = max(nearIntensity, farIntensity);
-
-			if( intensity <= 0 ) discard;
-
-			pixelColor = vec4(blurredTexture.get(calculatedUV).rgb, intensity);
 		}
 	};
 
@@ -52,6 +54,8 @@ typedef DistanceBlurProps = {
 	var farEndDistance : Float;
 	var farStartIntensity : Float;
 	var farEndIntensity : Float;
+
+	var showDebug : Bool;
 }
 
 class DistanceBlur extends RendererFX {
@@ -70,6 +74,7 @@ class DistanceBlur extends RendererFX {
 			farEndDistance : 500,
 			farStartIntensity : 0,
 			farEndIntensity : 1,
+			showDebug : false,
 		} : DistanceBlurProps);
 
 		blurPass.pass.setBlendMode(Alpha);
@@ -87,6 +92,8 @@ class DistanceBlur extends RendererFX {
 			blurPass.shader.farEndDistance = p.farEndDistance;
 			blurPass.shader.farStartIntensity = p.farStartIntensity;
 			blurPass.shader.farEndIntensity = p.farEndIntensity;
+			blurPass.shader.DEBUG = #if editor p.showDebug #else false #end;
+
 			var lbrBlurred : h3d.mat.Texture = ctx.getGlobal("ldrBlurred");
 			if( lbrBlurred == null ) {
 				var ldr : h3d.mat.Texture = ctx.getGlobal("ldrMap");
@@ -115,6 +122,9 @@ class DistanceBlur extends RendererFX {
 					<dt>Start Opacity</dt><dd><input type="range" min="0" max="1" field="farStartIntensity"/></dd>
 					<dt>End Opacity</dt><dd><input type="range" min="0" max="1" field="farEndIntensity"/></dd>
 				</div>
+				<div class="group" name="Debug">
+					<dt>Show Debug</dt><dd><input type="checkbox" field="showDebug"/></dd>
+				</div>
 		'),props);
 	}
 	#end

+ 10 - 2
hrt/prefab/rfx/PbrShader.hx

@@ -5,11 +5,19 @@ class PbrShader extends h3d.shader.ScreenShader {
 	static var SRC = {
 
 		@global var depthMap : Channel;
-		@global var occlusionMap : Channel;
-		@global var hdrMap : Channel;
+		//@global var occlusionMap : Channel;
+		//@global var hdrMap : Channel;
 		@global var camera : {
+			var view : Mat4;
+			var proj : Mat4;
 			var position : Vec3;
+			var projFlip : Float;
+			var projDiag : Vec3;
+			var viewProj : Mat4;
 			var inverseViewProj : Mat4;
+			var zNear : Float;
+			var zFar : Float;
+			@var var dir : Vec3;
 		};
 		@global var global : {
 			var time : Float;