public float3(float x, float y, float z)
public float4(float x, float y, float z, float w)
static float clamp(float val, float min, float max)
if(val < min) return min;
if(val > max) return max;
static float max(float a, float b)
static float ceil(float a)
return (float)Math.Ceiling(a);
static float round(float a)
return (float)Math.Round(a);
static int GetColorId(float4 maskColor)
float3 clampedColor = new float3(clamp(maskColor.r - 0.25f, 0.0f, 1.0f), clamp(maskColor.g, 0.0f, 1.0f), clamp(maskColor.b, 0.0f, 1.0f));
float val = max(clampedColor.r, max(clampedColor.g, clampedColor.b));
float axisIndex = ceil(clampedColor.r) + ceil(clampedColor.b) * 2.0f;
return (int)clamp(round(ceil(axisIndex * 4.0f) + ceil(val * 4.0f)), 0, 11);
public static void Main()
Console.WriteLine("4 : " + GetColorId(new float4(0.2f, 0.0f, 0f, 0f)));
Console.WriteLine("5 : " + GetColorId(new float4(0.4f, 0.0f, 0f, 0f)));
Console.WriteLine("6 : " + GetColorId(new float4(0.6f, 0.0f, 0f, 0f)));
Console.WriteLine("7 : " + GetColorId(new float4(0.8f, 0.0f, 0f, 0f)));
Console.WriteLine("0 : " + GetColorId(new float4(0.0f, 0.2f, 0f, 0f)));
Console.WriteLine("1 : " + GetColorId(new float4(0.0f, 0.4f, 0f, 0f)));
Console.WriteLine("2 : " + GetColorId(new float4(0.0f, 0.6f, 0f, 0f)));
Console.WriteLine("3 : " + GetColorId(new float4(0.0f, 0.8f, 0f, 0f)));
Console.WriteLine("8 : " + GetColorId(new float4(0.0f, 0.0f, 0.2f, 0f)));
Console.WriteLine("9 : " + GetColorId(new float4(0.0f, 0.0f, 0.4f, 0f)));
Console.WriteLine("10 : " + GetColorId(new float4(0.0f, 0.0f, 0.6f, 0f)));
Console.WriteLine("11 : " + GetColorId(new float4(0.0f, 0.0f, 0.8f, 0f)));