Jump to content
rui_mac

Convert from Linear space to another profile

Recommended Posts

I create my 3D renderings in Cinema 4D and I usually work in Linear Space.
So, when I open the resulting image in Affinity Photo, I get this:

Screen_Shot_2017_03_06_at_19_37_40.jpg

 

I can't seem to convert it to an RGB profile and get the correct color.
The same image, opened in Photoshop appears line this:

 

Screen_Shot_2017_03_06_at_20_42_43.jpg

 

And this is what I expect. I can easily convert it to another profile in Photoshop and, once that is done, I can open it in Affinity Photo and get the expected color.
Is there a way to work in Linear Space in Affinily Photo?
If not, will there be, in the future?

Share this post


Link to post
Share on other sites

What viewer LUTs do you use in either? Affinity looks almost like linear-raw while Photoshop looks like some viewer LUT is applied.

 

In Affinity you have the option of using ICC, OCIO and Raw(Unmanaged) to view linear light. Also, don't use PSDs for linear light, you can't really use them outside of Adobe. Multi-channel EXR is what you want to save your renders to.

 

The reason why the Photoshop file looks right to you in Photoshop likely has to do with the close relationship with Maxon and Adobe.

 

Use the 32-bit Preview panel in Affinity and see if any of the settings get you closer. I'd start with setting the viewer gamma from 1.0 to 2.2 and see how that goes. It could be that C4D rendered to a gamma of 2.2 instead of 1.0. 

Share this post


Link to post
Share on other sites

Setting the 32-bit Preview to a gamma of 2.2 does show the image as expected.
But, how can I set it to an 8 bit image with, lets say, the sRGB profile and keep it looking as it should?
 

Also, I already created a Linear profile inside Photoshop, following the instructions provided in the site that v_kyr posted.

How can I add it to Affinity Photo? Will it work?

Share this post


Link to post
Share on other sites

You can use a softproof adjustment layer to apply (by which I actually mean "convert to") the ICC non destructively

 

You can then export into sRGB to bake it into the file.


 

 

Share this post


Link to post
Share on other sites

ICC-profiles are usually installed on a system level for general access by applications, so when on a Mac just place an ICC-profile into HD\Library\ColorSync\Profiles (on Windows copy profiles into c:\Windows\system32\spool\drivers\color).


☛ Affinity Designer 1.6.1 ◆ Affinity Photo 1.6.7 ◆ OSX El Capitan

Share this post


Link to post
Share on other sites

Well, I tried all the profiles in the Soft Proof adjustment and none made the image look nice.
I just need a profile that corrects the gamma to 2.2. Why is this so hard?

Share this post


Link to post
Share on other sites

you can put the profile you created into HD\Library\ColorSync\Profiles and then use it

 

not saying there should not be a default way of doing this

 

cheers


 

 

Share this post


Link to post
Share on other sites

The problem is that I created the profile in Photoshop and that is a .csf file.
I would like to have a .icc file that would simply changed the display color of the image from a gamma of 2.2 to a gamma of 1.0

And I can't seem to find an .icc file that does that.

Share this post


Link to post
Share on other sites

See Elle Stone's Well-Behaved ICC Profiles and Code and his GitHub icc-profiles for some gamma 1.0 ones (*-g10.icc files)!

 

An interesting read there on that site is also "In Quest of Well Behaved Working Spaces", especially here the subcategory "Quantization from hexadecimal conversion" which seems to be related to LittleCMS too (that library is also used by the Affinity products here for color management).


☛ Affinity Designer 1.6.1 ◆ Affinity Photo 1.6.7 ◆ OSX El Capitan

Share this post


Link to post
Share on other sites

You attached an 8-Bit file. Linear space requires 32-Bit.

 

I opened it in Affinity Photo and it did the right thing (unlike Preview which) and applied the embedded profile to the file. 

And as I suspected it's a 2.2 gamma set to 1.0 so you essentially have a gamma of 0.45454545… (1.0/2.2)

 

To get the right-ish colours in Affinity, you need to go to the correct bit depth for linear space, which is 32-Bit.

I converted it from 8-Bit to 32-Bit and in the 32Bit Preview panel set my viewing gamma to 2.2 and voila, got the same colours more or less that you get in Photoshop. And that's using your provided profile as ICC Display Profile. When I go to Unmanaged (Raw) and set the viewer to a Gamma 3.741 I get what you see in Photoshop pretty much exactly.

 

 

 

Attached is the .psd image with the Linear profile.

And the color it should show, in Affinity Photo is the following:

 

3_D_Fish_tank_Linear.png

Share this post


Link to post
Share on other sites

Yes, I could get it to show nicely in 32 bits in Affinity Photo.
However, it shows correctly in Photoshop, in 8 bit. And this is an 8 bit image.

So, how can I keep it in 8 bits and show correctly in Affinity Photo?

Share this post


Link to post
Share on other sites

I asked about this in a previous post somewhere (I called it a bug I believe ).

 

