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 . 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 thewmWindow
→WorkSpace
→bScreen
→ScrArea
→ARegion
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:
- Completed GSoC phase 1 evaluation of my mentor and the project.
- Wrote a general public evaluation of the project’s first phase in the other thread: GSoC 2019: Core Support of Virtual Reality Headsets through OpenXR - #15 by julianeisel. Thought this was a nice moment to communicate my thoughts on the project progress.
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.