I wanted to create an elegant and unusual color selector interface that was still easy to learn and fun to use.
A feature I like is that every color you create is kept on the palette so you can build new colors upon previous ones. It's also kind of a natural way to create a history of the colors you used.
Colors that are removed from the palette are kept on the side so you can temporarily reduce the complexity of the palette.
For the technical side, it is made with regular js/html/css and webgl, no framework is required. It is supposed to work on touch devices as well as desktop computers.
This is still a bit experimental so I'd be very happy to have some feedback. Thank you!
I think it needs some work to make it "learnable". It wasn't obvious to me whether the colours on the side were the final palette, or the "trash can".
It might be nice to have a way to see multiple colours together in a "demo". At the moment you just see one colour as the background.
Lastly I'm not sure that dragging to the side is very intuitive as a way of removing the colour. It mixes two things up - moving the colour to adjust the palette, and getting rid of it. Maybe the user could double-click instead.
All that said, I thought this was great and really fun and intuitive.
I really like this idea! It's quite fun to play around with, but it feels like there's not a lot of deliberate choice I can make. It also just works really well and is super smooth. One thing that could be improved about rendering are the edges of the polygon. They look very washed out, even on my 14" UHD display. A little bit like a very low-quality AA was used.
What's a little annoying is that colours jump around when I move anchors closer or farther away from each other, but I guess there's no good solution for that.
Also, it would be nice if the connections between the anchors were less obvious. Right now, they're very clearly visible straight lines. Not sure how that could be solved, though, either.
What colour space are you using for all the transitions?
That sounded quite negative, but I really like what you've done here, it's a very creative approach to an otherwise technical topic.
You mentioned not wanting to package it for frameworks, and mentioned Svelte. I just want to point out that Svelte has native support for vanilla JavaScript and html, so this will work out of the box like any other JS library. Just want to let you know since your README suggests otherwise!
So it looks like you're first applying Delauny triangulation to the color points, and then apply linear interpolation along the created triangles using Barycentric coordinates? Did I get that right? Pretty elegant solution (not to mention all the other little details that went into designing the interface).
edit: wait, if I'm placing a outside the existing shape it's projected to the closest line and linearly interpolates on it? Nice, this is really thought through!
The colors still looks a bit strange along the triangle edges sometimes, and glancing at the source code it seems like you're mixing in linear RGB[0] so it's not that. I guess that just means that I'm looking at a saddle point in the color space?
(this made me wonder how smoothing functions would work for triangle meshes (that aren't secretly quads split into two triangles), and a quick search suggests that could be quite a deep rabbit hole to fall into)
This is indeed Delaunay triangulation, barycentric coordinates, linear RGB and projections on the edges for the points outside of the mesh. You got everything right!
Having a nice blending along the edges doesn't seem straightforward. I have a few options in mind but nothing obviously right (working with a voronoi diagram instead of a delaunay one, bezier interpolation)
It would be great if you could implement subtractive colors (like real pigment mixing > yellow + blue = green).
Digital "pigment" mixing is very rare to find on the web.
In fact I did a bit of research after I started working on this and it turns out Adobe did exactly what you're describing: https://research.adobe.com/publication/playful-palette-an-in... (the "learn more" button links to a detailed pdf with pictures of the interface)
This is one of my favourite things I've seen here in a long time. This is a very creative approach to a UI component that hasn't changed much in decades. I love it!
one of the most innovative and beautiful things I've seen in a while. my only complaint are the lines between the points already mentioned by others. I don't know much about color though so I can't help you here. otherwise, great job.
[+] [-] grgrdvrt|5 years ago|reply
A feature I like is that every color you create is kept on the palette so you can build new colors upon previous ones. It's also kind of a natural way to create a history of the colors you used. Colors that are removed from the palette are kept on the side so you can temporarily reduce the complexity of the palette.
For the technical side, it is made with regular js/html/css and webgl, no framework is required. It is supposed to work on touch devices as well as desktop computers.
This is still a bit experimental so I'd be very happy to have some feedback. Thank you!
[+] [-] dash2|5 years ago|reply
I think it needs some work to make it "learnable". It wasn't obvious to me whether the colours on the side were the final palette, or the "trash can".
It might be nice to have a way to see multiple colours together in a "demo". At the moment you just see one colour as the background.
Lastly I'm not sure that dragging to the side is very intuitive as a way of removing the colour. It mixes two things up - moving the colour to adjust the palette, and getting rid of it. Maybe the user could double-click instead.
All that said, I thought this was great and really fun and intuitive.
[+] [-] iFreilicht|5 years ago|reply
What's a little annoying is that colours jump around when I move anchors closer or farther away from each other, but I guess there's no good solution for that.
Also, it would be nice if the connections between the anchors were less obvious. Right now, they're very clearly visible straight lines. Not sure how that could be solved, though, either.
What colour space are you using for all the transitions?
That sounded quite negative, but I really like what you've done here, it's a very creative approach to an otherwise technical topic.
[+] [-] FractalHQ|5 years ago|reply
Anyways, awesome work :)
[+] [-] vanderZwan|5 years ago|reply
So it looks like you're first applying Delauny triangulation to the color points, and then apply linear interpolation along the created triangles using Barycentric coordinates? Did I get that right? Pretty elegant solution (not to mention all the other little details that went into designing the interface).
edit: wait, if I'm placing a outside the existing shape it's projected to the closest line and linearly interpolates on it? Nice, this is really thought through!
The colors still looks a bit strange along the triangle edges sometimes, and glancing at the source code it seems like you're mixing in linear RGB[0] so it's not that. I guess that just means that I'm looking at a saddle point in the color space?
(this made me wonder how smoothing functions would work for triangle meshes (that aren't secretly quads split into two triangles), and a quick search suggests that could be quite a deep rabbit hole to fall into)
[0] https://github.com/grgrdvrt/poulette/blob/main/src/utils/col...
[+] [-] grgrdvrt|5 years ago|reply
This is indeed Delaunay triangulation, barycentric coordinates, linear RGB and projections on the edges for the points outside of the mesh. You got everything right!
Having a nice blending along the edges doesn't seem straightforward. I have a few options in mind but nothing obviously right (working with a voronoi diagram instead of a delaunay one, bezier interpolation)
[+] [-] tartoran|5 years ago|reply
[+] [-] tartoran|5 years ago|reply
https://www.grgrdvrt.com/works/
[+] [-] elhenrico|5 years ago|reply
[+] [-] grgrdvrt|5 years ago|reply
[+] [-] globular-toast|5 years ago|reply
[+] [-] grgrdvrt|5 years ago|reply
[+] [-] JeremyBanks|5 years ago|reply
[+] [-] NotAnOtter|5 years ago|reply
[+] [-] micouay|5 years ago|reply
[+] [-] kaibee|5 years ago|reply
[+] [-] grgrdvrt|5 years ago|reply
Are you thinking about constraints for the positions or for the colors?