Affinity photo does not support ICC profiles with a linear gamma,while in 8bit / 16 bit. They appear and work fine if working with 32 bit files.

 

I do gamma correction with imagemagick or Photoshop and then work with Affinity photo. OR I load the file in Photoshop, save it as 32bit and then open that in Affinity Photo. Then you can do all the editing you want in linear space (while actually seeing it gamma corrected for your monitor ) and save it back. But you do have a 32 bit file. If you ever want to go back to a linear 16bit file you'd have to use Photoshop or something else again.

 

Another way they explained it to me is that you can open your linear file in Affinity photo , and then add a LUT layer with a 3d LUT loaded to view the file normally on your monitor. Keep that LUT layer always on top, to use as a proofing layer. When saving, remember to disable the LUT layer so you actually save linear data again.

Which LUT to use and where to get it depends on your colour profile that you want to work in.

 

My files are linear-adobergb so I use a lut that converts it to normal Adobe RGB while working.

 

A gamma of 2.2 is never exactly correct, but it's often 'close enough'.

(sRGB isnt entirely 2.2, there are parts in the shadows there the gamma is different. So not a constant gamma.

Adobe RGB is 'constant' but it's more 2.19 than 2.2 (2 + 51/256).

 

I don't know why linear ICC profiles are ignored / removed with 16 bit files. On 8bit I understand (you don't want linear space in 8bit, it will posterize like crazy) but 16 bit is used a lot. Scanner output as a simple example.

Share this post


Link to post
Share on other sites

You cannot. It's technically wrong since linear space is directly incompatible with integer space. Linear space represent the light in the real world, not the light leaving your screen. That's why we use viewing transforms to view a specified portion of the linear space. Either rec709 (broadcast) or sRGB as working views.

 

Scene linear space is a floating point space from 0 to 1 while 8-bit goes from 0 to 255 in integer steps. 8-bit is not a work format but a final output format as everything you touch will almost immediately clip.

 

Adobe (and Preview) are quite likely doing some profile emulation to display. Could be there is a matrix in the PSD that shifts the primaries around and pushes the gamma to nudge the embedded profile into integer 8-bit space.

 

I attached you the profile I extracted from your image so you can see for yourself. Install it, go up the bit depths and see when the profile becomes available to assign. In 32-Bit. It's not even intended for non-floating point colour.

 

In short, that profile does not belong with an 8-Bit file at all. When you do that, all the apps in your pipeline have to compensate for that error. Which more or less fences you in to Adobe island. 

 

 

Edit: Attached AP file with inverted gamma as an adjustment layer to show what's going on with your file.

 

 

Yes, I could get it to show nicely in 32 bits in Affinity Photo.
However, it shows correctly in Photoshop, in 8 bit. And this is an 8 bit image.

So, how can I keep it in 8 bits and show correctly in Affinity Photo?

 

Linear Color Space.icc.zip

3D_Fish_tank_notLinearAtAll.afphoto.zip

Share this post


Link to post
Share on other sites

Sort of what I said : linear space in 8 bit is wrong and should never be used.

 

But.. linear space in 16 bit is used a lot and completely ignored by Affinity Photo.

 

In 32 bit floating point, linear space is even the standard / norm :).

Share this post


Link to post
Share on other sites

I understand all that, really.
But shouldn't we have a way to, at least, preview an 8 bit image that has a Linear profile, using the Soft Proof adjustment layer?
Yes, it should have been saved in 32 bit in the first place. But since it is possible (although not advisable nor correct) to save an 8 bit image with a Linear profile, Affinity Photo should be able to provide a way to visualize the color corrected image.

Share this post


Link to post
Share on other sites

It's possible only due to ignorance really. I don't think Affinity should support something like this.

You're basically saying: Software X makes mistakes, please also make them.

If you want to keep with these errors, the AP file I attached earlier shows how you can.

 

As for the 16-bit, not having linear space in AP that's easy to answer even as a user. 

There is no linear space in integer 16-bit which is the 16-bit space Affinity uses. There is however a linear space in 16-bit half-float which is the lowest option in ACES. You can export an EXR file in 16-Bit half-float from your 32-bit space in Affinity, so there's that route, but for working you currently have to stick with 32-bit and flatten down to 16-bit float for normal and height maps for use in game engines.

 

When you read an EXR from Substance Painter for example it'll have a maximum of 16-bit half-float but Affinity opens it to 32-bit. It's a bit like Nuke where you're always in 32-bit float and pick what you want on export. 

Share this post


Link to post
Share on other sites

I think it is best to load files in a way that makes working with them easy and fast.

 

So maybe the best option is to translate them (even 8 Bit Ines) into 32bit like Nike dies it.


 

 

Share this post


Link to post
Share on other sites

And display a warning: "This file will not work correctly in linear space, please consider degamma-ing and flatten it to 8-Bit space"?

 

 

I think it is best to load files in a way that makes working with them easy and fast.

So maybe the best option is to translate them (even 8 Bit Ines) into 32bit like Nike dies it.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×