Added first image to start SDF and fixed blending

This commit is contained in:
mm00
2025-04-01 19:49:39 +02:00
parent 8173327c79
commit 1bdead0750

View File

@@ -48,6 +48,21 @@ public class Program {
Environment.Exit(1); Environment.Exit(1);
} }
for (int i = 1; i < Images.Count; i++)
{
for (int x = 0; x < Images[i].Width; x++)
{
for (int y = 0; y < Images[i].Height; y++)
{
Images[i].Pixels[x, y].X = MathF.Min(Images[i - 1].Pixels[x, y].X + Images[i].Pixels[x, y].X, MAX);
Images[i].Pixels[x, y].Y = MathF.Min(Images[i - 1].Pixels[x, y].Y + Images[i].Pixels[x, y].X, MAX);
Images[i].Pixels[x, y].Z = MathF.Min(Images[i - 1].Pixels[x, y].Z + Images[i].Pixels[x, y].X, MAX);
}
}
Images[i].Pixels.SaveImage($"./Sum{i}.png");
}
Console.WriteLine("Creating masks..."); Console.WriteLine("Creating masks...");
//for each image pair, create a mask //for each image pair, create a mask
var width = (uint)Images[0].Width; var width = (uint)Images[0].Width;
@@ -89,14 +104,20 @@ public class Program {
var finalImage = new Vector3[width, height]; var finalImage = new Vector3[width, height];
var currStep = 0f; var currStep = 0f;
var stepIncrement = MAX / (Gradients.Count); var stepIncrement = MAX / (Gradients.Count);
for(int x=0; x<width; x++)
for (int y = 0; y < height; y++)
finalImage[x, y] = new Vector3(Images[0].Pixels[x, y].X);
for (var i = 0; i < Gradients.Count; i++) { for (var i = 0; i < Gradients.Count; i++) {
var mask = ImageMasks[i + 1]; var mask = ImageMasks[i + 1];
var gradient = Gradients[i]; var gradient = Gradients[i];
Console.WriteLine($"Applying gradient {i}..., {currStep} -> {currStep + stepIncrement}"); Console.WriteLine($"Applying gradient {i}..., {currStep} -> {currStep + stepIncrement}");
for (var x = 0; x < mask.Mask.GetLength(0); x++) { for (var x = 0; x < mask.Mask.GetLength(0); x++) {
for (var y = 0; y < mask.Mask.GetLength(1); y++) { for (var y = 0; y < mask.Mask.GetLength(1); y++) {
if (mask.Mask[x, y].X == 0) continue; if(gradient[x, y].X == 0) continue;
finalImage[x, y] = new(Remap(gradient[x, y].X, MAX, MIN, currStep, currStep + stepIncrement)); var pixel = new Vector3(Remap(gradient[x, y].X, MIN, MAX, 1.0f-currStep, 1.0f-(currStep + stepIncrement)));
if(pixel.X > finalImage[x, y].X) finalImage[x, y] = pixel;
} }
} }
currStep += stepIncrement; currStep += stepIncrement;
@@ -251,7 +272,7 @@ public class Program {
uint y = (uint)(i / resX); uint y = (uint)(i / resX);
var pixelA = A[x, y]; var pixelA = A[x, y];
float lumaA = (pixelA.X + pixelA.Y + pixelA.Z) / 3; float lumaA = (pixelA.X + pixelA.Y + pixelA.Z) / 3;
float resultPixel = lumaA > 0 ? MAX : MIN; float resultPixel = lumaA > 0.99 ? MAX : MIN;
temp[x, y] = new(resultPixel, 0, 0); temp[x, y] = new(resultPixel, 0, 0);
}); });
return temp; return temp;