Files
com.misaki.art-tools/Runtime/Cloner/Helper/FieldHelper.cs
Misaki 4a15d63447 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.
2024-09-18 19:49:32 +09:00

57 lines
1.6 KiB
C#

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;
}
}
}