5K iMac Gets 10-Bit Color
cinema5d.com
cinema5d.com
My post guys wanted to stay on the Mac platform, so we dealt with 8-bit displays (color wasn't a huge part of our workflow -- but 10 bit would've been nice). But it was one of those head-smacking moments for a platform that was supposedly media-friendly.
Note, there's some confusion in the comments so far -- 10 bit is a professional display, and is extremely uncommon. Pro cameras and software can usually handle higher bit depths -- 16 for DSLRs, 10-12+ for pro video cameras -- but you're probably not seeing it unless you've carefully set up your computer. Those bits are still useful: they're the raw material for generating your 8-bit final image, so you don't get banding when adjusting color or exposure. And they're essential for containing a wider range of possible values, letting pro cameras represent a wider dynamic range than is possible in 8 bit systems.
And 8 bits is more typical -- it's literally baked into many file formats, like JPEG. Some crappy screens on consumer electronics can't even represent the full 8 bits per channel; 6 bits + dithering is sadly really common, even in screens that advertise themselves as 8/24-bit. Also, color depth can be reported both in bits-per-channel and total bit depth; a 10 bit-per-channel display is 30 bits of color information per RGB pixel, 10 each for red, green, and blue.
(Some of the confusion is probably intentional; I had a hardware partner brag about their '15 bit display,' which sounded very weird to me... until I realized it was really 5 bits per channel, which is roughly bad-ATM-screen quality.)
My impression was that only a few niche applications have bothered (notably, Photoshop has had support for a few years), since 10-bit displays are so rare/expensive, but I’m not an expert.
As for Linux, as far as I know the stable version of GIMP still only supports 8 bits/channel color, so displaying at higher bit depth is right out. I guess maybe some specialized video or 3d rendering software could use a 10-bit display? I doubt typical Linux apps support it.
* * *
Edit: In doing some web sleuthing, there seem to be endless issues with compatibility. (As you’d expect from a new technology that requires upgrading every part of the pipeline for support: applications, operating system, video card drivers, video cards, display interface, and the displays themselves)
I see this on a random web forum: “I got an answer from an engineer at Adobe, why Photoshop CC cannot display 10bit/color under Windows 8, 8.1 and 10: There is no OpenGL-path with 10bit/channel like in Windows 7 any more :(”
Adobe’s troubleshooting site says “Note: 30-bit display is not functioning correctly with current drivers. We are working to address this issue as soon as possible”
Can you find an example of someone talking about using 10 bits/channel color displays on Linux in practice, and having it behave properly? What kind of work are they using it for? (Maybe my google-fu is deficient, but all I can find are people complaining about compatibility problems and Nvidia marketing materials.)
Baselight is another major platform for color grading that runs on Linux.
Generally it's NVIDIA hardware on Red Hat.
If I had my own startup accelerator, tonight (and only tonight ;-) ) this would be my RFS#1. Solve the knowledge bootstrapping problem. Google clearly failed to link 30-bit to VFX.
So what is around now that I don't want to wait 10 years for?
[1]cslight differences may occur
It's especially important in learning.
How do you organize and present information in a way that finding things most important/natural/easy/interesting to you isn't limited by dissipation of such information through old-fashioned network effects.
Then you need some way for people to find out where they are on that knowledge graph, and a recommendation engine for where to go next. I also think it would be useful to mix in a few random topic nodes that are some number of hops away from a person's current knowledge, plus occasionally a completely random topic of the day.
But that's just the most trivial beginning to an enormous problem.
Internally it processed color in 12 bits per channel and I think it supported 10bit color output.
This was running Linux with NVidia GPUs and was totally amazing to see 4K footage being graded in realtime.
That system is now called Baselight and AFAIK it is one of the best: http://www.filmlight.ltd.uk/products/baselight/overview_bl.p...
Enabling it with a modern NVidia card is dead easy. Basically, in xorg.conf, replace occurrences of 24 with 30. However, not much makes use of the extra colors. Although Qt5 will correctly output 24-bit color in 30-bit mode, Krita is the only Linux application of any kind I found that can actually display additional colors. It's easy to test - show a full screen gradient.
No OpenGL compositors (eg kwin, compiz) support 30-bit color to any extent. Total fail, here. Tearing like it's 1998.
Notably, with Qt5, it does work to make 10-10-10-2 and 10-10-10-0 GL contexts and render to them with your own old-school GL calls, nv_path_drawing, and compat & core profile shaders. However, you do have to manage the GL context yourself - QOpenGLWidget has no 10-bit suppport. You can still use Qt's GL abstractions, just not QOpenGLWidget. Easiest approach is to use QWindow in a widget container (created with that QWidget.createContainersomethingorother static member function), as was commonly done with Qt 5.3 (ie, before QOpenGLWidget).
8 bit? 16 bit? 10 bit? CMYK? YPbPr? XYZ? Krita has them all.
I think Carmack mentioned that in some extreme-but-possible cases, 64-bit isn't enough to represent the results correctly.
This StackExchange post claims ~2.4 million colors for the limit of human color vision; it cites CIE color science: http://photo.stackexchange.com/questions/10208/how-many-colo.... 64 bit per channel color would produce ~2e19 different colors; if it's 64 bits per channel it would produce some even-more absurd number like ~8e57. (Besides the ridiculous numbers, I assume those numbers are per-channel, because it's not divisible by 3.)
And yes, higher bit precision is really important for drawing 3D graphics. Look at the price premium you pay for Nvidia's Quadro cards, which can process in higher bit precision than your stock cards... they're typically 5-10x a consumer card: http://www.nvidia.com/object/quadro.html
Mostly advertised for high end CAD or VFX, where bit precision errors can result in odd display artifacts or incorrect rendering.
Thanks for the SE link. 2.4M can't be right or we wouldn't be able to see banding all over the place right? The link says including luminosity, it might be up to 100M. So 24 bit wouldn't cut it but 30 would?
Even at 10-bit you could in theory see banding if your color discrimination were good enough, I think. It depends on the material... but the 10-bit displays I've seen look awfully, awfully good. (And the ability to represent more dynamic range starts to matter -- you have to have a wide scale to show off the bit depth, too. A monitor I saw at NAB this year has two backlights and can show off a lot more light... campfires glowed, headlights looked like they were bright, very real... that's the real direction for displays, I think.)
p.s. I think this was the format: https://en.wikipedia.org/wiki/Cineon
Let's be very clear here — being able to view 30 bpp is a very, very marginal benefit for most people most of the time, even if they're working on high bit depth material. Far more important has been the substantial improvements in display gamut and accuracy.
For content creators the important thing is for this additional bit depth to be captured in the first instance and preserved during manipulation.
A non-dithered 10-bit display should look better than an 8-bit dithered display though, and if you add dithering to the 10-bit display, you should be able to get a pretty darn nice view of 12 or 14-bit content. For instance, 10-bit displays should be great for looking at smooth gradients (e.g. defined with CSS) over a large area of the screen, for which 8-bit displays still often get fairly posterized.
One thing about recent displays is that they’re very bright, and have impressively dark blacks (with a smooth glossy glass surface with some kind of anti-reflective coating on it).
For instance, the Macworld UK review measured the 5K iMac with max brightness of 445 lux, with a 1160:1 contrast ratio. That’s really damn impressive, better than you’ll find in a movie theater. (It’s hard to tell exactly what their test methodology was though. I can’t tell if they measured in a typical room, or in complete darkness.)
Such a high contrast ratio lets you start to look at images with more dynamic range than you could get in a typical photo print, or an order of magnitude more than you’d get in e.g. a magazine. But if you start looking at such images, you really start pushing up against the limits of an 8-bit display, and you are forced to choose what part of the brightness range you’ll posterize. A 10-bit display is very helpful for those types of images.
I think video DACs used to ship with lookup tables, so they'd be 10-bit internally, but you could only feed them 8-bit data. SGI could always throw more money at things, they had expensive hardware.
The DVI standard only deals with 8-bit samples. HDMI and DisplayPort support 10-bit samples, but they're newer. Most desktops used DVI for digital video until not that long ago.
Software support would be a lot of work back in the day when applications drew to a single framebuffer. These days, you usually have the applications draw to dedicated buffers, and the compositor draws the screen. This makes it easier to mix 8-bit buffers with buffers of other depths.
Typically, you'll want to do 10-bit with hardware support, because it's just so much faster. Software is more geared towards 8-bit or 16-bit, but GPUs will support 10-10-10-2 in a single 32-bit word. They'll also be much better at working with 16-16-16-16 or 8-8-8-8, and mixing all of them together.
Then there's all the software support.
(Note: I've remember editing 16-bit files in Photoshop ages ago, but they'd be displayed at 8-bit, and the main difference was reduced banding after extended processing.)
Hey guys, it appears it’s not just for the 5K iMac,
I have tested this on 2013 Mac Pro with an Eizo CS230
monitor and can confirm that you can get 10bit output.
http://www.lsdigi.com/2015/10/el-capitan-10bit-display-suppo...However, when I view the test image from the article's comments (http://www.imagescience.com.au/kb/getattachment.php?data=MTU...) I still see banding. Hmm.
What changed?
Is 10 bit color smoke and mirrors or is it something that only a smaller fraction of the population can appreciate?
In the color world, most of ones job is about mapping what a sensor captures (most modern DSLRs are 12-16 bits per channel) onto the reduced palette offered by 8 bit color. Actually, most cheap displays are 6 bit color with some fancy techniques to help fool our eyes.
Research banding and dithering with respect to color to get a better idea of the subject.
Its when you start manipulating images that it doesn't work out. For example, you have a nice sunset picture but its dark and you can't see the people in front. As a result, you try to increase saturation, contrast and exposure. The people's faces are still dark so you try to change the exposure more aggressively. That's when the picture breaks down. The sky sunset becomes pixelated, maybe the skin becomes white etc. If you use a 8-bit display you wouldn't know if it's because of the effects or because of the 8bit monitor. With a 10-bit display, if it looks crap, at least you know its from the picture you took.
This might look an extreme example bit it happens often for photographers and videographers. It can also happen for consumers if they try to check a picture which lots of minimal variations if the same color in the same picture. A good example is a picture of a white sky. It can appear pixelated in a few parts
Also, 10-bit grey-scale is really important in the medical imaging field. You don't want your xrays compressed down to just 256 levels.
This my case with my old Samsung monitor, but this monitor have some tricks that helps a lot to see bad softing on 3d meshes thanks to the weird banding/posterization when you look it at extreme angles.
It would go from 0-F to 0-K wouldn't it?
so... #KKK = white? ;(
rgb(1.0, 1.0, 1.0) == white
Ofcourse you can't provide more decimals than the number of bits used by the float.
EDIT:
0.999 * 255 (8 bit) = 255
0.9999 * 255 (8 bit) = 255
0.999 * 4096 (12 bit) = 4092
0.9999 * 4096 (12 bit) = 4096
So for lower color depths the number of decimals isn't that important.You get a number in front of ff from 0 to 3, so 3ff is the maximum instead of ff
Support for Thunderbolt 3 (which should have enough bandwidth to drive a 5K display at 60 Hz) is coming with Intel Skylake chips, which should be arriving next year.
8-bit graphics is normally 256 different colors (at least for DOS era programming). 24-bit graphics is 8-bits per RGB channel.
In reality, no — the differences in brightness between each shade are going to be too subtle to notice.
Most sources of egregious banding usually comes from 8 bit source material manipulated or "colour managed" to an 8 bit output product. If the source material was 10+ bits then banding would be far less noticeable, even if the final output is still 8 bits.
I fear that 10 bpp would hide the banding from you, so that when your users see it on their 8 bpp displays they notice the banding that you didn't see or get a chance to dither out with noise.
ARG8888 and it says Pixel depth: 32-bit Color
ARG2101010 and it says Pixel depth: 30-bit Color
Surely it's not actually 2 bit Alpha in ARG2101010
I guess my question is: Has OS X always had graphics API:s that uses floats instead of rgb bytes for everything?
https://developer.apple.com/library/ios/documentation/UIKit/...:
Going beyond 8bit would be awesome; if you have large gradients and don't use dither, you get really heavy banding. Imagine a gradient on a web page background. If your screen is 1024 pixels high, thats 4 rows of pixels of the same color even if your gradient is going from 0 to 255 on a channel. If your range is smaller (dark gray to lighter gray), it gets even worse. Even older APIs could draw benefit of this, for example a CSS gradient specifying #rrggbb...#rrggbb with 8bits/channel could be rendered with more than 8 bits per channel to avoid banding.
What I'd pay for a X series ThinkPad with a 10-bit "Retina" display...
And the text for the image is as follows:
The graphics driver enables 30 bit pixel depth. 10 bit for each RGB color. Image courtesy Mac & I magazine.It makes more sense in video where one often uses the YCrCb colors space where the color components (Cr Cb) are often sampled at half the rate of the luma components. In this case, 10-bits corresponds to 20-bits per sample point.
[1] (PDF) https://www.amd.com/Documents/10-Bit.pdf [2] (PDF) http://www.nvidia.ca/docs/IO/40049/TB-04701-001_v02_new.pdf
https://www.cinema5d.com/wp-content/uploads/2015/10/iMac-10-...
http://i1.wp.com/www.LSdigi.com/wp-content/uploads/2015/10/S...