▲ 14 r/ReShade

ReShade angular perspective correction (the eyes — in this video, the camera), regardless of the orientation of the side monitors. The projection is always like a normal flat render. The position of the camera also drives the head in the cockpit (x, y).

For those familiar with multi-display gaming setups, I'd love to hear your feedback on this.

u/No_Albatross8310 — 4 days ago

The shader transforms three flat monitors into windows onto a virtual world by reprojecting the game's flat backbuffer onto a virtual cylinder anchored in real-world space behind the screens. As my head moves, the projection updates so that the game scene stays geometrically consistent with my real eye position.

What's shown:
3DoF (translation only), filmed with my phone to show my point of view

Note: rendering is on flat 2D UV with no depth information. The apparent size of the scene stays constant from my eyes because the shader scales the image inversely to my distance

Game: War ThunderSpatial shader correction for triple-monitor head-coupled display. pan x y z


Game: War Thunder
u/No_Albatross8310 — 2 months ago
▲ 2 r/u_No_Albatross8310+1 crossposts

I wrote a ReShade FX shader for parallax-correct projection across three physical monitors of different size, angle, and PPI. Running on Linux through vkBasalt but the FX code is fully ReShade-compatible.

The concept

The three monitors behave as glass windows onto a virtual world. The shader projects the game's flat backbuffer onto a virtual cylindrical surface anchored in real-world space behind the monitors, and recomputes the view based on the eye position.

Fully geometry-driven

Built from the millimeter-accurate 3D positions of each monitor's corners and the spatial layout. The shader doesn't care about the laterals' angle, size, or orientation — change the physical setup, update the corner coordinates in the header, and it adapts automatically. The bezels are naturally compensated as real window frames: nothing rendered where the bezel physically sits, which is geometrically correct.

Note on visual framing

The lateral panels appear more "compressed" than the central one. Intentional: my side monitors have lower PPI, so fewer pixels cover a wider angular range. The result is perfect geometric continuity across all three displays — lines flow seamlessly from one panel to the next.

Eye position input

For testing I'm feeding head X/Y/Z from my X-56 throttle through /dev/shm/eyeposition, which the shader reads via source = "eyeposition". IR head tracking will replace the joystick later.

u/No_Albatross8310 — 2 months ago