Fix error amd Update features.

Changed Span<PointData> to ReadOnlySpan<PointData> on method Operate in EffectorBase.cs
Changed the return type of method Operate in EffectorBase.cs from void to PointDate
Added FieldHelper and BlendField function to make the blending work.
This commit is contained in:
Misaki
2024-09-18 19:49:32 +09:00
parent 0ae44d6139
commit 4a15d63447
10 changed files with 97 additions and 47 deletions

View File

@@ -0,0 +1,56 @@
using Unity.Mathematics;
namespace Misaki.ArtTool
{
internal class FieldHelper
{
public static float BlendField(float a, float b, float t, BlendingMode blendingMode)
{
var result = 0.0f;
switch (blendingMode)
{
case BlendingMode.Normal:
result = math.lerp(a, b, t);
break;
case BlendingMode.Min:
result = math.lerp(a, math.min(a, b), t);
break;
case BlendingMode.Subtract:
result = math.lerp(a, a - b, t);
break;
case BlendingMode.Multiply:
result = math.lerp(a, a * b, t);
break;
case BlendingMode.Overlay:
var o1 = 1.0f - 2.0f * (1.0f - a) * (1.0f - b);
var o2 = 2.0f * a * b;
var zeroOrOne = math.step(a, 0.5f);
result = o2 * zeroOrOne + (1.0f - zeroOrOne) * o1;
result = math.lerp(a, result, t);
break;
case BlendingMode.Max:
result = math.lerp(a, math.max(a, b), t);
break;
case BlendingMode.Add:
result = math.lerp(a, a + b, t);
break;
case BlendingMode.Screen:
result = 1.0f - (1.0f - b) * (1.0f - a);
result = math.lerp(a, result, t);
break;
default:
break;
}
return result;
}
}
}