6

This question is about color management and the use of a higher color depth, 10 bits per channel (30 bits in total, resulting in 1.07 billion colors, or 1024 shades of gray, sometimes referred to as "deep color") compared to the standard of 8 bits per channel (24 bits in total, 16.7 million colors, 256 shades of gray, sometimes referred to as "true color"). Do not confuse with "32 bit color", which usually refers to standard 8 bit color with an extra channel ("alpha channel") for transparency (used to achieve effects like semi-transparent windows etc).

The following can be assumed to be in place:

1: A wide-gamut monitor that supports 10-bit input. Further, it can be assumed that the monitor has been calibrated to its native gamut and that an ICC color profile has been created.

2: A graphics card that supports 10-bit output (and is connected to the monitor via DisplayPort).

3: Drivers for the graphics card that support 10-bit output.

If applications that support 10-bit output and color profiles would be used, I would expect them to display images that were saved using different color spaces correctly. For example, both an sRGB and an adobeRGB image should be displayed correctly. If an sRGB image was saved using 8 bits per channel (almost always the case), then the 10-bit signal path would ensure that no tonal gradients were lost in the conversion from the sRGB of the image to the native color space of the monitor.

For example: If the image contains a pixel that is pure red in 8 bits (255,0,0), the corresponding value in 10 bits would be (1023,0,0). However, since the monitor has a larger color space than sRGB, sending the signal (1023,0,0) to the monitor would result in a red that was too saturated. Therefore, according to the ICC color profile, the signal would be transformed into a different value with less red saturation, for example (987,0,0). Since there are still plenty of levels left between 0 and 987, all 256 values (0-255) for red in the sRGB color space of the file could be uniquely mapped to color-corrected 10-bit values in the monitor's native color space.

However, if the conversion was done in 8 bits, (255,0,0) would be translated to (246,0,0), and there would now only be 247 available levels for the red channel instead of 256, degrading the displayed image quality.

My question is: how does this work on Ubuntu? Let's say that I use Firefox (which is color-aware and uses ICC color profiles). Would I get 10-bit processing, thus preserving all levels of an 8-bit picture? What is the situation like for other applications, especially photo applications like Shotwell, Rawtherapee, Darktable, RawStudio, Photivo etc?

Does Ubuntu differ from other operating systems (Linux and others) on this point?

3 Answers 3

4

"Bit wise, there shouldn't be a problem whether you render in 8 or 10, but there's a major problem with linux anyway with bit-depths. In linux, there unfortunately is no front-end software that allows you to change the bit-depth. The ONLY way to change bit-depth in linux, is to compile your video drivers to call 10 bits per channel for your interfaces, instead of 8."

Actually Nvidia GeForce Drivers have supported 10 bit per channel in Linux for a while now. Of course, you're going to need a display with 10 bit per channel color support connected via a DisplayPort to your video card for it to work.

In contrast, with Windows, only the Nvidia Drivers for their Quadro Cards allow 10 bit per channel color. But, most applications don't work with it (since the Windows desktop itself is 8 bits per channel, and it's difficult to implement 10 bits per channel color on part of the screen like you'd see with an image editing application. But, Photoshop has 10 bit per channel working in Windows using either AMD Firepro cards or Nvidia Quadro cards with CS6. With Photoshop CC, I've seen reports of problems with Firepro cards though.

Basically, Windows requires "Pro" cards (AMD Firepro or Nvidia Quadro) to get that feature (10 bit per channel color with applications that support it), as the drivers for AMD Radeon Cards and Nvidia GeForce cards do not support the 10 bit per channel OpenGL buffers used by applications like Photoshop. See this page for some info on that from Nvidia:

http://nvidia.custhelp.com/app/answers/detail/a_id/3011

But, interestingly, the Nvidia Proprietary Linux drivers for GeForce Cards do support 10 bit per channel OpenGL buffers if you have a card with a DisplayPort and a Display that supports 10 bits per channel. They added 10 bit per channel (a.k.a., 30 bit) color support to their Linux drivers beginning with 295.20. Here's an old Phoronix article mentioning it:

http://www.phoronix.com/scan.php?page=news_item&px=MTA1NzM

If you go to the Nvidia X-Server Control Panel in Linux, and look under Display Settings, you should see a Color Depth choice if the detected monitor is capable of 10 bits per channel and connected by a Display Port. You'll see a 30 bit choice marked as Experimental there. Or, you can just select X Screen 0 (versus the detected display) and see the color depth choice that way (where it defaults to 24 bit but will have 30 bit available in the drop down list). Of course, you don't want to select that choice unless you have a true 30 bit (10 bit per channel) hardware setup (card with a DispayPort with a monitor connected to it with a true 10 bit per channel color panel).

2

There's a few major problems with this, which I will address later.

If you 'assign' a smaller color profile(sRGB) to a larger color profile, you will of course have a change in the RGB values. The only way to safely preserve the original sRGB values, is to use the 'convert' option, which converts the color mode or 'Lab' designation and trys to preserve the original hues, or unassign the color profile and let the software use it's default rgb rendering.

Bit wise, there shouldn't be a problem whether you render in 8 or 10, but there's a major problem with linux anyway with bit-depths. In linux, there unfortunately is no front-end software that allows you to change the bit-depth. The ONLY way to change bit-depth in linux, is to compile your video drivers to call 10 bits per channel for your interfaces, instead of 8.

1

Um...

Windows supports at least 16bpp output since Windows 7. The post talking about the NVidia 10bit drivers not working on Windows because the OS is limited to 8bpp is VERY, VERY WRONG.

This information has been available since 2008 at the WinHEC when it was first announced and demonstrated for Windows 7 and used in production on Windows 7 in 2009 when it was release with both ATI and NVidia drivers offering at least 10bpp support. (Sources: Wiki, MSDN, WinHEC,etc.)

There are a lot of professionals using 30bit and 48bit displays with Windows 7/8/10, that are not dithering/downsampling the color from the OS to the display. (Sources: Wiki, MSDN, Adobe, Autodesk, RenderMan, etc.)

Extra Note: OS X just recently added 10bit color support for OS X 10.11 (2015) Which is sadly really late, especially when Apple is requiring the use of their new GPU framework to even use it.

1
  • Unfortunately, some video card manufacturers have intentionally obscured or disabled 'deep color' features in their drivers as an attempt to force those users to their 'workstation grade' products. Apr 30, 2016 at 0:21

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .