Thingamajig

User Documentation

Alpha release
Last updated: April 14, 2020
Copyright © 2019 by Spatiality, LLC

Table of Contents

Scene Lobby
Scene Bubbles
Create Scene/tutorial
Clone and Delete Scenes
Shared Scenes
Scene View
Navigation and Locomotion
Snap
Home Table
Play Mode
Feature Tools
Move/Rotate tool
Scale/Stretch tool
Create Object tool
Paint tool
Snap Point tool
Group tool
Clone/Delete tool
Thing tool
Physics tool
Wires and Sockets
Wire Value Types
Category IDs
Built-in Things
Animator Objects
Keyframe Animator Objects
Value Animator Objects
Desktop View
Cameras
Drag and Drop

This document provides an overview of the Thingamajig application and brief descriptions of the application’s features and functions.

Note that this is an alpha version and it is expected that the application will undergo significant changes. We intend to update this documentation as the application changes, but may not update it for every change during the development cycle.

Scene Lobby


When the application first starts you are placed in the Scene Lobby. The Scene Lobby is a location outside of the current scene where Thingamajig scenes can be accessed. You can select the active scene as well as create, delete, clone, and share scenes.


You can move around the Scene Lobby freely in both vertical and horizontal directions by squeezing the grip button on your controller in either hand and moving it, similar to using a ski pole to pull yourself forward. Controllers with thumbsticks also provide continuous locomotion by pushing the thumbstick in the direction you want to move.

Scene bubbles


A Thingamajig scene is represented as a “bubble” in the Scene Lobby. The bubble displays a 360 degree rendering from the last location in the scene.

The scene bubble can be gripped with the trigger from either hand and positioned/sized within the Scene Lobby. Two hands can be used to change the size of the scene bubble.

The scene bubble for the active scene is indicated by a flow of golden particles emanating from the scene bubble. To make a scene the active scene (and transport to that scene) point at the scene bubble (or grip the scene bubble using the trigger button) and press the “enter scene” touchpad button. In the Scene Lobby, press the app menu button in either hand to return to the active scene.


Create scene/tutorial


Press the “new scene” button located under the Thingamajig title to create a new scene and a new scene bubble will appear. The tutorial button launches the tutorial, which is a series of panels to walk you through the basics of the Thingamajig application.

Clone and delete scenes



When a scene bubble is gripped with the trigger, two new buttons appear on the touchpad above the “enter scene” button. The “clone scene” button creates a copy of the gripped scene and the “delete scene” button deletes the gripped scene. To delete a scene, hold the delete button down long enough for the red circle that appears by the scene bubble to complete.

Shared scenes


There is a row of scene bubbles in the Scene Lobby underneath the Thingamajig title arranged along a scrolling table. These are sample scenes shared from the Thingamajig scene server. Grab one of these scenes and pluck it off the row to access the scene.

A suction cup like object appears at the end of the row. Attach a scene bubble to it and press the “Share Scene” button to share the scene with the Thingamajig server. Currently there is a single global shared feed for scenes.

A scene bubble with a green tint in the list indicates a scene that was shared by you.

NOTE: for this alpha release scene sharing is only intended to be used to send scenes to Thingamajig developers for bug reporting purposes. Shared scenes will not automatically appear in the shared scene feed.

Scene View


The scene view is where Thingamajig scenes are created. Each hand is equipped with a tool that provides various functionality.

Tool functionality is typically accessed using the trigger button on the controller, but the touchpad also provides virtual buttons (represented by icons) that control options for the tool.

Regardless of the type of the actual physical controller (e.g., Vive or Windows Mixed Reality), the virtual controller model appears the same and the touchpad is represented by a circular area toward the front of the controller.


The left hand tool is called the utility tool. It has the following touchpad buttons:

The utility tool’s app menu button brings up the Home Table (described in more detail later in this document).

The right hand tool is one of several feature tools that provide access to related sets of Thingamajig functionality. Note that we plan to make right/left hands swappable as a preference in the future.

The right hand controller’s app menu buttons brings up the tool selector to select from the different feature tools. More on the individual tools later in this document.

There are several methods to move around in the scene other than physically moving within the play area:

Note that we currently don’t offer a comfort mode for locomotion, but do plan to add options for that in the future. Exercise caution if you are prone to motion sickness.

Snap

Thingamajig provides two snap modes: grid and target snap.


When grid snap is enabled, a grid lattice appears at the tool position to show the snap grid. The grid is often aligned to the world, but in some cases may be aligned to the coordinate system of a particular object. The grid also rotates in 45 degree increments based on the orientation of the controller.


