This commit is contained in:
Ed
2025-09-16 14:49:07 +03:00
2 changed files with 37 additions and 17 deletions

View File

@@ -40,36 +40,56 @@ public sealed partial class CP14ElfTonedSkinColoration : ISkinColorationStrategy
return ValidElfSkinTone;
}
public Color FromUnary(float t)
public Color FromUnary(float color)
{
var tone = Math.Clamp(t, 0f, 100f);
var tone = Math.Clamp(color, 0f, 100f);
var startSat = 5f;
var startVal = 100f;
if (color < 50f) //Human toned Elf
{
var rangeOffset = tone - 20f;
var endSat = 30f;
var endVal = 25f;
var hue = 25f;
var sat = 20f;
var val = 100f;
var hue = 260f;
var sat = MathHelper.Lerp(startSat, endSat, tone / 100f);
var val = MathHelper.Lerp(startVal, endVal, tone / 100f);
if (rangeOffset <= 0)
{
hue += Math.Abs(rangeOffset);
}
else
{
sat += rangeOffset;
val -= rangeOffset;
}
return Color.FromHsv(new Vector4(hue / 360f, sat / 100f, val / 100f, 1.0f));
return Color.FromHsv(new Vector4(hue / 360f, sat / 100f, val / 100f, 1.0f));
}
else //Dark elf
{
var startSat = 5f;
var startVal = 100f;
var endSat = 30f;
var endVal = 25f;
var hue = 260f;
var sat = MathHelper.Lerp(startSat, endSat, tone / 100f);
var val = MathHelper.Lerp(startVal, endVal, tone / 100f);
return Color.FromHsv(new Vector4(hue / 360f, sat / 100f, val / 100f, 1.0f));
}
}
public float ToUnary(Color color)
{
var hsv = Color.ToHsv(color);
// Вычисляем относительное положение между светлой и тёмной точкой
var hue = hsv.X * 360f;
var sat = hsv.Y * 100f;
var val = hsv.Z * 100f;
// Нормируем по value, потому что основной градиент идёт по яркости
var progressVal = (100f - val) / (100f - 25f);
// Можно слегка учитывать hue/sat, но value остаётся главным драйвером
return Math.Clamp(progressVal * 100f, 0f, 100f);
}
}

View File

@@ -1,7 +1,7 @@
- type: skinColoration
id: CP14TieflingHues
strategy: !type:ClampedHsvColoration
hue: [0.8, 1.05]
hue: [0.6, 1.05]
saturation: [0.15, 0.8]
value: [0.25, 0.55]
@@ -19,6 +19,6 @@
- type: skinColoration
id: CP14CarcatHues
strategy: !type:ClampedHsvColoration
hue: [0.05, 0.55]
saturation: [0.15, 0.8]
value: [0.25, 0.55]
hue: [0.05, 0.10]
saturation: [0.15, 0.35]
value: [0.25, 0.95]