Interacting with objects from a distance is very janky due to the lever effect of doing being far away.
It's currently only possible to easily interact with the side of the objet that's currently facing the user. Ergo, to interact with a button on the side of the object would require the user to circle around it - which, the further the user is away from the object, takes increasingly longer.
Our current way of displaying meta-UI like close- and resize buttons at all times for all users (regardless of permission) is inelegant and adds visual clutter.
Inspiration
Old notes on "ghost objects"
Portals
HL:Alyx's gravity glove
Glossary
Active: The descriptor used for an object that have been selected for interaction after intent have been communicated and acted on.
Activator The user - or rather, the avatar of the user - who requested to interact with the object.
How to communicate intent to interact with a remote object?
Suggestion 1: Point at the object, grab - and then pull it toward you. The grab button can now be released and both hands are free to interact with the object.
Suggestion 2: A "grab double-click" gesture, too. Which could then exactly mirror the gesture to close the "portal".
How to communicate intent to stop interacting with the active remote object?
Suggestion 1: Point at the "ghost" object, grab and quickly "push"...
...away from you?
...toward its original position?
Suggestion 2: Double-grab-click the portal'd object (only if the interaction intent is the grab-double-click, too)
What manipulation of the active object should/should not be allowed? And would said manipulation be reflected in the original object in its original place?
Moving
Rotating
Resizing
Yes, why not? Part of the problem we're solving is the lack of fine-motor movement when manipulating something from afar.
How would the object represent itself in front of the activator when activated?
Two options:
As a "ghost object", a cloned representation of the original object.
As a portal through which the object can be interacted with. Imagine an invisible camera appearing right in front of the object, and the portal being its display (through which also interactions can be transmitted).
Portal Style
Ghost Object Style
Not necessary if using the "portal" metaphor. (Instead, we'd have to deal with three types of moving:
"Physically" moving the portal ("camera"). Probably not great, as it would still require a lot of movement from the activator.
Panning the camera viewport (Moving the "camera" using the portal as a proxy).
Moving the active object through the portal by reaching into the portal and directly manipulating the object.
Would other users be able to see the active object in front of the activator?
No, the UI is "private" to the activator.
However, it might be a good idea to somehow communicate outward that the activator is busy somehow.
Would additional UI (permissions, etc) be made available for the user when the object has been activated?
What problems do we want to solve?
Inspiration
Glossary
How to communicate intent to interact with a remote object?
How to communicate intent to stop interacting with the active remote object?
What manipulation of the active object should/should not be allowed? And would said manipulation be reflected in the original object in its original place?
How would the object represent itself in front of the activator when activated?
Two options:
Would other users be able to see the active object in front of the activator?
Would additional UI (permissions, etc) be made available for the user when the object has been activated?