When target snap is enabled, a blue target arrow appears at the controller location indicating the current target snap position.

The target snap icon will snap to features of objects such as vertices, edges, and faces.

The target snap icon will also show the snap orientation, which is aligned to the target object, but is also rotated in 90 degree increments based on the orientation of the controller.

Target snap often involves two snap points: the source point and the target point. For example, when using the Move/Rotate tool with target snap on, you first selects the snap source point using the controller’s trigger button. With the trigger button down, you can move the object around the scene and line up the source point with the desired target point. Then release the trigger to complete the move.

Target and grid snap can be used together. When target snap is on, the snap source point is the point that is aligned to the snap grid.

If target snap is off, but grid snap is on, the sides of the object’s bounding box are snapped to grid increments.

Home Table

The Home Table is a central place for accessing some key Thingamajig functionality: importing objects, accessing the Scene Lobby and Play Mode.


The Home Table is accessed by pressing the app menu button on the utility tool. While the app menu button is held down you can place the Home Table in a convenient location. Releasing the button places the table. Pressing the app menu button again dismisses it.

The home table has 4 primary “mallet buttons”, which can be activated by tapping them with the tool tip. You can also activate them by pointing the tool in either hand at them and pressing the trigger.


Search terms can be entered by typing on the provided mallet-button keyboard. Mallet-button tags appear above the keyboard (context sensitive based on search term) for quick access to tag-based searches.


Tap the Poly/Sketchfab/Things/Files buttons to start the search or bring back the keyboard to change the search term.


Search results are displayed as two rows (up to 5-per row) of result slots that initially show a thumbnail image. Trigger (with either hand) on an item to see a 3D preview and trigger-grip to place a copy of one of these objects into the scene.


While a result item is gripped you can also grip with the other hand to scale it. While gripped the tool touchpad changes to provide some additional options:


Large arrow mallet-buttons appear on either side of the table to allow paging through search results.

Two additional buttons appear on the right side of the table to access the Scene Lobby and Play Mode, both described in more detail below.

Play Mode

Hit the play mode mallet-button from the Home Table to access play mode. Play mode allows you to experience the scene as it was created.


When play mode is active, tools disappear and a simple avatar appears to represent the player. Also scene gizmos, which are visible in create mode, are hidden so they don’t distract from the experience.

In play mode you can grab and interact with dynamic objects. You can navigate the scene by lightly touching the touchpad or using the joystick controller on Windows Mixed Reality or Index/Knuckles devices. Press the touchpad to jump.

Squeeze the grip to climb static objects. Squeeze the grip in open space to make a fist that will interact with dynamic objects, for example to punch a stack of boxes to knock them over. Press the trigger in open space to point and enable the tip of your index finger to interact with dynamic objects as well. On Index/Knuckles controller just point with your actual index finger for the same effect. Both the finger and fist in this mode will trigger switch and push button joints when touched.

Press the app menu button in either hand to exit play mode and return to create mode.

Note that Play Mode is in a very early state and we expect significant changes and enhancements in this area in the future.

Feature Tools


The app menu button on the right hand controller brings up the tool selector. With the app menu button held down, move the controller to highlight the desired tool disc. Each tool provides different functionality. The trigger button typically activates the primary function of the tool, but some tools have touchpad buttons that perform operations themselves, or set a mode that affects the operation of the tool.

The following are descriptions of individual tools:

Move/Rotate tool

Use to change the position and orientation of scene objects. This tool has the following touchpad options:

When the tool is in constrain-to-axis or plane mode, a light blue gizmo appears showing the location of the axis or plane. The gizmo itself can be moved with either hand to define the constraint. While the axis or plane gizmo is gripped with the tool, the touchpad changes to provide the following options:

When the tool is not in axis/plane mode and an object is gripped, the utility tool in the other hand can also be used to grip the object at a second point. With two hands gripping the object, it can be scaled by moving the tools toward or away from each other (in a pinch-to-zoom like manner).


Scale/Stretch tool

Use to change the size of an object, including stretching along 1 or 2 local axis. This tool has the following touchpad options:

Create Object tool

Use to create box, sphere, cylinder, cone, and torus shapes. This tool has the following touchpad options:

Press and hold the trigger to create a new object and define its shape. Both grid and target snap can be used in this process.


The creation plane is defined when the trigger is pressed, but the orientation of the controller selects which axis the plane is aligned to. E.g., point the controller vertically to define a vertically oriented cylinder and horizontally for a horizontal one.

Paint tool

Use to change the material of an object or add a color socket. This tool has the following touchpad options:

If the ‘get material from scene’ or 'show color socket' options are not enabled, pressing the trigger will assign the current material to the highlighted object in the scene.


