This post is long. It also contains some very bad attempts at 3D modelling. Ye be warned.
I've been looking into doing a triple-monitor setup for some 10 to 15 years now, but there have always been too many issues with them to be worth the money it costs. These days, most of the games I play have some kind of third-party support for changing the field of view, fixing the HUD, and getting non-standard resolutions to work, but there's still one giant elephant in the room: the "fisheye" effect. And the fact that right now I can't afford it, but let's pretend otherwise for this discussion.
There's a sticky up there that claims I should just ignore it because apparently radical distortion when I look to my left and right is "immersive" and I'm never supposed to look anywhere but the center of my central screen. Maybe that applies to some people, but it's not even close to applicable to me. Paying tons of money so I can get 30 to 40% more field of view, all of which is sickeningly skewed, is out of the question, so unless there's a way to minimize the problem, I won't bother. I've done a lot of searching, but other than a couple of games that natively support some level of correction, I have found very little useful information on the subject. Still it seems I can't be the only one who really wants proper widescreen support, so I'm hoping somebody has some information. Even if I can't afford a three or five monitor setup, it would be really nice to minimize the already-bad distortion on my single monitor setup.
I know people have been writing various hacks to make the Oculus Rift work on games, so it seems like there really should be *some* way to hack the projection on a typical game so it looks passable on a triple-monitor setup. Ideally, we would have full 360° horizontal, 180° vertical screens with something like 10 Gpx, but until that becomes affordable, we have to make do with projecting onto relative crap. In my case, I'm thinking either a 3x1 landscape setup or a 5x1 portrait setup. The 5x1 setup would be more expensive and have more noticeable bezels, but would also give me much higher resolution, while the 3x1 would be nicer for very wide angles, like racing games, while still having decent resolution.
1. The most obvious way to get "proper" viewing is to either sit 3 inches from the screen or lower the field of view to like 20°. Without much higher resolutions, or some way to render very high resolutions near the center of the screen while lowering the resolution around the edges, even a hundred-foot-wide screen will look like crap at the correct distance, and anything resembling correct field of view from a normal distance is just far too low to be playable. Furthermore, the maximum viewing angle is limited to a hemisphere with an infinite number of screens (though you could probably get pretty close with like 100 screens), and it takes more additional screens per extra degree of viewing angle.
2. One simple way to minimize the distortion, particularly in extremely wide setups, is cylindrical projection. Because I don't have curved monitors, cylindrical projection will cause straight lines to curve away from me near the corners, but the effect is much less significant than on a standard triple-wide setup (and probably considerably better than current distortion on my single-monitor setup). Without very tall monitors, 1:1 world:view ratios still won't be possible, but they should be close, and might be acceptable for racing games where vertical vision is less meaningful. Even better, you can get pretty much any field of view you want, provided you can afford the hardware to display it.
3. The other way to minimize distortion is to render a separate view for each screen using traditional methods. You'd still have the noticeable distortion at the edges of the screens like you get on single-monitor gaming, but it wouldn't be as ridiculously bad as the current solutions, and would allow you to render as many degrees as you can afford monitors, like the cylindrical projection. Also, because each monitor would likely be set to a lower fov than a single monitor, the distortion per monitor would be lower.
Has anyone come up with a way to get close to (2) or (3)? I don't mind taking a bit of a framerate hit (like needing 20-30% more computing power) to do something like
Fisheye Quake, but I'm hoping for a solution with a pretty minimal impact beyond the impact you'd normally get from running lots of monitors at once.
Some pictures to illustrate the problem, its cause, and some solutions. Note that I haven't done exact math on most of these, so they're just eye-balled approximations, and some of the screenshots were taken at pretty low resolution -- I mostly used 1920 x <whatever gave the correct aspect ratio> so I could see the entire image. Click an image to go to its Flickr page. I've linked to reasonably large resolutions and you can click the links up top to get full resolution if you want. The entire image group is
here, and has extra comments I put on each image if you feel like reading them.
Here is approximately where your monitors are "supposed" to be for a 5-monitor setup (24", 16:10, 6000 x 1920 total resolution). Obviously, they are far too close to comfortably play, and even if we moved it three times as far out and made them three times larger, you would be seeing subpixel elements at 1080p resolutions per screen.
This image shows why this "correct" distance is supposed to work. The pixels farthest from the viewer look smaller, because they're farther. Because the game zooms in on those pixels, this effect neatly cancels out, giving a distortion-free viewing experience.
As you put the monitors farther away, the farthest monitors aren't as far as they should be any more. At the "correct" distance, the far edge of the far monitor is maybe 3 times as far as the center of the screen. At a typical distance, that edge is only 1.5 times as far. This means the distortion still appears to be distorted, around twice the correct size, and needs to be compensated for or it will look weird. The obvious solution is to tilt the side monitors progressively farther away (this image also shows a reasonable approximation of how much extra visibility you're actually (not) getting with those extra monitors).
However, this is how most people put their monitors. This initially makes more sense, because each monitor takes up the same angular space, and a 5-monitor setup means 5 times more visible area. Unfortunately, with rectilinear projection, it actually exacerbates the distortion along the edges, making it even worse than it already was.
Let's take a closer look. Note specifically that the cave on the left (it may actually be a rock, but I'm calling it a cave entrance) is much larger than the house in the center screen, across the lake, and that the trees in the center view take up less than half the screen.
Now, let's look at (nearly) the same image, but using a cylindrical projection on a curved screen. Note how the cave and the house appear to be about the same size now, and the trees take up most of the screen. You lose some vertical fov in the center, but if this was a shooter game with a guy on that roof, you could headshot him without even zooming in. Furthermore, looking off to your left, you see *much* more of the screen, and it's all the right size. (It may be hard to tell since the views aren't identical, but measuring from the base images: on the rectilinear screen, the rock is 125/614 pixels high, or 20.4% of the screen, and the house is 49/614 px or 8.0%, while on the cylindrical screen the rock is 55/340 px or 16.2%, and the house is 51/340 px or 15.0%.)
Here's the cylindrical projection on a triple-monitor setup (27", 16:9, 5760 x 1080 total resolution). It's more than 180° horizontal, but still has a decent vertical view. I'm sure there's a happy medium somewhere, but this just illustrates how much less distortion there is even on a flat screen. The image should zoom in a little near the edges to correct the distortion, but it's more playable already than on the 5-screen setup with rectilinear projection.
For reference, here's the image I used for the cylindrical projection. It's actually just a bunch of regular screens I stitched together in paint.net to look about right. I completely forgot to go back to a normal resolution before taking all the screenshots, then didn't realize what I'd done until I was like 180° into the image, so the resolution is crap (340 pixels vertical), which is also why the Sketchup close-ups look so terrible. I thought about re-doing it at 1080p vertical, but I got lazy and never did. I don't have a triple-monitor setup, but I bet if someone who does takes the full-sized image, zooms in so it takes up the whole screen vertically (and presumably goes way off the screen horizontally), and has the monitors tilted so they're all the same distance, it will look pretty decent as you scroll left and right (other than the low resolution of course).
Here are a couple other ideas I played with that are far out of my reach for the moment. The first two would require a lot of monitors (12 for the 360° and 6 for the 180°), and cylindrical projection to look right, but would be very immersive I think. While a full 360° isn't necessary, especially if you have a racing seat covering a lot of it, I think 270° is probably a good place to shoot for. It would give you a good image in the central portion of your vision from left to right, with enough peripheral to feel pretty immersive, and would allow you to get out of the cockpit without crawling under the screens. At 9 screens (for this vertical field of view), it would take a lot of hardware, but I think modern computers could probably handle it at lower graphical quality, especially if we could get the games to render the 6 side screens (3 left, 3 right) at lower resolutions, and the three center screens at higher resolutions. The 360° setup is about 9' wide, with ~52" screens, and the 180° setup is about 7' wide, with ~39" screens, but you could get down to about 5'4" with 30" screens for the same effect (there are actually 2 half-height screens per "monitor" to give it a more round appearance in the model).
This third idea would be extremely expensive, and is likely out of the reach of off-the shelf parts, but would bring the immersion way up. Because it uses square screens that are 90° vertical and horizontal, a viewer sitting at the center would see zero distortion using conventional rendering methods. Using rear-projection screens and a bunch of 1080p projectors, you could probably pull off the "monitor" portion pretty seamlessly. But using just the top, left, center, and right screens and 6 projectors per screen (and cutting off the excess pixels to keep each side square), you'd be looking at almost 40 Mpx per frame across 24 monitor outputs, and I'm not sure how you could do that except using multiple rigs synchronized to each other. With four good rigs, you could probably pump out six 1080p images per rig and get the job done, but the only games I know of with multi-boxing capability are Gran Turismo 5/6 (which aren't available on the PC) and Grand Prix Legends (which is quite old and graphically outdated, and uses a third-party hack which I'm not sure can render anything besides the default 45° left, center, and 45° right views). The second image has a 52" monitor on the wall to show the difference in scale (the walls are 10' x 10', with the viewer 5' from the center of each). Obviously, you could use smaller screens that are closer -- a six foot screen at a distance of three feet would be fine -- but I can already see subpixel elements on my 52" at 4 feet, so you'd have to go way higher than just 1920 x 1920 for a 90° view at the correct distance.
As a final note, my current setup uses a racing cockpit similar to the model in Sketchup, but I have a sliding keyboard tray, mouse tray, elbow rest, and 7.1 speaker setup attached to the rig (and no G25 yet
). The monitor is sitting on a stand that isn't directly connected to the cockpit, to avoid thrashing it so much while I'm slamming the steering wheel around, and I usually have the steering wheel disconnected while I'm not racing so I can see the entire monitor. If I ever get a multi-monitor setup, I'll probably rebuild the rig from scratch to fix a few design flaws the prototype has. You may have noticed the extra beds, shelves, and doors in the background of some of the pictures. That was just me figuring out how I could fit the extra monitors on my rig in my existing bedroom.