I switched the normal maps from using euclidean xy to using hemi maxn, this is a hemispherical encoding I came up with that is somewhat similar to HemiOct.
This provides higher quality, with only a few extra instructions required to decode.
I also created a variant for a full spherical view, it is 2x as wide as it is tall.
Here is spherical maxn used for a skybox, this shows a 360 view. I
generate this by projecting the primary screen render onto the maxn
view, then warping it forward as the player moves around. This is used
as the basis for the environment map. It does get distorted if the
player never turns their head, so I'll probably need to add a specific
pass to render a low res version behind the player occasionally.

