I'm starting out on a new project; I've written a number of apps using Cocos2D v2.2 and earlier and this is my first with v3.0+ and SpriteBuilder.
The first thing I did when laying out the initial scene is place a full screen CCNodeGradient that covers the screen.
Running this in the Simulator, or on a device produces a gradient for sure, but with very visible Banding.
Here is a screen shot from an iPad Air:
It's quite easy to see the banding. My iPad Mini (non-retina) also has the same problem.
I'm a bit surprised by this. When I look closely it seems like each band is actually a sub-gradient, but in the opposite direction to what the overall gradient has been configured to use.
In this case, the start colour is: 071d2f and the end is: 0e2e3f
Interestingly, if I try to create a full screen gradient within Photoshop, the banding is still present unless I select "Dither" so I guess the question now becomes "How can I simulate dithering within a CCNodeGradient object?"
I'd much rather not litter the app with a bunch of PNG assets for backgrounds like this; surely it's cheaper to render it via CCNodeGradient in terms of memory, etc. Another technique I tried was to take a 2x2048 pixel slice of the image I created in Photoshop (with the dithering) and place that in the Spritebuilder project, setting it to scale by 768.0 on the Y axis.
This looks much much better, but still not perfect. Is it possible to get a perfect gradient like this?