cancel
Showing results forย 
Search instead forย 
Did you mean:ย 

Capsule - CUDA-based omni-stereo image viewer

joan
Level 4
This is a small viewer for omni stereo images. Your feedback is appreciated ๐Ÿ˜„

Capsule-0.3.0-x64.zip

The application does basically one thing: display omnidirectional stereoscopic images to the Rift.



Supported formats

  • Equirectangular projections in Left/Right and Over/Under configurations.

  • Stereo-cubemaps in the "long strip" format used by GearVR "Oculus 360 Photos" and OTOY's ORBX app.

  • *.vr.jpeg files produced by Google Cardboard Camera app.


Usage

  • Open files by using the menu or by dragging and dropping from Windows Explorer.

  • Navigate through files in the current directory with the Left and Right arrow keys.

  • Use the UI options to control the quality/performance tradeoff.


System requirements

  • Nvidia GPU with CUDA compute capability 3.0+. (GTX 600 series or greater).

  • Windows 7, 8 or 10 in x64 and with .NET 4.5.

  • Oculus runtime 0.8.0.0.

  • Face with 2 or more eyes.


Design goals

  • Being able to quickly view OTOY's Render the Metaverse stereo cubemaps on the DK2.

  • Being able to compare and study omni-stereo images from different sources and formats.

  • Improving my CUDA programming and exploring the CUDA/Oculus interop.


Performances

  • I maintain the 75fps on my GTX 660 at 2.0 pixel density for a 18K stereocubemap and 8K equirect.

  • Note that the equirectangular kernel is slightly slower than the cubemap one. Adjust pixel density accordingly if you get judder.

  • If you get flickering on one eye, make sure there is no other GPU heavy application running.


Please keep in mind that this is baked-in stereo, you have 2 DOF. Avoid translating your head too much and tilting. A slight distortion wobble is to be expected when rotating your head. If there is a lot of wobble it might be coming from a higher than normal latency, verify this with the performance hud (F11).

Thanks for reading. Your feedback is appreciated :idea:
32 REPLIES 32

joan
Level 4
"Clodo" wrote:
It seem locked to 60 FPS (Confirmed by Render Timing, Compositor Frame Rate: 60 hz). Any other player works perfectly (Virtual Desktop, MaxVR).
GeForce GTX 980 Ti - Intel Core i7-6700 CPU @3.40Ghz (8 CPU)


That is strange. Would you happen to have a dual GPU system? I also have a GTX 980Ti now, and I don't reproduce this issue.

Clodo
Level 4
I have an Intel Core i7-6700 CPU @3.40Ghz (8 CPU)
with only one GeForce GTX 980 Ti.

It really seem locked to 60 fps...

Changing pixel-density or queue-ahead don't change anything.
I don't have any issue with other software for DK2, only this.
I don't have any idea about what i can try, sorry.


Apart this issue, i'm very very very interested in your player.
I made a patch for POV-Ray to render ODS images. Here you can find high-resolution examples that maybe can be useful for stress-test of your image viewer. I can render in more highest resolution if you need that.

.... WOW i notice just now you are the same guy that reply to me in this other topic!

I still think it's incredible that is not currently possible to build a pre-rendered video with a correct resolution (at least 6000 x 6000 as you explain to me) at correct 90 framerate (Rift CV1). Apart the codec problem, there isn't any player that playback this kind of resolution & fps.
I'm asking what low are the average resolution choosed by major cinema studios for pre-rendered films.

Do you plan to improve this image-viewer to support also videos or jpeg image sequence?

Thanks for all your great work!

Clodo
Level 4
Note: Virtual Desktop, the same image, the Render HUD OSD display show a "Compositor Frame-rate" always around 75 Hz, and never drop any "Compositor Missed V-Sync Count".
With your image-viewer, 60 Hz almost constant and a lot of "Missed" counter.

joan
Level 4

Render CPU time: 13.43 ms

This is awkward. It's at 1.8 ms tops on my machine. This is certainly where the framerate limit is coming from, but as to the underlying cause, I have no idea. Is POV-Ray running simultaneously?

I don't have plans to add video or image sequences to it at the moment. I'm using the codebase as a sandbox for lightfield rendering experiments for the time being.

I have trouble with the stereo in your image, does it look ok in all directions in Virtual Desktop for you?

Clodo
Level 4
"Render CPU time" it's always high (>10) with your Capsule.
Close Capsule, launch Virtual Desktop, 75 fps with a "Render CPU time" always under 1.
Close VD, relaunch Capsule, >10.
There isn't any other app open or running, test done after a reboot.

I have trouble with the stereo in your image, does it look ok in all directions in Virtual Desktop for you?

For me, yes. I build the formulas for POV-Ray based on the 'raytracing' section of this doc:
https://developers.google.com/cardboard ... ontent.pdf

husakm
Level 4
The 60 FPS sounds to me like the limit of the 2D preview on the monitor. Are you sure you had disabled V-sync for the 2D preview and the FPS in limited only by the Rift V-sync ?

Related question: Why do you need CUDA for the viewer ? What is wrong with normal methods of mapping on cube, sphere cylinder e.t.c. ... ?

joan
Level 4
"husakm" wrote:

Related question: Why do you need CUDA for the viewer ? What is wrong with normal methods of mapping on cube, sphere cylinder e.t.c. ... ?

Nothing wrong, the reason is I did this project almost specifically to learn/improve on CUDA. Which is also why it's focused on a single task. I'm not worried that there will be plenty of more general purpose applications to do the same and more.

I do call wglSwapIntervalEXT(0); to disable VSync and let the Oculus runtime handle it.

husakm
Level 4
wglSwapIntervalEXT(0); works only if the user have set in nVida control panel Vertical Sync "Off" or "Use 3D application setting". If the user set "On" he will get the 60 Hz refresh rate because the wglSwapIntervalEXT(0); command will be overwritten and ignored ... I believe this is the reason of the 60 Hz mysterious issue ๐Ÿ˜‰ ...

joan
Level 4
"husakm" wrote:
wglSwapIntervalEXT(0); works only if the user have set in nVida control panel Vertical Sync "Off" or "Use 3D application setting". If the user set "On" he will get the 60 Hz refresh rate because the wglSwapIntervalEXT(0); command will be overwritten and ignored ... I believe this is the reason of the 60 Hz mysterious issue ๐Ÿ˜‰ ...

Aha! Yes, I get exactly the reported behavior when I switch this option. Thanks.
I followed the OculusRoomTinyGL code sample on this so it will probably crop up in other applications as well. Good to know.

Clodo
Level 4
Confirmed, setting Vertical Sync "Off" in nVida control panel resolve the issue, 75 fps now. Re-set to On reproduce the issue, 60 fps max.
Thanks.