GSoC 2019: VR support through OpenXR - Weekly Reports

Week 5 (June 22 - June 30) - 1st Milestone reached

Here we go, Blender rendering a viewport to a (in this case simulated) HMD screen!:


Screenshot shows WMR device simulation, but it works with a real device too! And it’s awesome! Tweet with proper screencast will follow :wink: . The screenshot also shows a nice benefit from using official runtimes: They can extend the experience as useful. E.g. here Windows inserts a notification into the VR scene.

To my delight, performance seems quite fine for reasonably complex scenes. Further speedups are certainly possible, but it’s a nice start. This basically means the minimum viable product is reached, as defined in my project proposal.

Once again, this has been a fight. Patch needs some cleanup and isn’t committed yet. Note that this uses the DirectX compatibility layer. OpenGL only drawing will need a few more tweaks to work.

Changes done to get there:

  • OpenXR swapchain and swapchain images creation (4cfc3caa09, d749e8a2c4)
  • OpenXR frame timing, views, spaces and compositing layers management (8a676e8fa9, 6b43c82cb5, 867007d9d7)
  • Added wmSurface type and API, as a container to manage non-window drawable surfaces (cf4799e299). Manages OpenGL and GPU context and allows drawing an offscreen viewport outside of the normal window drawing. Means we don’t need to set up the wmWindowWorkSpacebScreenScrAreaARegion chain just to draw a viewport.
  • Support purely offscreen rendered VR Sessions (no separate Blender VR session window required anymore - 231dbd53bf).
  • Draw an offscreen viewport using the new wmSurface type (109be29e42)

Also:

Next Week

As per schedule: Add various debugging/validation tools. This is really needed to make further work easier. I’d also like to work on good error handling (e.g. fail with good user message when no compatible OpenXR runtime is found).

Besides that, rendering needs some polish and OpenGL only drawing needs to be finished.

16 Likes