Hi. I’m facing banding problems, and have no idea what I am doing wrong. I use a regular 32 bit .hdr image for skybox and ambient lighting (shader Skybox/Cubemap). Here are my import settings:
And this is how it looks when build platform is Standalone:
But when I just switch platform to Android, banding incoming:
I’m using Unity 5.6.2p4. On Android “Use 32 bit Display Buffer” does nothing.
I don’t use exr/hdrs for skyboxes so I haven’t quite ran into this issue, but:
fixed4 frag (v2f i) : SV_Target
{
half4 tex = texCUBE (_Tex, i.texcoord);
half3 c = DecodeHDR (tex, _Tex_HDR);
c = c * _Tint.rgb * unity_ColorSpaceDouble.rgb;
c *= _Exposure;
return half4(c, 1);
}
This is the frag of the skybox/cubemap shader. You will notice that it uses fixed and half precision. Fixed and half precision means nothing on Windows (AFAIK) and is all treated as float. On mobile though, half is treated as acutally being half precision (and fixed is usually treated as half as well, but it depends on the device).
So I think what you’re seeing is the result of this. But I’m just guessing.
You could create your own shader and have floats everywhere and see if that fixes the banding issue. But it will most probably cause you performance issues.
Found workaround, if someone has the same issue. Use HDR/EXR image for ambient lighting, but for skybox convert it to LDR. Then the banding is gone, though it’s a dirty hack.
I know it’s been a while, but we’re running into this issue and we can’t figure out what it means to convert an image/skybox to LDR. Can you point us to a link/example/etc?