Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

XR Feature Support Roadmap #2571

Open
9 of 46 tasks
tbirdso opened this issue Sep 9, 2022 · 0 comments
Open
9 of 46 tasks

XR Feature Support Roadmap #2571

tbirdso opened this issue Sep 9, 2022 · 0 comments
Labels
type: feature request 💡 Desired capabilities / enhancements

Comments

@tbirdso
Copy link
Contributor

tbirdso commented Sep 9, 2022

Motivation

Browser-based virtual and augmented reality support is an evolving technology made feasible by the WebXR API, preceded by now-deprecated APIs such as WebVR and Cardboard. WebXR browser adoption is growing with most major browsers (Chrome, Edge, Firefox) supporting the WebXR API to various extents.

We aim to add key feature support so that developers can deliver browser-based virtual and augmented reality scenes with the vtk.js platform. Features will be accompanied by documentation and example scenes for user and developer accessibility.

This roadmap provides a high-level overview of XR features we would like to pursue in VTK.js along with potential paths for implementation. Roadmap progress is highly dependent on stakeholders and relevant project needs. If you are interested in completing a feature on the roadmap, please consider leading or funding that development contribution to VTK.js.

Target Platforms

We aim to target the intersection of platforms supported by vtk.js and by WebXR; that is, devices and browsers supporting WebGL rendering along with the WebXR API.

Target hardware includes virtual reality and augmented reality headsets, mobile devices with AR capabilities, and holographic displays. Please see VTK.js WebXR documentation for a complete list of target devices.

A complete list of hardware supported by the WebXR standard may be found here.

Roadmap

The features below are planned for eventual support in VTK.js and are listed in rough expected chronological order. A timeline is not currently available for WebXR feature development.

1. Basic XR Rendering Support

We aim to initially support XR rendering for a tailored subset of XR target devices.

Backlog:

2. Extend Supported Device List

We aim to support advanced rendering to the full list of target XR hardware. Scene interaction is not yet supported.

Backlog:

3. Basic XR Controls

We aim to add support for basic XR interactions with VTK.js scenes. We will loosely base interaction infrastructure on the vtkRenderWindowInteractor3D, vtkVRRenderWindowInteractor, and vtkVRInteractorStyle hierarchy defined in the VTK C++ library.

  • Evaluate feasibility of porting vtkRenderWindowInteractor3D and vtkOpenXRInteractorStyle.h from VTK C++ OpenXR module to vtk.js. This would help to standardize VR/AR interactions and controls according to the vtk.js interaction system.
  • Implement vtk3DRenderWindowInteractor to handle 3D input events
  • Implement vtkXRRenderWindowInteractor to extend vtk3DRenderWindowInteractor with XR-specific events
    • The WebXR Gamepads Module extends the Gamepads API for VR and AR controllers, but in practice there are inconsistencies in how VR/AR event data is structured. Mobile AR interactions also typically yield 2D screen touch coordinates while HMD-based VR with controllers yields data with 3D spatial information. Consider whether we need bespoke interactors to handle events on different XR target platforms.
  • Implement vtkXRInteractorStyle to define how to handle XR-specific events
    • Consider whether we need more granular interactor styles such as vtkVRHMDInteractorStyle, vtkARMobileInteractorStyle, etc to appropriate handle view behavior
  • Implement basic VR controls for user comfort:
    • Locomotion in the direction of the controller
    • Locomotion in the direction of a selected camera view
    • Discrete, "snap" rotation by a fixed angle about the world "up" vector
  • Implement a vtkActor to render controller model(s) at controller positions for user comfort

Backlog:

4. Advanced XR Controls

We aim to add support for advanced XR interactions with VTK.js scenes.

  • Identify and handle advanced VR controls and scene interactions, including:
  • Identify and handle advanced AR controls and scene interactions, including:
    • 2D-to-3D point and cell picking
    • 2D widgets / UI control overlays
    • 2D widgets displayed on 3D panels
    • WebXR anchors for fixing virtual data in a 3D scene
  • Identify and handle advanced holographic display controls, including:
    • Optionally disable 3D view interactions while holographic display is running
    • Enforce standard VTK.js 3D view interactions while Looking Glass Factory popup window is running
    • Add VTK.js interactor style support to adjust focal point via the Looking Glass Factory WebXR polyfill
      • May require updates to the LGF WebXR polyfill API

5. Stretch Goals

This goals are not prioritized, but would be nice to have as part of the VTK.js WebXR feature set.

@tbirdso tbirdso added the type: feature request 💡 Desired capabilities / enhancements label Sep 9, 2022
@tbirdso tbirdso changed the title XR Feature Support XR Feature Support Roadmap Nov 15, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: feature request 💡 Desired capabilities / enhancements
Projects
None yet
Development

No branches or pull requests

1 participant