3DVisionActivator - shuttering without Nvidia
Posted: Tue Apr 02, 2024 11:07 am
Program to drive the Nvidia 3D Vision Shutter glasses without the Nvidia 3D Vision driver.
Initially made by "cms": viewtopic.php?p=23830#p23830
Source and binary:
https://github.com/FlintEastwood/3DVisionActivator Keys:
F1 - toggles stereo
F2 - swaps eyes
F3 - next Monitor profile(or loops to the first)
F5 / F6 - modifies the separation
X / S - modifies the x timing (Delay from Monitor-Refresh-Start to Shutter open ??)
Y / A - modifies the y timing (Shutter open time)
W / Q - modifies the w timing (No effect??)
I - toggle timing increment (1000/100/10/1)
ESC - Close App
The controller driver for the IR emitter is still needed. You can find it in the Nvidia graphics driver 425.31 (The installer can be unpacked with 7zip for example).
In theory it can run on any GPU.
!!! Don't start the app when IR-emitter is in sleep-mode !!!
!!! G-Sync has to be off - very important !!!
Known Bugs:
When Nvidia IR emitter goes to sleep-mode and the app is started, Win10 will crash with the BSOD "SYSTEM_SERVICE_EXEPTION" "ucx01000.sys" ! (Workaround is to unplug and plug the IR emitter)
When the IR emitter is woken up from sleep-mode by another 3D-Vision app (NvStTest.exe for example) and the app is started, it hangs on initializing the IR emitter. (Workaround is to unplug and plug the IR emitter)
The cube sometimes flickers - mostly with a lot of background activity- FBO flipping seems to miss the VSync sporadically.
How it works:
There are two rendering contexts (in separate threads). The offscreen thread is not bound by vsync and continually renders the scene to a set of frame buffer objects (one for each eye). The visible context is bound by vsync and has access to these fbos. It renders the appropriate eye fbo to the window and toggles the 3dVision's "eye." The IR-emitter Init sequence is now borrowed from "libnvstusb" and works really good.
A file named "MonitorTimings.ini" holds the Timing profiles. The program will initially use the top profile. (You may want to change this)
If you have a 3D-Vision certified Monitor, you can find this timings with NvTimingsEd (https://github.com/rajkosto/NvTimingsEd) if you know the EDID-ID of your monitor.
The EDID_ID can be found with CRU (Custom Resolution Utility).(https://www.monitortests.com/forum/Thre ... tility-CRU): Some older 3D Vision monitors (my Alienware2310 for example) need to be switched into 3D-mode to avoid ghosting. You can achieve this if you set a custom resolution in the GPU driver or with CRU - with exactly the values shown in NvTimingsEd. The important parameter here is the "total vertical lines", they increase to 1149 on the Aw2310 - triggering it to switch into 3D-mode.
That works with the last 3D Vision monitors too, but for my AsusPG248Q it was just neccessary to enable ULMB (backlight strobing) in the Monitor OSD . There is no difference between 3D-mode and ULMB I think.
If you don't have a 3D-Vision Monitor, you can try to find your own timings. X and Y are the important ones. Use CRU to find the exact RefreshRates of your monitor and calculate the Z from that (1000000 / RefreshRate = Z ).
So you can start a new MonitorProfile. If the monitor has a backlight strobing function, I would enable it.
X - seems to be the delay from VSync to shutter open
Y - time the shutter stays open
Z - should always be the exact frametime (8333.33us @ 120Hz) (But be careful. Most monitors dont work exactly with 120Hz, it's more like 119.983Hz for example)
W - unknown, mostly a bit more than half of the frametime. Seems to make no difference, but if you find something out - please let me know.
The Alienware2310 and the AsusPG248PG work really good @120Hz and @100Hz. I was able to watch 3D trailers with sView in EmulatedQuadBuffer-mode. Sometimes an Eye reversing occures - that could be a problem.
Flugans Geo3D works in FrameSequential mode too, but the GPU needs to maintain stable 120fps.
I would love to see this working with Geo11 .
I was able to shutter @144Hz on the AsusPG248Q with my own timings, but I can't enable Lightboost or ULMB @144Hz. That means a low Y-value to reduce ghosting. So I loose a lot of brightness compared to 120Hz with ULMB.
You can not shutter @60Hz !!! That seems to be out of range for the timers in the emitter.
Initially made by "cms": viewtopic.php?p=23830#p23830
Source and binary:
https://github.com/FlintEastwood/3DVisionActivator Keys:
F1 - toggles stereo
F2 - swaps eyes
F3 - next Monitor profile(or loops to the first)
F5 / F6 - modifies the separation
X / S - modifies the x timing (Delay from Monitor-Refresh-Start to Shutter open ??)
Y / A - modifies the y timing (Shutter open time)
W / Q - modifies the w timing (No effect??)
I - toggle timing increment (1000/100/10/1)
ESC - Close App
The controller driver for the IR emitter is still needed. You can find it in the Nvidia graphics driver 425.31 (The installer can be unpacked with 7zip for example).
In theory it can run on any GPU.
!!! Don't start the app when IR-emitter is in sleep-mode !!!
!!! G-Sync has to be off - very important !!!
Known Bugs:
When Nvidia IR emitter goes to sleep-mode and the app is started, Win10 will crash with the BSOD "SYSTEM_SERVICE_EXEPTION" "ucx01000.sys" ! (Workaround is to unplug and plug the IR emitter)
When the IR emitter is woken up from sleep-mode by another 3D-Vision app (NvStTest.exe for example) and the app is started, it hangs on initializing the IR emitter. (Workaround is to unplug and plug the IR emitter)
The cube sometimes flickers - mostly with a lot of background activity- FBO flipping seems to miss the VSync sporadically.
How it works:
There are two rendering contexts (in separate threads). The offscreen thread is not bound by vsync and continually renders the scene to a set of frame buffer objects (one for each eye). The visible context is bound by vsync and has access to these fbos. It renders the appropriate eye fbo to the window and toggles the 3dVision's "eye." The IR-emitter Init sequence is now borrowed from "libnvstusb" and works really good.
A file named "MonitorTimings.ini" holds the Timing profiles. The program will initially use the top profile. (You may want to change this)
If you have a 3D-Vision certified Monitor, you can find this timings with NvTimingsEd (https://github.com/rajkosto/NvTimingsEd) if you know the EDID-ID of your monitor.
The EDID_ID can be found with CRU (Custom Resolution Utility).(https://www.monitortests.com/forum/Thre ... tility-CRU): Some older 3D Vision monitors (my Alienware2310 for example) need to be switched into 3D-mode to avoid ghosting. You can achieve this if you set a custom resolution in the GPU driver or with CRU - with exactly the values shown in NvTimingsEd. The important parameter here is the "total vertical lines", they increase to 1149 on the Aw2310 - triggering it to switch into 3D-mode.
That works with the last 3D Vision monitors too, but for my AsusPG248Q it was just neccessary to enable ULMB (backlight strobing) in the Monitor OSD . There is no difference between 3D-mode and ULMB I think.
If you don't have a 3D-Vision Monitor, you can try to find your own timings. X and Y are the important ones. Use CRU to find the exact RefreshRates of your monitor and calculate the Z from that (1000000 / RefreshRate = Z ).
So you can start a new MonitorProfile. If the monitor has a backlight strobing function, I would enable it.
X - seems to be the delay from VSync to shutter open
Y - time the shutter stays open
Z - should always be the exact frametime (8333.33us @ 120Hz) (But be careful. Most monitors dont work exactly with 120Hz, it's more like 119.983Hz for example)
W - unknown, mostly a bit more than half of the frametime. Seems to make no difference, but if you find something out - please let me know.
The Alienware2310 and the AsusPG248PG work really good @120Hz and @100Hz. I was able to watch 3D trailers with sView in EmulatedQuadBuffer-mode. Sometimes an Eye reversing occures - that could be a problem.
Flugans Geo3D works in FrameSequential mode too, but the GPU needs to maintain stable 120fps.
I would love to see this working with Geo11 .
I was able to shutter @144Hz on the AsusPG248Q with my own timings, but I can't enable Lightboost or ULMB @144Hz. That means a low Y-value to reduce ghosting. So I loose a lot of brightness compared to 120Hz with ULMB.
You can not shutter @60Hz !!! That seems to be out of range for the timers in the emitter.