Well, whilst articles how to make skyboxes which don’t have distortions at the edges and corners are a little thin on the ground, I’ve managed to find some decent info courtesy of the Aftershock source code and the recently released Quake2 source. I’d also formulated a couple of techniques of my own. After all this I came down to 2 options:

  1. Distort the texture maps. Use a 6-sided cube map but pre-distort the textures such that the edges and corners appear curved rather than angular. Major downside here is the overhead on preprocessing the texture and the artefacts this can create. Also you can’t use texture coordinate modifications to create scrolling textures because the texture only works whilst fixed in that position. Advantages are that you don’t need to subdivide the sybox cube, you only need the standard 8 vertices.

  2. Subdivide the cube around the player and generate tetxure coordinates by determining the vector from the viewers position to the vertices in the skybox. Use this vector to index a 6-sided cube map which is made up of orthoganal 90 degree FOV views of the scene. Because the change in angle decreases towards the edges and corners of the box this has the effect of stretching the texture around these points, making it look curved rather than flat. This is the method Quake2 and 3 use, although I think they only generate a 5-sided box (no floor). The advantages are that it works with any texture (you can use 2D textures instead of cube maps as long as the edges match up since all 6 sides can have the same texture), and it is compatible with texture coordinate modifications like scrolling textures. Disadvantages are that it requires more triangles because of the subdivision, and the distortion is a little lower quality because the linear interpolation between vertices does not match the spherical interpolation used to create the texture coordinates (this obviously is less noticable the more subdivisions you use).

I intend to use latter method in Ogre because it is more flexible and easier to apply generically. I intend to use a full 6-sided skybox though since I want to support any kind of scene. Sky planes will also be supported but these are a lot simpler – they require no warping effect.