Hacker News new | ask | show | jobs
by iFreilicht 1913 days ago
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.

1 comments

Thank you, it doesn't sound negative at all, in fact you raise interesting points!

the "obviousness" of the connections is tricky. The blending is in the linear RGB space. I initially tried sRGB but it was terrible. I'm not sure how to improve it. At the moment the interpolation is done through the varyings between the vertex and fragment shader. This is quite limiting.

About the lack of deliberate choice, in theory you can reach any rgb color. In practice this is limited by the initial colors I chose (they are smoother than pure RGB-CMY). I'm not sure how much of the RGB space I'm missing.

For the antialiasing issue I'll look into it. I'm not sure I correctly set the AA in webgl. Could also be due to some issue with the size of the canvas

Thank you again!

Interpolate in a perceptual space such as Oklab?

Possibly use a radial basis function for interpolation rather than triangles? I don't have JavaScript code handy but rbf-interp[1] is Rust code that could either be adapted or called from wasm.

[1]: https://crates.io/crates/rbf-interp

The triangles-based interpolation is indeed problematic. It has the advantage to be fast and super easy to implement in webgl with an arbitrary number of points. I don't understand everything yet about the rbf interpolation but it looks very interesting, I'll look into it.

A better color space can also help with some issues (in the demo the darker colors are harder to reach when blending with the black point than lighter colors are when the white point is involved) but how I understand it the colors in a triangle are influenced by the colors and shapes of the surrounding triangles, whatever the color space.

I must say that I'm very happy to have had your input on this. I'm a big fan of your work and your blog is a real treasure!

Thank you!

This! Interpolating in linear RGB space is the biggest issue, I'm sure it will improve a lot simply by using a more suitable colorspace. Triangles might not be noticable at all then, except in extreme cases (which are undesirable anyways).
I'll try a different color space, for sure, but I think the interpolation method is the real culprit. I have the feeling that in a configuration like this:

  A-B
  |/|
  C-D
the position of D could have an impact on how ABC is rendered.

But I'll try another color space first, it should be easier to implement.