a-ng-d / figma-ui-color-palette

UI Color Palette is a Figma and FigJam plugin that creates, manages, deploys, and publishes consistent and accessible color palettes.
https://www.ui-color-palette.com
MIT License
30 stars 3 forks source link

Inconsistent lightness #46

Closed MrFussyfont closed 1 year ago

MrFussyfont commented 1 year ago

My main interest in this plugin is to generate a palette with consistent perceived lightness and therefore consistent contrast ratios regardless of hue. However, some generated colours are darker than others, which was unexpected:

image

Using the Sim Daltonism app to view as monochrome, you can see that the greens are darker than the other colours.

a-ng-d commented 1 year ago

Hello @MrFussyfont, Thanks for reporting this issue. Globally, some shades might be forced to be within the sRBG gamut (one the limit of the LCH color model), giving a lag between colors. Can I get your starting colors (and your lightness scale configuration) in order to test on my side?

MrFussyfont commented 1 year ago

Lightness is pretty close to 10 to 100 in steps of 10:

image

Starting colors: 064D58, 4D555B, 119029, 005A7A (and more, but these are enough to see the problem)

MrFussyfont commented 1 year ago

I see what you mean about LCH colors outside sRGB. I also noticed a bigger difference when Figma's color space is set to "Unmanaged" vs. sRGB. The screenshot I posted yesterday was taken with the "Unmanaged" setting.

I've been trying several different color tools. I'll do some more comparison with others to see how they are generating more consistent lightness. I suspect they are keeping lightness consistent at the expense of chroma and/or hue.

a-ng-d commented 1 year ago

Thanks both for sharing your configuration with and your observation 👍 I'm gonna investigate.

MrFussyfont commented 1 year ago

Using the same source color #2C7B84 in Leonardo, and distributing lightness equally (using the "Distribute" dropdown after changing min/max lightness to 25/95), I get this:

image

In the "Use" tab I can output CSS in LCH format:

--Teal100: lch(95%, 3, 210deg); --Teal200: lch(86%, 8, 207deg); --Teal300: lch(78%, 12, 209deg); --Teal400: lch(69%, 16, 208deg); --Teal500: lch(60%, 20, 209deg); --Teal600: lch(51%, 23, 209deg); --Teal700: lch(42%, 22, 210deg); --Teal800: lch(33%, 18, 211deg); --Teal900: lch(25%, 15, 208deg);

So it's definitely adjusting chroma and hue. I guess this issue and the other one I posted about saturation are strongly related: if you can find a good formula to adjust chroma and hue, you can get a more consistent and pleasing palette?

MrFussyfont commented 1 year ago

Here's a clue: on the "Chromacity" tab, it gives you the model and formulas(?):

image
MrFussyfont commented 1 year ago

Similar results in Supa Palette plugin (7-day free trial):

image
a-ng-d commented 1 year ago

Nice tips! It may help improve a lot the shades generation algorithm!

a-ng-d commented 1 year ago

Hello @MrFussyfont, I wanna show you a first audit about the palette generation (I have used your configuration). You can take a glance at this report. The next step is to improve the algorithm through its generation.

MrFussyfont commented 1 year ago

@inVoltag Thank you, but I'm not sure what I'm looking at in your report. Are these just the numbers from my colours using the existing algorithm? What are the "consolidation" graphs?

a-ng-d commented 1 year ago

@MrFussyfont That is a detailed report about your palette generated with the current algorithm. You can both observe Chroma and Hue progression through the lightness configuration. The consolidation charts aggregate each values of Lightness, Chroma and Hue from the source colors. The purpose is to both make a comparison and watch the progression. I noticed the Chroma is not regular nor close to 0 at the limits. Chroma must be closed to the center of the wheel at the top and bottom of the cylinder. So, I'm working on improving the Chroma direction. I got to "bend" its curve, so both of the Hue and Lightness are smoother. Here is a Figma document to watch the result. Feel free to give me your feedback.

MrFussyfont commented 1 year ago

@inVoltag That's very interesting, thank you! The improved algorithm definitely produces more consistency in the lightness, though not as consistent as Leonardo. Comparing through a monochrome filter (Leonardo palette below yours):

image

I would need to spend a lot more time to really understand the complexity (so forgive me if I'm asking too much of a free plugin!), but I guess the ideal would be something like sliders to control the amount of lightness "correction" and/or the chroma and hue curves/adjustments.

I don't know if I mentioned Primer Prism, but it takes this idea to an extreme where you can adjust the curves manually and then optionally apply them to all colors in the palette! See https://primer.style/prism/

a-ng-d commented 1 year ago

Hi @MrFussyfont, We are closer than before. There is still some improvements to bring more consistency. Nevertheless, I reached my limit in algorithm because I tried several formulas in vain. That's because the chroma curve must follow the sRGB gamut shape according to the hue value. So the complexity is proven and it needs more research to get closer to the following image: image

The current improvement is a first step and you may keep contributing to find together the golden formula.

a-ng-d commented 1 year ago

Thanks for sharing Prism, it is a good inspiration for a next evolution to adjust the chroma.

MrFussyfont commented 1 year ago

Colour is hard. Thanks for your efforts!

a-ng-d commented 1 year ago

The version 20 has been released. I suggest you to enable the algorithm in settings because this difference can be noticed (could be annoying for others users). You can test now then give me your feedback.

MrFussyfont commented 1 year ago

Thanks, looks good! I like having the option to switch the algorithm. Although the lightness is not as consistent as I would like, I'll mark this as resolved.