Is Adobe Photoshop one of the big boys mentioned above?
Maybe we should see what it does with colour and check if there is actually a problem with hex codes:
Same hex code, different colorspace. What happens? The same colour value produces different colours depending on the colorspace, and that’s perfectly fine as RGB is a device-dependent model.
However, people usually take hex codes as some sort of “universal” representation for colour, like an “exchange” format, because you know, it’s easier to copy and paste a single value than three.
That conveniency covers some complexity the artists need to be aware of: In which colourspace that colour is defined.
It’s not uncommon to see brand identity manuals with Hex definitions for the corporate colours.
What’s wrong with that?
Those hex are usually taken from Pantone books and are defined as sRGB, while Adobe insists on defaulting to Adobe RGB in some of their color presets.
Guess what happens when you create and AdobeRGB document and use that Hex “corporate” colour.
But let’s move forward and talk about bitdepth precision:
Here I changed both documents to 16 bit integer precision.
Check the colour picker: The RGB sliders are still expressed as 0-255 and the hex code is still 8 bit.
What you see there is one of the big boys doing it completely wrong.
Both the RGB sliders and the hex selector stopped having the required precision to pick the colour values that 16 bit precision allows!
And what about floats? It was said above that you could use floats with hex codes, right?
Well, it looks like Adobe decided to gut the hex values when you flip to 32 bit linear as it was obviously problematic.
They left an 8i RGB slider that sucks but it’s managed, allowing to translate 8 bit nonlinear triplets to 32 bit float automatically. However it’s not clear what colourspace it is using as source for the transform.
And it does matter, since it’s not just matter of “gamma correction”. When you move through different colourspaces you need to take in considaration not only the transfer function, but the primaries and white point of source and destination colourspaces.
Because, as you see in the screenshots above, the same triplet used in different colourspaces produces completely different results because, again, RGB is device dependent.
Of course we know that hexadecimal is just a number notation, but calling it a “code”, although technically correct, makes people think that they are getting some sort of unique ID for a colour, because for most of the people it’s data encode in a format they don’t understand (that’s why Troy says it’s obfuscated, and for most of the folks it is).
Having all simplified as a single value seems convenient, but it creates a whole set of problems that most of the users struggle with. Blender’s hardcoded transform from sRGB to linear rec.709, labeled as just “gamma corrected” is an oversimplification that in the end harms users.
Don’t believe me? Create a new image in the AdobeRGB, pick a colour and copy the hex code. Take that code to Blender, and see what happens with your colour.
Using RGB keeps visible the concept of dialing the intensity of three lights, which is exactly what a colour picked does. And luckily having that metaphor in front of you, you may ask the next important question: which colour are these red, green and blue lights?