[GEM-dev] Why is [hsv2rgb] implemented as an abstraction?
Mathieu Bouchard
matju at artengine.ca
Tue Dec 11 19:47:25 CET 2007
On Tue, 11 Dec 2007, Chris McCormick wrote:
> As the resident abstractions-over-externals obsessive, I feel I should
> put forward an argument to the contrary, just for good measure.
> Basically it goes like this: CPU is getting cheaper, but programmer time
> is getting more expensive (or put a different way; i'd rather make the
> computer do work than myself do work).
The code for this is many years old and is small. The task to do does not
change and the exact formulas are set. This is not the context in which
one thinks about "programmer time getting more expensive".
> My implication is that editing an abstraction is easier than editing &
> compiling an external, which could well be wrong, but there it is.
But why would you need to edit it?
But back to a more basic question: why do you want to use HSV ? it's that
kind of weird hexagonal-pyramidal colourspace and that's one of the
reasons why it's slower to process: you need to compute several "if" to
get any value converted, and on modern processors, "if" is harder to
optimise than anything else. But those same "if"s have other consequences:
it makes the conversion formula bigger and somewhat harder to combine with
other formulas. It's definitely not linear and not super close to any
linear system.
if you do a polar transform on YUV, you have something easier, faster and
more correct all at once. I usually just skip the polar transform: if you
apply rotations directly on YUV values, you can make very believable hue
shifts.
HSV is dubious in part because the apparent brightness at maximum
so-called value is very variable and seems to peak high or low at
secondaries or primaries: compare yellow (brightness 89%) and blue
(brightness 11%). this really makes HSV suck sometimes. YUV does not have
this problem.
_ _ __ ___ _____ ________ _____________ _____________________ ...
| Mathieu Bouchard - tél:+1.514.383.3801, Montréal QC Canada
More information about the GEM-dev
mailing list