Bläddra i källkod

Update decals

ShiroSmith 5 år sedan
förälder
incheckning
8b60f33bbc
2 ändrade filer med 10 tillägg och 36 borttagningar
  1. 3 0
      h3d/scene/pbr/Renderer.hx
  2. 7 36
      h3d/shader/pbr/VolumeDecal.hx

+ 3 - 0
h3d/scene/pbr/Renderer.hx

@@ -134,6 +134,8 @@ class Renderer extends h3d.scene.Renderer {
 			return defaultPass;
 		case "alpha", "additive":
 			return output;
+		case "decal":
+			return decalsOutput;
 		}
 		return super.getPassByName(name);
 	}
@@ -346,6 +348,7 @@ class Renderer extends h3d.scene.Renderer {
 
 		mark("Decal");
 		setTargets([albedo,normal,pbr]);
+		renderPass(decalsOutput, get("terrainBlend"));
 		renderPass(decalsOutput, get("decal"));
 
 		if(renderMode == Default) {

+ 7 - 36
h3d/shader/pbr/VolumeDecal.hx

@@ -4,23 +4,13 @@ class DecalOverlay extends hxsl.Shader {
 	static var SRC = {
 
 		@global var global : {
-			var time : Float;
 			var pixelSize : Vec2;
 			@perObject var modelView : Mat4;
 			@perObject var modelViewInverse : Mat4;
 		};
 
 		@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;
 		};
 
 		var output : {
@@ -33,7 +23,6 @@ class DecalOverlay extends hxsl.Shader {
 
 		@global var depthMap : Channel;
 
-		@param var maxAngle : Float;
 		@param var fadePower : Float;
 		@param var fadeStart : Float;
 		@param var fadeEnd : Float;
@@ -92,23 +81,13 @@ class DecalPBR extends hxsl.Shader {
 	static var SRC = {
 
 		@global var global : {
-			var time : Float;
 			var pixelSize : Vec2;
 			@perObject var modelView : Mat4;
 			@perObject var modelViewInverse : Mat4;
 		};
 
 		@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;
 		};
 
 		var output : {
@@ -136,9 +115,6 @@ class DecalPBR extends hxsl.Shader {
 		@param var normal : Vec3;
 		@param var tangent : Vec3;
 
-		@param var minBound : Vec3;
-		@param var maxBound : Vec3;
-		@param var maxAngle : Float;
 		@param var fadePower : Float;
 		@param var fadeStart : Float;
 		@param var fadeEnd : Float;
@@ -153,10 +129,7 @@ class DecalPBR extends hxsl.Shader {
 		var pixelTransformedPosition : Vec3;
 		var projectedPosition : Vec4;
 		var pixelColor : Vec4;
-		var prbValues : Vec4;
-		var strength : Vec4;
-		var localPos : Vec3;
-		var alpha : Float;
+
 
 		function __init__vertex() {
 			transformedNormal = (normal * global.modelView.mat3()).normalize();
@@ -175,7 +148,7 @@ class DecalPBR extends hxsl.Shader {
 			return result;
 		}
 
-		function outsideBounds() : Bool {
+		function outsideBounds( localPos : Vec3 ) : Bool {
 			return ( localPos.x > 0.5 || localPos.x < -0.5 || localPos.y > 0.5 || localPos.y < -0.5 || localPos.z > 0.5 || localPos.z < -0.5 );
 		}
 
@@ -186,22 +159,20 @@ class DecalPBR extends hxsl.Shader {
 			var depth = depthMap.get(screenToUv(screenPos));
 			var ruv = vec4( screenPos, depth, 1 );
 			var wpos = ruv * matrix;
-			var ppos = ruv * camera.inverseViewProj;
-			alpha = 1.0;
+			var alpha = 1.0;
 
-			pixelTransformedPosition = ppos.xyz / ppos.w;
-			localPos = (wpos.xyz / wpos.w);
+			var localPos = (wpos.xyz / wpos.w);
 			calculatedUV = localPos.xy;
 			var fadeFactor = 1 - clamp( pow( max( 0.0, abs(localPos.z * 2) - fadeStart) / (fadeEnd - fadeStart), fadePower), 0, 1);
 
 			if( CENTERED )
 				calculatedUV += 0.5;
 
-			if(	outsideBounds() )
+			if(	outsideBounds(localPos) )
 				discard;
 
-			strength = vec4(0,0,0,0);
-			prbValues = vec4(0,0,0,0);
+			var strength = vec4(0,0,0,0);
+			var prbValues = vec4(0,0,0,0);
 
 			if( USE_ALBEDO ) {
 				var albedo = albedoTexture.get(calculatedUV);