It's basically a display that renders 45 horizontal views and then you can look around freely within that lightfield space.
Here's a short video of doom on the display, showing the 3d effect;
(Yes, you can literally peek around corners now)
I used the existing stereo rendering system as base, added 45 eyes and implemented my own eye merge shader.
Rather than saving each eye to a texture, they are rendered directly additively in sequence, where undesirable subpixels are just black.
Relevant code is in the main branch here;
I've shared and discussed this on discord and biospud recommended I post this here.
You can build and run it without the display but it will look petty messy.
If you set vr_ipd to 0 it's rendered flat and viewable on normal displays.
Correct way to run this would be
gzdoom +vr_mode 15 -width 2560 -height 1600
There's a few caveats I have for current implementation;
- Each display is unique, so they need to have calibration data entered for it to display correctly.
These are currently implemented as cvars you have to type in manually.
They could be read from the USB HID device and I would welcome some help with that if that were to be implemented.
- The display depth is shallow, and distant focus with default parameters is unplayably blurry.
I have currently fixed this by adjusting frustumShift to fit the scene depth within the display's optimal range.
I don't know if I can justify this kind of magic number screen adjustment.
But if not corrected for, this should at least be communicated to the user somehow.
- Another effect of adjusting frustumShift is that gun is still rendered at it's original depth and is now underground.
This is an issue with regular stereo modes too so I think it would be useful to make a separate feature to match gun depth to vr_screendist/vr_idp or to make it adjustable.
- It seems that this is triggering a bug where ui and menu turn invisible when I open a door.
Some side effect of having 45 eyes?