Snap Point tool

Use to add snap points to objects as well as create jig objects. This tool has the following touchpad options:


While a snap point is gripped, the touchpad changes to the following options:

While a snap edge is gripped, the touchpad changes to offer buttons to increment or decrement the number of edge subdivisions. Setting subdivisions to zero will remove the edge.

When two snap points snap together while gripping an object, if you hold the objects in position a circular timer appears. If you let the time complete, the two objects will be grouped together.


Snap points and angle-arcs can be selected and moved with either hand. When gripped, the touchpad offers options to clone and delete.

Group tool


Use to group objects together so they move/rotate/scale as a single entity. This tool has the following touchpad options:


In ungroup and regroup modes it is possible to break single objects into multiple pieces. Objects can be split as long as there are parts of the geometry that are not connected (by edges or faces) to other parts of the object.


Clone/Delete tool

Use to delete objects and wires as well as make copies of objects. This tool has the following touchpad options:

Note clone and delete will affect an object and all the objects it is attached to via joints or wires.

Thing tool

Use to define new “Things”. A Thing is a collection of one or more interdependent objects. To save a creation for easy re-use in other scenes, define it as a Thing and it will be available in the Home Table’s Thing search. This tool has the following touchpad options:

Physics tool

Use the physics tool to move objects using physics, which prevents them from interpenetrating. The physics tool is also used to specify which objects are active parts of the physics simulation (dynamic and moveable) and which are part of the environment (static and stationary). This tool has the following touchpad options:


Press the trigger when no other object is highlighted to extend a finger-like object from the physics tool. The finger will collide and interact with other dynamic physics objects and provides a convenient way to test dynamic objects in your scene. It will also activate switch and push button joints.

Wires and Sockets

Thingamajig provides a system of wires and sockets to connect objects together allowing the value of one object to define the value of another (or others).


For example, a hinge joint can be used to create a lever and the lever’s hinge angle can then drive another value. That other value could be the angle of a different hinge or another type of value altogether, such as the volume of an audio source for example.

Wires are directionless and have no ‘input’ or ‘output’ side. When a value in a wire network changes, all wire-connected values are updated with the new value.

Wires are connected to sockets, which are represented by small black spheres. Press the trigger when a socket is highlighted (with any tool) to drag out a wire. The wire can then be connected to another socket. Additionally the wire value can be edited by pausing briefly with the wire gripped; a panel will appear from the wire with a control to edit the wire value.


Wire Value Types:

Category IDs

Category IDs are a simple way to specify a category from a selection of 36 options. Category IDs are represented by one of six shapes (star, hexagon, diamond, triangle, circle, and square) and six colors (pink, purple, blue, green, yellow, and red), which when combined result in 36 variations.

When you see a category ID on a gizmo in the scene, clicking on it with the trigger will bring up the category ID selector to choose a specific category (color/shape combo).

Category IDs are used to associate two or more objects together by matching categories. What these associations mean precisely depends on the object. They are currently used by proximity sensors, thing emitter/sources, and transporters (described in more detail later in this document).

For example, proximity sensor objects use category IDs to filter what types of objects trigger the sensor. A proximity sensor is only triggered by a category tag object if the category IDs match.


Built-in Things

As described earlier in this document, you can define Things from objects in your scene to make them easily reusable in other scenes. Thingamajig also includes a set of built-in things, which are typically gizmo-type objects providing special functionality.


Built-in Things include:

Animator Objects

Animator objects provide a means to animate color, rotation, and scalar type values. For each type there are two types of animators: “keyframe animators” and “value animators”. Additionally there are keyframe animators for on/off and trigger types.

Keyframe animators allow the user to specify different values at various points in time (keys) and it blends between them when the animation is played back. Keyframe animators are good for expressing predefined animation sequences.

Value animators animate the values directly and don't specify a specific point in time in which a value should take effect. Instead values are activated by a trigger. Value animators are good for interactive animations where the sequence is not defined in advance.

Keyframe Animator Objects

Keyframe animator objects have two primary values: “animation progress” (represented by the socket on the left) and “animation value” (represented by a socket on the right). The progress value defines the position along the animation track representing the current value. The animation value is the result of blending the two keyframes on either side of the progress position.

The current progress position is shown by a vertical arrow below the keyframe track. You can grab it using the trigger button to change the progress position. It is common to wire a wave generator (described later in this document) to the progress value to drive the animation, but it can be driven with other values as well.


You can grip a keyframe with the trigger to move it along the track or drag it off the track to delete it. Press the trigger on a highlighted empty cell to create a new keyframe. Grab and release a key without moving it to display its popup keyframe editor. The keyframe editor allows changing the key value and several other parameters that control how the key is blended over time:

