Hi everyone, I'm writing this entry as the actual bug-report form seems to be broken.
First of all, some context.
There are four bit-depths commonly used for images:
- 8-bit integer
- 16-bit integer
- 16-bit Half Precision Floating Point (also known as 16-bit (Half) or 16F)
- 32-bit Single Precision Floating Point (also known as 32-bit (Float) or 32F)
However in Photoshops options you will only find three of these. 16-bit (Half) is missing.
From what I've learnt EXR files originally only supported this bit-depth and in order to support this filetype Photoshop seems to have written a converter that is used both during import and export of EXR.
EXRs nowadays also support full 32-bit Float, but if you try to use such files with Photoshop, both import or export are actually still locked to 16-bit (Half) (while claiming to be 32-bit in the bit-depth setting).
This issue has been known in our industry for years and is a dealbreaker for many of our tasks, yet it still hasn't been adressed. This means that we constantly have to use other software such as Affinity Photo or Nuke (The Foundry) for these tasks.
- Fix the import & export of EXRs to allow for true 32-bit support with EXRs.
- Additionally, an export options dialog would be nice to allow users to export 16-bit EXRs for those tasks where that is enough precision and range. This would be the simple way to adress this issue at least in some regard.
- In a perfect world, 16-bit (Half) would be added as an additional bit depth within Photoshop, but that would be a lot more work on the development side... and the previously mentioned fixes would be enough to allow us to work in Photoshop again.
For more information as to why it matters to us, continue reading:
All in all it comes down to the differences in precision and brightness range.
Roughly put, 32-bit EXRs are 8192-times as precise in there substep as their 16-bit(Half) counterparts.
This becomes more and more important the brighter your image gets as the precision of the Floating Point Format in general decreases the further you get away from black. Being only half as precise when doubling the range. E.g. using 16-bit Half (1.0 being the maximum screen brightness):
Substeps in the 0.5 to 1.0 range: 2048
Substeps in the 1.0 to 2.0 range: 1024
Substeps in the 8.0 to 16 range: 128
as a reminder: 8-bit integer has 256 substeps... so 16-bit (Half) is less precise than 8-bit Integers as soon as your values are brighter than 8.0 ... 32-bit EXRs only reach this point once crossing over the 65,536 brigthness mark.
The Integer formats have a brightness range of 0.0 to 1.0, with 1.0 representing a screens (non-HDR) maximum brigthness. (Technically 0-255 but that's not particularly human readable and hard to compare to float ranges, so it makes sense to convert to 256 supsteps on a 0 to 1 range.)
16-bit (Half) can range from -65,536
8-bit Integer: 0.0 to 1.0
16-bit (Half): -65,504 to 65,504
32-bit (Float): roughly -3.4 *10^38 to 3.4 * 10^38 Reminder:
I work in VFX and we regularly handle true 32-bit EXRs and rely on both the precision and the range to complete our jobs. Example: We are capture on-location lighting using HDR-Panoramas, storing the true brightness of our surrounding. These images can be used to light 3D objects exactly as the items on set, making it very easy to integrate them.
However, bright light sources such as the sun can be even brigther than 65,504 (the max. value in 16-bit (Half). And we would want this brightness to precise as well. However at this brigthness 16-bit (Half) the brightness steps are no longer in 1/ by anything anymore, but instead 36.
The fact that photoshop limits EXRs to 16-bit (Half) means that we cannot use it to edit (remove lens flares, people, etc.) such true HDRIs. It's a dealbreaker for many of our tasks, because of this we need to use other software instead even though many would prefer to work with PS.
PS: EXRs are the industry Standard image format and many applications rely on these files specically for Floating-Point data, so it's not really an option to use another file format in order to avoid this bug.