Fixed color banding artefact on landscape and especially on the water. Normal-and-height textures now store more precise height and less precise normals, but changes in lighting is not noticeable. Texture format now is:
R - normal X G - normal Y B - height low byte A - height up byte
Normal Z component is reconstructed on-the-fly from the XY components by simple formula: Z = sqrt(1.0 - X*X - Y*Y) (keep in mind that normal vectors are always have the unit length). Using sqrt() function in the fragment shader on modern hardware doesn't affect the performance.
Height now have 16 bit precision, it calculated from two bytes very simply: h = B + A / 256. Having 16-bit height precision in the fragment shader fixes many artefacts, the most noticeable of which is a color banding on the shallow water. Before and after:
The banding on mountains was less noticeable (look at the green areas), but now it is fixed at all: