Prechádzať zdrojové kódy

DecalPBR: support modifying alpha in applied shaders

trethaller 4 rokov pred
rodič
commit
b3d37a49f2
1 zmenil súbory, kde vykonal 6 pridanie a 13 odobranie
  1. 6 13
      h3d/shader/pbr/VolumeDecal.hx

+ 6 - 13
h3d/shader/pbr/VolumeDecal.hx

@@ -125,6 +125,7 @@ class DecalPBR extends hxsl.Shader {
 		var pixelTransformedPosition : Vec3;
 		var projectedPosition : Vec4;
 		var pixelColor : Vec4;
+		var fadeFactor : Float;
 
 
 		function __init__vertex() {
@@ -133,7 +134,10 @@ class DecalPBR extends hxsl.Shader {
 		}
 
 		function __init__fragment() {
-
+			output.albedoStrength = USE_ALBEDO ? albedoStrength * pixelColor.a * fadeFactor : 0.0;
+			output.normalStrength = USE_NORMAL ? normalStrength * pixelColor.a * fadeFactor : 0.0;
+			output.pbrStrength = pbrStrength * pixelColor.a * fadeFactor;
+			output.emissiveStrength = emissiveStrength * pixelColor.a * fadeFactor;
 		}
 
 		function getWorlPos( pos : Vec2 ) : Vec3{
@@ -155,11 +159,10 @@ class DecalPBR extends hxsl.Shader {
 			var depth = depthMap.get(screenToUv(screenPos));
 			var ruv = vec4( screenPos, depth, 1 );
 			var wpos = ruv * matrix;
-			var alpha = 1.0;
 
 			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);
+			fadeFactor = 1 - clamp( pow( max( 0.0, abs(localPos.z * 2) - fadeStart) / (fadeEnd - fadeStart), fadePower), 0, 1);
 
 			if( CENTERED )
 				calculatedUV += 0.5;
@@ -167,13 +170,9 @@ class DecalPBR extends hxsl.Shader {
 			if(	outsideBounds(localPos) )
 				discard;
 
-			var albedoSt = 0.;
-			var normalSt = 0.;
 			if( USE_ALBEDO ) {
 				var albedo = albedoTexture.get(calculatedUV);
 				pixelColor *= albedo;
-				alpha = pixelColor.a;
-				albedoSt = albedoStrength;
 			}
 
 			if( USE_NORMAL ) {
@@ -188,13 +187,7 @@ class DecalPBR extends hxsl.Shader {
 				var tanX = worldTangent.xyz.normalize();
 				var tanY = n.cross(tanX) * -1;
 				transformedNormal = (nf.x * tanX + nf.y * tanY + nf.z * n).normalize();
-				normalSt = normalStrength;
 			}
-
-			output.albedoStrength = albedoSt * alpha * fadeFactor;
-			output.normalStrength = normalSt * alpha * fadeFactor;
-			output.pbrStrength = pbrStrength * alpha * fadeFactor;
-			output.emissiveStrength = emissiveStrength * alpha * fadeFactor;
 		}
 	};