blender/intern
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
..
atomic Cleanup: comments (long lines) in atomic 2019-05-01 20:34:12 +10:00
audaspace CMake: Refactor external dependencies handling 2020-01-23 16:59:18 +01:00
clog Cleanup: quiet warnings 2019-10-07 12:22:05 +11:00
cycles Cleanup: process colorspace conversion with a 1D pixel array 2020-03-17 17:33:08 +01:00
dualcon Fix T53581: remesh modifier artifacts in sharp mode 2019-06-17 18:53:49 +02:00
eigen Fix eigen/openmp link error in some build configurations 2020-02-09 16:29:37 +01:00
ffmpeg Use FFmpeg's own av_guess_frame_rate() function instead of guessing ourselves 2019-09-19 15:12:53 +02:00
ghost VR: Initial Virtual Reality support - Milestone 1, Scene Inspection 2020-03-17 21:42:44 +01:00
glew-mx ClangFormat: apply to source, most of intern 2019-04-17 06:21:24 +02:00
guardedalloc Fix potential crash in guarded alloc stats, when there are no allocations 2020-01-31 13:01:07 +01:00
iksolver Cleanup: Fix build error with MSVC 2019-08-21 10:38:33 -06:00
itasc Cleanup: use 2 space indentation for CMake 2019-04-17 06:35:54 +02:00
libc_compat Build: change libc compatibility code to only be used for new glibc 2020-02-27 12:52:19 +01:00
libmv Cleanup: include missing CMake headers 2020-01-25 20:15:35 +11:00
locale CMake: Refactor external dependencies handling 2020-01-23 16:59:18 +01:00
mantaflow Fluid: Updated manta pp files 2020-03-17 11:57:04 +01:00
memutil Cleanup: Fix forward declaration of headers 2020-03-06 17:26:32 +01:00
mikktspace Fix more undefined behavior in tangent space computation 2020-01-31 12:56:20 +01:00
numaapi Fix numaapi on PowerPC platforms 2020-01-15 11:18:24 +01:00
opencolorio Fix memory leak in the colorio fallback implementation. 2020-03-06 12:29:12 +01:00
opensubdiv OpenSubdiv: Make non-full geometry less strict for sharpness 2020-03-13 14:07:44 +01:00
openvdb Cleanup: deduplicate OpenVDB library definitions/include/libs logic 2020-02-26 18:13:14 +01:00
quadriflow Cleanup: cmake indentation 2020-03-04 11:02:35 +11:00
rigidbody CMake: Refactor external dependencies handling 2020-01-23 16:59:18 +01:00
string Cleanup: comments (long lines) in string 2019-05-01 20:32:38 +10:00
utfconv Cleanup: spelling, repeated words 2019-11-25 00:55:11 +11:00
CMakeLists.txt Build: add compatibility between precompiled libraries and new glibc 2020-02-26 18:13:14 +01:00