diff options
| author | yum <yum.food.vr@gmail.com> | 2026-01-15 00:02:57 -0800 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2026-01-15 00:02:57 -0800 |
| commit | 2e99a2275ce3d0d9eef7892cf7485a5f278cacb4 (patch) | |
| tree | a416e6dead11fab97d87bd9d0a8cef7c4d8d4480 /impostor.cginc | |
| parent | d01a5d14765cb106327f805c642bc150f5414b3f (diff) | |
Impostors: dilate baked textures
Diffstat (limited to 'impostor.cginc')
| -rw-r--r-- | impostor.cginc | 9 |
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; } |
