-
Notifications
You must be signed in to change notification settings - Fork 58
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
Refactoring to support OpenVR and OpenXR, and streamline reuse in SlicerMixedReality #121
Comments
Following discussion with @jcfr in #127, I suggest that we need to come to a common definition of terms before we can move forward with organizing proposed XR feature sets among the To be clear, both terms have been used in a variety of ways in research and industry.
It is particularly important to establish what these terms mean when we use them in 3D Slicer because underlying libraries use the same terms to mean different things.
I see three possible approaches to standardization:
Given existing buy-in for the |
Thanks for the detailed comment 🙏 Considering the ambiguous meaning of That way we would have:
Footnotes
|
Feel free to take over SAR, its main goal was to implement camera param for intrinsic calibration and some convenience modules for screen based augmented reality |
Thanks @adamrankin , I wasn't aware of SlicerAugmentedReality before this. That past effort does seem to illustrate the different directions that Slicer AR development can go.
@jcfr It's up to you, but my understanding of Under previous development If you prefer to maintain every augmented reality approach in one repository under different modules, then merging |
In general, users should not be concerned about knowing the difference between local/remote rendering or what interfaces (OpenXR, OpenVR) can be used for connecting to a headset. If the user needs to install a different extension or use a different module depending on what kind of headset he wants to use then it is an unnecessary complication. We would want Slicer scenes to be portable: it should be no problem to create a surgical plan on a VR headset and then the next day display that on an AR headset in the operating room. Of course if it was really difficult to put everything in a single module then we could consider having separate modules, or in extreme cases even different extensions. But since all headsets and ar/vr/xr should essentially work the same way in Slicer and most of the code would be shared anyway, it would add a lot of overhead if we had to keep code in sync in mulitple modules and extensions. We should rename the extension to MixedReality (prefixing the extension name with |
Fully agree. If it is palatable for community stakeholders, standardizing around common
VTK OpenXR supported devices does indeed include all previous VTK OpenVR supported devices. @jcfr Following our offline discussion, was your preference to migrate remoting files to this repo and rename from |
I support the single extension approach, both from the maintenance point of view and to minimize the hassle from the user side to get a certain device working. Having one extension, the user does not need to know about the difference between all these terms, especially that it is not really standardized either, as also illustrated by @tbirdso 's comment above. The brand value of SlicerVR is questionable I think, as it worked with minimum feature set for two years, then did not work basically at all for a few years, and we are still not fully back to working again (I thought so but there are reports on discourse about intreractions). So I don't consider renaming to MixedReality a problem. The only thing I'd consider important is that the paper has gained some traction, and currently has 25 citations. |
The refactoring is intended to help with:
SlicerVirtualReality
)SlicerMixedReality
extensionApproach
Similarly to the VTK refactoring introducing
vtkRenderingVR
common to bothvtkRenderingOpenVR
andvtkRenderingOpenXR
, proposed approach is the following:vtkMRMLAbstractVRViewNode
that will be common ancestor tovtkMRMLVirtualRealityViewNode
andvtkMRMLMixedRealityViewNode
vtkSlicerAbstractVRLogic
providing generic methods like the following:AddVRViewNode
GetVRViewNode
GetDefaultVRViewNode
GetVRConnected
/SetVRConnected(bool connect)
1GetVRActive
/SetVRActive(bool activate)
SetDefaultReferenceView
SetVolumeRenderingLogic
qSlicerVRConnectionPropertiesWidget
2,qSlicerVRDisplayPropertiesWidget
(andqSlicerVRAdvancedPropertiesWidget
?)qMRMLAbstractVRView
(common toqMRMLVirtualRealityView
andqMRMLMixedRealityView
)OpenVR
orOpenXR
runtimeqMRMLAbstractVRView
will provide generic methods like the following:addDisplayableManager
/getDisplayableManagers
setCamerasLogic
/camerasLogic
mrmlAbstractVRViewNode
renderer
/renderWindow
/interactor
updateViewFromReferenceViewCamera
3isHardwareConnected
4setActionManifestPath
/actionManifestPath
qMRMLAbstractVRViewPrivate
will provide generic methods like the following:startVR
/stopVR
desiredUpdateRate
/stillUpdateRate
doVR
createRenderWindow
/destroyRenderWindow
vtkSlicerAbstractVRViewInteractorStyle
Footnotes
To support "remoting", the function
vtkSlicerMixedRealityLogic::SetVRConnected(bool connect, const std::string& playerIPAddress)
will be changed to get/set the player IP usingvtkSlicerMixedRealityLogic::GetPlayerIPAddress/SetPlayerIPAddress
↩To support "remoting", the
SlicerMixedReality
extension will instead implementqSlicerVRRemoteConnectionPropertiesWidget
↩Will have to define what this mean in the context of mixed reality ↩
Since OpenXR introduce the concept of XR instance and session, we may have to revisit the terminology ↩
The text was updated successfully, but these errors were encountered: