Open Brush Docs
  • Home
  • How to get Open Brush
  • Differences between Open Brush and Tilt Brush
  • User Guide
    • Get started with Open Brush
    • Painting with Open Brush
    • The Open Brush UI
      • Admin Panel
        • Settings Panel
        • Labs Panel
      • Tools Panel
        • Selection Options
        • Repaint Options
      • Brushes Panel
      • Extras Panel
        • Environment Panel
        • Lights Panel
        • Backdrop Panel
        • Guides Panel
        • Media Library
        • Camera Paths Panel
        • Snap Settings Panel
        • Transform Panel
        • Layers Panel
      • UI Differences Between Basic Mode and Advanced Mode
    • Grid and Angle Snapping
    • Repaint Tool and Jitter
    • Selection/Erase Filter
    • Lazy Input
    • Bimanual Input and Revolver
    • World Axis Unlock
    • Saving and sharing your Open Brush sketches
    • Troubleshooting issues with Open Brush
    • Check out Labs features
    • Multi Mirror
    • Importing Images, Videos and 3D Models
    • Experimental Mode
    • Make moving creations using audio reactive brushes
    • Using Reference Images on Oculus Quest
    • Remixing and Creative Commons
    • Accessing Autosave Files
    • The Open Brush config file
    • Exporting Open Brush sketches to other apps
      • Exporting to Unreal Engine 5
      • Exporting to Snapchat Lens Studio
      • Configuring Export
    • Plugins
      • Example Plugins
        • Example Pointer Plugins
        • Example Symmetry Plugins
        • Example Tool Plugins
        • Example Background Plugins
      • Writing Plugins
        • Getting Started
        • Tweaking existing plugins
        • Writing a Pointer Plugin
        • Writing a Symmetry Plugin
        • Writing a Tool Plugin
        • Writing a Background Plugin
        • Defining and Drawing Brush Strokes
      • Plugin API Scripting Reference
    • Open Brush Unity SDK
    • Open Brush API
      • Retrieving a preview image
      • API Commands List
    • Cameras and Exporting Video
    • Brushes
      • Brush List
      • Memory limits and brush costs
      • Experimental Brushes
      • Hiding Brushes with Brush Tags
    • Using Open Brush without a VR headset
    • Command Line Arguments
    • Tilt Brush Version 23 Release Notes
  • Get Involved!
    • How to help with Testing
  • Pre-release and Experimental Builds
    • Installing the Beta Release
    • "Experimental Mode" Builds
    • Feature: 3D Shapes Tool
    • Feature: Animation Timeline
    • Feature: Icosa Gallery Support
    • Feature: Brush Editing
    • Feature: Plugin Scripting
    • Feature: Sculpting
    • Combined Testing Build
    • Old or Completed Feature Builds
      • Feature: Polyhedra
      • Feature: Snip Tool
      • Feature: Layers
      • Insominx's (michael-g) Experimental Build
      • XR Framework Beta
      • Feature: Transform Panel and Snap Enhancements
      • Feature: Improved GLTF Importer
      • Feature: Multi-Mirror
      • Feature: New Monoscopic Mode
      • Feature: Improved Import/Export
      • Feature: Multiplayer
  • Case Studies
  • Other Resources
  • Developer Notes
    • UI Elements
    • Unity shader examples
    • Setting up CI for Open Brush using Github Actions
    • Open Brush File Format
    • Previous Github Wiki
      • Brushes
      • BuildingOpenBrush
      • BurstCompiler
      • Comparison
      • MonoscopicMode
      • PseudoCode
      • UserInterface
    • Differences between Standard and Experimental Mode
    • Open Brush AsCanvas Notes
    • Unity Versions
  • Release History
    • v2.10 Multiplayer
    • v2.9 (Maintenance)
    • v2.8 Import/Export
    • v2.7 (Maintenance)
    • v2.6 (Maintenance)
    • v2.5 (Maintenance)
    • v2.4 "Prismatic"
    • v2.2: Settings and Sketches
    • v2.1 Hotfix
    • 🚀v2.0: XR Update
    • v1.0: Happy Birthday to Us!
    • Current Beta Release Notes
  • Docs TODO
  • Contacting Us
Powered by GitBook
On this page
  • Panels
  • Popups
  • Tools
  • Trays
  • Widgets
  • GrabWidget
  • ModelWidget
  • LightWidget
  • Button Types
  • Tool Buttons
  • Action Buttons
  • Long Press Button
  • Toggle Button
  • Multistate Button
  • Sliders
Edit on GitHub
Export as PDF
  1. Developer Notes

UI Elements

Panels

The main UI surfaces. Panels can be floating or docked to the wand. They contain buttons and sliders and can spawn popups.

Popups

Popups are similar to panels but they are short-lived and usually close automatically after selecting an option

Tools

Tools change the action the controller on your dominant performs. Examples are the Brush Tool for painting and the Selection Tool for selecting strokes and widgets.

Some tools have different modes. Modes can be activated in several ways:

  • A button on a panel or in a tray

  • Pressing the secondary button on the same controller that has the tool on it (your dominant hand

  • using the thumbstick (or swiping on the Vive controller touchpad) to change between modes.

Trays

An alternative to popups. Some tool buttons when active will reveal a "mini panel" to the right of the main panel containing further buttons

Widgets

These are interactable objects within the scene. The simplest examples are imported images and 3d models which can be resized and moved. More complex widgets can contain UI elements of their own - for example, the camera path tool has widgets for each control point.

GrabWidget

This is the base widget that all other widgets inherit from.

ModelWidget

ModelWidget enables the user to grab and manipulate 3d models.

  • A ModelWidget can be divided into smaller ModelWidgets if the model has parent-child relationships

    • see ./Assets/Scripts/Commands/BreakModelApartCommand.cs

  • ModelWidget has a property private ObjModelScript m_ObjModelScript for getting information about the model's meshes.

    • see this 100-line utility script ./Assets/Scripts/ObjModelScript.cs

  • The other data source for ModelWidget is private Model m_Model . It is used for e.g. getting the model's export name, and the model's transform hierarchy.

    • see ./Assets/Scripts/Model.cs

Importing this car 3d model from Blender into Open Brush:

Results in this kind of GameObject hierarchy in Unity:

LightWidget

This is the Widget for lights. We want to have a specific widget for lights so that we can have a SceneLightGizmofor each Light, which is a visual light helper for the user. (other reasons exist too)

  • 2 ways the user can get lights into Open Brush currently:

    • (1) from a 3d model

      • see LightWidget.FromModelWidget()

    • (2) from a .tilt file

      • see LightWidget.FromTiltLight()

Importing a 3d model from Blender into Open Brush that has a Light object:

The following video shows the above model getting imported into Open Brush. The entire model will initially be instantiated as a single ModelWidget. Breaking up the ModelWidget into multiple will convert the Light into a LightWidget.

Button Types

Tool Buttons

These change the current active tool.

Action Buttons

These perform an action - sometimes opening a popup first.

Long Press Button

These buttons usually perform an action when clicked normally but can open a popup with further options when you click for longer.

Toggle Button

Tool buttons are an example of toggle buttons but there are non-tool buttons that also toggle between two states.

Multistate Button

These buttons have more than just the two states of a toggle button and cycle through them on each click. They appear as a small cube or prism that rotates around to show each option

Sliders

Sliders can be used to choose a value (either a continuous or discrete value) within a range. More rarely they can be used as an alternative to multistate buttons with each slider position choosing a different option.

PreviousDeveloper NotesNextUnity shader examples

Last updated 6 months ago