While a keyframe is gripped the touchpad changes to provide the following options:

The area below the keyframe track shows a graphical representation of the animation. For scalar type animators it is a graph of the result value over the progress interval. The graphical representation is different for color and rotation type animators.


Color keyframe animators display the color animation as a gradient to show how the color changes over the progress interval.


Rotation keyframe animators display a graph of the rotation value over the progress interval. The rotation value is represented as 3 curves:


On/off keyframe animators don't have a graph below their keyframe track, but instead show the result value graphically within the track itself. Areas of the progress interval where the result value is on (true) are highlighted in dark blue. Areas where the value is off (false) are not highlighted.

Each key toggles the state between on and off starting from a default value of off at the begining of the track.

Additionally a result indicator light appears on the right side of the animator object and shows the result value at the current progress position by turning white when on.


Trigger keyframe animators don't have a graph below their keyframe track. Their result value is a trigger type value, which can be wired to other triggerable objects (e.g., a Thing Emitter).

Trigger animator keys are colored orange to help distinguish them from on/off tracks. Whenever the progress value passes over a key (regardless of wether it is moving forward or backward) the result value is triggered. An indicator light on the right side of the animator object flashes orange when triggered.

Animator objects have several buttons with different functions:


Phase shift tracks:


Phase shift tracks are copies of the original track that can be shifted across the progress interval. Press the '+' button to the right of the track graph view to create a new phase shift track. An 'x' button appears next to each phase shift track to remove it.

Each phase shift track has its own phase shift amount, which is added to the progress before blending keys to get the shifted result amount. If this shift causes the progress to be larger than 100% the value wraps around to the start, therefore phases shifted tracks are most useful when the track is set to loop mode.

Phase shifted tracks are live copies of the original so if you change the keys on the track the phase shifted tracks will update accordingly. For this reason, phase shift tracks don't have keyframe tracks of their own.

Animator object docking and master tracks:


Multiple animator objects can be docked together by placing them one above the other where they will snap to a docked position. When docked, a master track appears. Changing a key in the master track affects all the keys at the same location in child tracks. Moving the animation progress indicator also moves the progress position for all tracks together.

Like regular tracks, you can ckick on a key in a master track to edit it, but you will only be able to edit the interpolation type (smooth/corner/step) and in/out speed. Changing a master key's properties affects all keys of docked animator objects at the same cell location. If the child keys have different property values a '...' icon will be displayed to indicate there are multiple values.

Value Animator Objects


Value animator objects have a variable number of tracks. Each track represents a single value (of the same type) that the result will take on if that track is triggered. The add track button in the lower right corner adds a new track to the bottom. Each track has a delete button on its right hand side to remove it.


Each track has the following components (left to right):


The right side of the animator object shows the result value and has the following controls and sockets:

Desktop view

The Thingamajig application has a desktop window in addition to the content displayed in the VR headset. The window shows a view into current scene or Scene Lobby depending on what is currently active.

Cameras

The desktop window view can show what the headset is currently seeing or display the result of a different camera. Use the numeric keys to select a camera (make sure the window has keyboard focus by clicking on it first).

In all views except the ‘raw headset’ view, you can manipulate the camera with the mouse. The left mouse button orbits the camera around the target. The middle mouse button rotates the camera around its center. The right mouse button moves the camera toward or away from its target.

Raw headset view (1 key)

This shows what the user wearing the headset is currently seeing. You cannot use the mouse to modify this view.

Smooth headset view (2 key)

This shows what the user wearing the headset is currently seeing, but with some smoothing applied. Only the middle mouse button can be used to rotate this view. When the mouse is released, the view will rotate back to match the headset view.

Follow camera (3 key)

Shows the result of a camera that follows the user. The camera is targeted at the user’s hands. All three mouse buttons can be used to manipulate this camera.

Scene cameras (4-9 key)

Select one of 6 scene cameras using the 4-9 keys. All three mouse buttons can be used to manipulate the camera.

Training mode (0 key)

This is a special camera that is similar to a scene camera, but there is no corresponding object in the scene. All three mouse buttons can be used to manipulate this camera.

When the 0 key is pressed (even if already in this mode) the camera position/rotation is set based on the current position/rotation of the controllers such that the camera is right behind the controllers pointing in the direction they are pointing.

This allows using the application without wearing a headset and is useful when one person is trying to show a new user how the controllers work.

Drag and drop

The desktop view allows certain types of media to be “dragged-and-dropped” into the scene. The following media types are supported: