Search Results for

    Show / Hide Table of Contents

    Expand Miniature: Selection based on Progressive Refinement in Dense VR Environments

    Independent Research - Spring 2024 - XR Collaboratory, Cornell Tech

    Student: Sissel Sun

    Video | Report | APK

    Overview

    This package is an implementation of two progressive refinement techniques, expand and world-in-miniature, as well as a combination of them, expand miniature.

    Components

    This package contains three progressive refinement techniques, Expand, WorldInMiniature and ExpandMiniature. They use RefineSelectState as a state indicator and attach a Proxy component for each instantiated proxy. There is a CustomXRTint component for highlighting proxies.

    It also includes a multi-object selection technique, CylinderSelect that is based on MultiObjInteractor, a direct interactor inherited from XRDirectInteractor.

    See architecture diagram below for details.

    Expand

    This component implements the logic for the expand technique. This component holds a reference to an interactor, an interaction manager and a list of objects passed by a multi-object interaction technique. It creates a proxy for each object selected and aligns them in a 2D plane for the user to pick one as final selection.

    Property Description
    Enable Multi Obj Interactor Event that enables the multi-object interactor for initial select. This allows integration for multi-object interactors of custom type.
    Disable Multi Obj Interactor Event that disables the multi-object interactor for initial select. This allows integration for multi-object interactors of custom type.
    Ray Interactor The ray interactor responsible for selecting one of the proxies for expand.
    Interaction Manager The XR interaction manager that is responsible for the interactor.
    Selected The transforms of objects of interest. Each object will be assigned a proxy in the expand panel.
    Distance To Player How far in z axis the arranged proxies should be placed in front of the player.
    Max Cols The maximum number of columns for the expand panel.
    Max Rows The maximum number of rows for the expand panel.

    ExpandInput

    This component handles user input and updates the Expand component accordingly.

    Property Description
    Activate The input action reference for activating the expand panel.

    ExpandFeedback

    This component is responsible for providing feedback for the expand technique. This includes rendering a grabbable panel that aligns the instantiated proxies for each object selected. This component also visualizes a line that connects the proxy of the object and the original object if the proxy is on hover. Both proxy and its original object will be highlighted on hover.

    Property Description
    Panel Prefab Prefab used for the 2D grabbable panel.
    Line Indicator Whether to display a line that connects the proxy and the original object if on hover.

    WorldInMiniature

    This component implements the logic for world-in-miniature. This component holds a reference to an interactor for selecting proxies inside the world-in-miniature, another interactor for grabbing and rotating the world-in-miniature, and a list of objects passed by a multi-object interaction technique.

    Property Description
    Enable Multi Obj Interactor Event that enables the multi-object interactor for initial select. This allows integration for multi-object interactors of custom type.
    Disable Multi Obj Interactor Event that disables the multi-object interactor for initial select. This allows integration for multi-object interactors of custom type.
    Ray Interactor The ray interactor responsible for selecting proxies inside the world-in-miniature.
    World Interactor The interactor that is responsible for grab and rotate the world-in-miniature, instead of selecting proxies within.
    Attach Transform The transform that the world-in-miniature is attached to each time it is created.
    World Size The size of the world-in-miniature.
    Selected The list of transforms of interest. Each object will be assigned a proxy in the mini world.

    WorldInMiniatureInput

    This component handles user input and updates the WorldInMiniature component accordingly.

    Property Description
    Activate The input action reference for activating the world-in-miniature.

    WorldInMiniatureFeedback

    This component is responsible for providing feedback for the world-in-miniature. This includes rendering a grabbable mini world as a sphere that contains the proxies for each object selected. This component also visualizes a line that connects the proxy of the object and the original object if the proxy is on hover. Both proxy and its original object will be highlighted on hover.

    Property Description
    World Prefab Prefab used as the spherical boundary of the the mini world.
    Line Indicator Whether to display a line that connects the proxy and the original object if on hover.

    ExpandMiniature

    Logic component for ExpandMiniature. It combines Expand and WorldInMiniature and syncs the selected original object for both techniques if any proxy of Expand or WorldInMiniature has been selected.

    ExpandMiniatureInput

    This component handles user input and updates the ExpandMiniature component accordingly.

    Property Description
    Activate The input action reference for activating the expand panel and the world-in-miniature.

    ExpandMiniatureFeedback

    Feedback component for ExpandMiniature. It renders indication lines between proxies and their corresponding objects on hover.

    Property Description
    Expand Line Indicator Whether there is a line indicator from the expand proxy to the original object. Overrides the lineIndicator property of ExpandFeedback.
    WIM Line Indicator Whether there is a line indicator from the world-in-miniature proxy to the original object. Overrides the lineIndicator property of WorldInMiniatureFeedback.

    Proxy

    The component that is attached to any proxy of an interactable. It stores the original interactable of the proxy, sets the interaction mask accordingly and provides a line renderer for connecting with the original interactable. It is automatically attached to any proxy when it's instantiated.

    RefineSelectState

    The state for Expand and WorldInMiniature. The sequence of states is as follows: InitialSelect -> RefineSelect -> ForceHover.

    State Description
    InitialSelect The state when the multi-object interactive is active. The user aims to select a set of objects.
    RefineSelect The state when a set of objects is selected and their proxies are created. The user aims to select one of these objects.
    ForceHover The state when the user selects one of multiple objects. The ray interactor is locked on this object with a curved line pointing to it. The user can follow the line to find the object and select it.

    CustomXRTint

    Simple Interactable Visual component that demonstrates hover or selection state with emissive tinting based on XRTintInteractableVisual. It adds a public function for manually setting the tint.

    MultiObjInteractor

    Custom direct interactor for multi-object selection. It inherits XRDirectInteractor.

    CylinderSelect

    Logic component of the multi-object selection technique based on a cylinder volume of adjustable size.

    Property Description
    Interactor The interactor of responsible for selecting multiple objects.
    Offset The offset of the cylinder's attach transform.
    Min Radius The minimum radius of the cylinder.
    Max Radius The maximum radius of the cylinder.

    CylinderSelectInput

    Input component for cylinder select. It handles user input for changing the cylinder's radius.

    Property Description
    Change Radius The input action reference for changing the cylinder's radius.

    CylinderSelectFeedback

    Feedback component of the multi-object selection technique based on a cylinder volume of adjustable size. It provides feedback based on the interactor's hover and select events by changing the color of the cylinder to hoverColor.

    Property Description
    Material The material for the cylinder.
    Color Color of the cylinder when the interactor is not hovering over any object.
    Hover Color Color of the cylinder when the interactor is hovering over any object.

    Installation instructions

    To install this package, follow these steps:

    1. In the Unity Editor, click on Window > Package Manager
    2. Click the + button and choose Add package from git URL option
    3. Paste the URL to the package repository: https://github.com/xrc-students/xrc-students-sp2024-ir22-sun.git in the prompt and click on Add (make sure your URL ends with ".git")
    4. If the repository is private, you will be asked to authenticate via your GitHub account. If you haven't been granted access to the repository you will not be able to install the package.
    5. The package should be installed into your project
    6. You can download the package samples from under the Samples tab in the Package Manager

    Note: Even though the package documentation is public, several XRC packages are private and accessible only to XRC staff and students.

    Requirements

    This package was developed and tested using the following Unity Editor version:

    • 2022.3.7f1

    Dependencies:

    • XRC Core
    • XR Interaction Toolkit
    • Input System

    Workflow

    See the below screenshots for a scene hierarchy and the inspector for the game objects containing expand, world-in-miniature, expand miniature and cylinder select components.

    Samples

    Expand Miniature Demo

    A demo of Expand Miniature with CylinderSelect as the multi-object selection.

    Controls:

    • Right grip: select object
    • Right thumbstick: adjust cylinder size

    Expand Miniature with Lasso Select

    A demo of Expand Miniature with lasso select for multi-object selection. Note: this sample requires lasso select.

    Controls:

    • Right grip: select object
    • Right trigger: draw lasso

    Note: both samples require an interaction layer named Proxies in the project.

    In This Article
    Back to top XR Collaboratory