summaryrefslogtreecommitdiffstats
path: root/impostor.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2026-01-15 00:02:57 -0800
committeryum <yum.food.vr@gmail.com>2026-01-15 00:02:57 -0800
commit2e99a2275ce3d0d9eef7892cf7485a5f278cacb4 (patch)
treea416e6dead11fab97d87bd9d0a8cef7c4d8d4480 /impostor.cginc
parentd01a5d14765cb106327f805c642bc150f5414b3f (diff)
Impostors: dilate baked textures
Diffstat (limited to 'impostor.cginc')
-rw-r--r--impostor.cginc9
1 files changed, 7 insertions, 2 deletions
diff --git a/impostor.cginc b/impostor.cginc
index f271612..1623681 100644
--- a/impostor.cginc
+++ b/impostor.cginc
@@ -105,8 +105,13 @@ ImpostorSample SampleImpostorCell(float2 cell, float3 frameDir, float3 pivotToCa
ImpostorSample BlendImpostorSamples(ImpostorSample s00, ImpostorSample s01, ImpostorSample s10, ImpostorSample s11, float4 bw) {
ImpostorSample result;
result.albedo = s00.albedo * bw.x + s01.albedo * bw.y + s10.albedo * bw.z + s11.albedo * bw.w;
- result.normal = s00.normal * bw.x + s01.normal * bw.y + s10.normal * bw.z + s11.normal * bw.w;
- result.metallicGloss = s00.metallicGloss * bw.x + s01.metallicGloss * bw.y + s10.metallicGloss * bw.z + s11.metallicGloss * bw.w;
+
+ // Weight normal/metallicGloss by alpha to avoid blending with transparent (zero) pixels
+ float4 alphaBw = float4(s00.albedo.a, s01.albedo.a, s10.albedo.a, s11.albedo.a) * bw;
+ alphaBw /= max(dot(alphaBw, 1), 0.001);
+
+ result.normal = s00.normal * alphaBw.x + s01.normal * alphaBw.y + s10.normal * alphaBw.z + s11.normal * alphaBw.w;
+ result.metallicGloss = s00.metallicGloss * alphaBw.x + s01.metallicGloss * alphaBw.y + s10.metallicGloss * alphaBw.z + s11.metallicGloss * alphaBw.w;
return result;
}