tornavis/source/blender/windowmanager
Julian Eisel dc2df8307f VR: Initial Virtual Reality support - Milestone 1, Scene Inspection
NOTE: While most of the milestone 1 goals are there, a few smaller features and
improvements are still to be done.

Big picture of this milestone: Initial, OpenXR-based virtual reality support
for users and foundation for advanced use cases.
Maniphest Task: https://developer.blender.org/T71347
The tasks contains more information about this milestone.

To be clear: This is not a feature rich VR implementation, it's focused on the
initial scene inspection use case. We intentionally focused on that, further
features like controller support are part of the next milestone.

- How to use?
Instructions on how to use this are here:
https://wiki.blender.org/wiki/User:Severin/GSoC-2019/How_to_Test
These will be updated and moved to a more official place (likely the manual) soon.

Currently Windows Mixed Reality and Oculus devices are usable. Valve/HTC
headsets don't support the OpenXR standard yet and hence, do not work with this
implementation.

---------------

This is the C-side implementation of the features added for initial VR
support as per milestone 1. A "VR Scene Inspection" Add-on will be
committed separately, to expose the VR functionality in the UI. It also
adds some further features for milestone 1, namely a landmarking system
(stored view locations in the VR space)

Main additions/features:
* Support for rendering viewports to an HMD, with good performance.
* Option to sync the VR view perspective with a fully interactive,
  regular 3D View (VR-Mirror).
* Option to disable positional tracking. Keeps the current position (calculated
  based on the VR eye center pose) when enabled while a VR session is running.
* Some regular viewport settings for the VR view
* RNA/Python-API to query and set VR session state information.
* WM-XR: Layer tying Ghost-XR to the Blender specific APIs/data
* wmSurface API: drawable, non-window container (manages Ghost-OpenGL and GPU
  context)
* DNA/RNA for management of VR session settings
* `--debug-xr` and `--debug-xr-time` commandline options
* Utility batch & config file for using the Oculus runtime on Windows.
* Most VR data is runtime only. The exception is user settings which are saved
  to files (`XrSessionSettings`).
* VR support can be disabled through the `WITH_XR_OPENXR` compiler flag.

For architecture and code documentation, see
https://wiki.blender.org/wiki/Source/Interface/XR.

---------------

A few thank you's:
* A huge shoutout to Ray Molenkamp for his help during the project - it would
  have not been that successful without him!
* Sebastian Koenig and Simeon Conzendorf for testing and feedback!
* The reviewers, especially Brecht Van Lommel!
* Dalai Felinto for pushing and managing me to get this done ;)
* The OpenXR working group for providing an open standard. I think we're the
  first bigger application to adopt OpenXR. Congratulations to them and
  ourselves :)

This project started as a Google Summer of Code 2019 project - "Core Support of
Virtual Reality Headsets through OpenXR" (see
https://wiki.blender.org/wiki/User:Severin/GSoC-2019/).
Some further information, including ideas for further improvements can be found
in the final GSoC report:
https://wiki.blender.org/wiki/User:Severin/GSoC-2019/Final_Report

Differential Revisions: D6193, D7098

Reviewed by: Brecht Van Lommel, Jeroen Bakker
2020-03-17 21:42:44 +01:00
..
gizmo VR: Initial Virtual Reality support - Milestone 1, Scene Inspection 2020-03-17 21:42:44 +01:00
intern VR: Initial Virtual Reality support - Milestone 1, Scene Inspection 2020-03-17 21:42:44 +01:00
message_bus Cleanup: Fix forward declaration of headers 2020-03-06 17:26:32 +01:00
CMakeLists.txt VR: Initial Virtual Reality support - Milestone 1, Scene Inspection 2020-03-17 21:42:44 +01:00
WM_api.h VR: Initial Virtual Reality support - Milestone 1, Scene Inspection 2020-03-17 21:42:44 +01:00
WM_keymap.h Cleanup: Reduce context usage in UI functions 2020-03-06 16:27:13 +01:00
WM_message.h doxygen: add newline after \file 2019-02-18 08:22:12 +11:00
WM_toolsystem.h VSE: Tool system integration 2020-01-22 15:06:18 +01:00
WM_types.h VR: Initial Virtual Reality support - Milestone 1, Scene Inspection 2020-03-17 21:42:44 +01:00
wm.h VR: Initial Virtual Reality support - Milestone 1, Scene Inspection 2020-03-17 21:42:44 +01:00
wm_cursors.h UI: Changes to Paint Cursors 2019-09-30 16:46:05 -07:00
wm_draw.h Cleanup: Rename ARegion variables from ar to region 2020-03-06 17:19:23 +01:00
wm_event_system.h Cleanup: Rename ARegion variables from ar to region 2020-03-06 17:19:23 +01:00
wm_event_types.h Cleanup: add decimal values for event types, order by value 2020-03-06 11:52:31 +11:00
wm_files.h Cleanup: Reduce context usage in UI functions 2020-03-06 16:27:13 +01:00
wm_surface.h VR: Initial Virtual Reality support - Milestone 1, Scene Inspection 2020-03-17 21:42:44 +01:00
wm_window.h Cleanup: Reduce context usage in UI functions 2020-03-06 16:27:13 +01:00