but I do recommend you to work in nuke if you are dealing with linear files, photoshop is pretty bad at this. Also remember that if you are outputing to an 8 bit file, your 0.04 will have srgb gamma baked in. So if you want to use linear values make sure you output to linear .exr or to compensate the gamma (linearize using 0.454) in your shader input (if meant to be a scalar map, aka bump, gloss...etc).
I just want to create textures in Unity using photoshop. So basically if I just do a solid color fill texture on a cube with a value of 0.04 as the specular value in 8bit, it will be wrong with my current settings?
I think that'll be a linear value of .04, but if anything confuses me about digital images, it's colour spaces. I'd love to hear someone who's knowledgeable explain all this stuff, because it's just sort of a mystery to me, and no amount of playing around with it will help me figure it out.
but I do recommend you to work in nuke if you are dealing with linear files, photoshop is pretty bad at this. Also remember that if you are outputing to an 8 bit file, your 0.04 will have srgb gamma baked in. So if you want to use linear values make sure you output to linear .exr or to compensate the gamma (linearize using 0.454) in your shader input (if meant to be a scalar map, aka bump, gloss...etc).
cheers
This is not correct. a value of 10,10,10 will be 10,10,10 regardless of if your target is sRGB (gamma space) or linear space. There is absolutely no need to use over 8 bit per channel or EXR format. Normal maps require linear space and have used 8 bit file formats for ages. If this were true, it would be impossible to work with normal maps without working in linear color space in PS, which is obviously not the case.
The only thing you need to do, assuming you author your textures in linear space, is ensure the texture is loaded in linear space as well in your target engine/renderer.
What changes is how that 10,10,10 value is interpreted when loaded, but nothing is "baked" into the file.
Here's an example, on the left, I've got a material using a parametric value of 0.04. On the right, I've saved an 8-bit file out of photoshop with a value of 10,10,10. The value is exactly the same. I'm not working in linear space in photoshop nor do I need to save my texture in a special file format or do anything out of the ordinary. I simply need to make sure the file is read as linear space and not sRGB in my renderer.
Now, if your target is sRGB rather than linear space, you will need to account for the gamma curve that will be applied when your file is loaded, so the value you will need to use is, if I recall correctly, something like 56,56,56. But this doesn't directly relate to the OP's question.
Nuke is a composition/video editing suite that is completely unnecessary for this purpose.
I just want to create textures in Unity using photoshop. So basically if I just do a solid color fill texture on a cube with a value of 0.04 as the specular value in 8bit, it will be wrong with my current settings?
Nope, that is all you need to do. It will work perfectly fine, assuming you flag your file as linear space in Unity.
To further simply this, if working in linear space (even if your color space is set to sRGB in PS, that actually doesn't make any difference) you can simply use the B(brightness) value in the HSB section of the color picture to set your reflectivity %, so 4%, end a B value of 4 (this gives 10,10,10 as you would expect). A B value of 3 (skin is 2.8%) is 8,8,8.
Yeah, the only real concern when working in sRGB space in PS but authoring linear space maps is that certain tools, like the gradient tool, are designed to work in SRGB. So you'll get a gradient with a gamma curved baked into it rather than a proper linear space gradient. Depending on exactly what you're doing this may be an issue, but for setting reflectance/gloss values and things of that nature it shouldn't really come up.
All I'm saying is that trying to decipher how photoshop actually handles colorspaces is like, an excercise in frustration and wanting to claw your own eyes out.
(and Nuke is really good joe!)
I just want to create textures in Unity using photoshop. So basically if I just do a solid color fill texture on a cube with a value of 0.04 as the specular value in 8bit, it will be wrong with my current settings?
Just a quick warning about a Unity bug I encountered. The short version is that they fucked up the roughness channel, and you need to compensate for it. If you don't, everything will appear too glossy vs. how it looks in Marmoset/ Substance Painter etc.
You'll need to stick a levels adjustment at the top of your roughness channel, and change the mid point to 0.454 (inverse gamma). You can toggle this off for previewing in other engines.
Are you sure about that Cheese? Do you have any examples? Here is a comparison I did just now with Andrew's gun in all 3. I didn't alter any levels this is all straight out of the box exports. Also I'm not sure if they fixed GGX for Unity standard shader either. Someone made a way to be able to use GGX a while back here but I haven't tried it yet: http://gfxdevunity.blogspot.com.au/2015/05/replacing-blinn-phong-by-ggx.html
Marmoset:
Unity 2k cubemap res, obviously not ideal but this is the closest I've seen it get to Substance painter:
Unity 64 cubemap res, some noticeable differences in roughness:
Now changing the levels like your suggestion provided these results:
This is all pretty confusing on trying to get matching values with Unity. Wes over at Allegorithmic made a similar post to yours but instead having the levels set at 0.75 https://forum.allegorithmic.com/index.php?topic=4335.0
Since the Color Settings dialogue window was shown further up I think this might be worth mentioning. Definately something I would change on any computer intended to be used to create graphics for computer games. This is regarding sGray and working with the alpha channel in Photoshop.
Personally I think that (for so many reasons) its time to put photoshop to bed and actually have a digital image editing tool which isn't 20 years old and designed for print media.
Personally I think that (for so many reasons) its time to put photoshop to bed and actually have a digital image editing tool which isn't 20 years old and designed for print media.
unfortunately, as long as Quixel relies on it i think it'll be around for a while yet.
Personally I think that (for so many reasons) its time to put photoshop to bed and actually have a digital image editing tool which isn't 20 years old and designed for print media.
I think so too, for texturing anyways. It's great for Photo editing (I find it better than Elements) but Quixel exist on it though. I'm starting to migrate into Substance but I still do most of my work on Photoshop cause Quixel and I love it.
Are you sure about that Cheese? Do you have any examples? Here is a comparison I did just now with Andrew's gun in all 3. I didn't alter any levels this is all straight out of the box exports. Also I'm not sure if they fixed GGX for Unity standard shader either. Someone made a way to be able to use GGX a while back here but I haven't tried it yet: http://gfxdevunity.blogspot.com.au/2...ng-by-ggx.html
It made a big difference on a character I recently textured. Looked fine in Substance painter and Marmoset, but much glossier in Unity. When I did the inverse gamma on roughness, it matched up much better. Maybe I'm missing a setting somewhere?
Replies
but I do recommend you to work in nuke if you are dealing with linear files, photoshop is pretty bad at this. Also remember that if you are outputing to an 8 bit file, your 0.04 will have srgb gamma baked in. So if you want to use linear values make sure you output to linear .exr or to compensate the gamma (linearize using 0.454) in your shader input (if meant to be a scalar map, aka bump, gloss...etc).
cheers
I just want to create textures in Unity using photoshop. So basically if I just do a solid color fill texture on a cube with a value of 0.04 as the specular value in 8bit, it will be wrong with my current settings?
This is not correct. a value of 10,10,10 will be 10,10,10 regardless of if your target is sRGB (gamma space) or linear space. There is absolutely no need to use over 8 bit per channel or EXR format. Normal maps require linear space and have used 8 bit file formats for ages. If this were true, it would be impossible to work with normal maps without working in linear color space in PS, which is obviously not the case.
The only thing you need to do, assuming you author your textures in linear space, is ensure the texture is loaded in linear space as well in your target engine/renderer.
What changes is how that 10,10,10 value is interpreted when loaded, but nothing is "baked" into the file.
Here's an example, on the left, I've got a material using a parametric value of 0.04. On the right, I've saved an 8-bit file out of photoshop with a value of 10,10,10. The value is exactly the same. I'm not working in linear space in photoshop nor do I need to save my texture in a special file format or do anything out of the ordinary. I simply need to make sure the file is read as linear space and not sRGB in my renderer.
Now, if your target is sRGB rather than linear space, you will need to account for the gamma curve that will be applied when your file is loaded, so the value you will need to use is, if I recall correctly, something like 56,56,56. But this doesn't directly relate to the OP's question.
Nuke is a composition/video editing suite that is completely unnecessary for this purpose.
Nope, that is all you need to do. It will work perfectly fine, assuming you flag your file as linear space in Unity.
To further simply this, if working in linear space (even if your color space is set to sRGB in PS, that actually doesn't make any difference) you can simply use the B(brightness) value in the HSB section of the color picture to set your reflectivity %, so 4%, end a B value of 4 (this gives 10,10,10 as you would expect). A B value of 3 (skin is 2.8%) is 8,8,8.
http://www.cambridgeincolour.com/tutorials/gamma-correction.htm
http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html
lots of useful info.
cheers
-Manu
yes that is correct I ve just noticed I did a mistake saying that the gamme would be baked into the file, do apologize for that.
(and Nuke is really good joe!)
Just a quick warning about a Unity bug I encountered. The short version is that they fucked up the roughness channel, and you need to compensate for it. If you don't, everything will appear too glossy vs. how it looks in Marmoset/ Substance Painter etc.
http://forum.unity3d.com/threads/roughness-is-wrong-in-linear-heres-a-fix.334739/
You'll need to stick a levels adjustment at the top of your roughness channel, and change the mid point to 0.454 (inverse gamma). You can toggle this off for previewing in other engines.
Marmoset:
Unity 2k cubemap res, obviously not ideal but this is the closest I've seen it get to Substance painter:
Unity 64 cubemap res, some noticeable differences in roughness:
Now changing the levels like your suggestion provided these results:
This is all pretty confusing on trying to get matching values with Unity. Wes over at Allegorithmic made a similar post to yours but instead having the levels set at 0.75 https://forum.allegorithmic.com/index.php?topic=4335.0
Another thread over at unity discussing the issue :poly122:
http://retrofist.com/sgray/
unfortunately, as long as Quixel relies on it i think it'll be around for a while yet.
I think so too, for texturing anyways. It's great for Photo editing (I find it better than Elements) but Quixel exist on it though. I'm starting to migrate into Substance but I still do most of my work on Photoshop cause Quixel and I love it.
It made a big difference on a character I recently textured. Looked fine in Substance painter and Marmoset, but much glossier in Unity. When I did the inverse gamma on roughness, it matched up much better. Maybe I'm missing a setting somewhere?