Bounding Box

The BoundingBox component renders 3D bounding boxes with customizable edge and wall opacity. This is ideal for:

  • Visualizing spatial bounds and regions of interest

  • Object detection visualization

  • Collision box debugging

Basic Usage

A minimal example that creates a bounding box:

import asyncio

from vuer import Vuer, VuerSession
from vuer.schemas import BoundingBox

vuer = Vuer(killport=True)


@vuer.spawn(start=True)
async def main(sess: VuerSession):
  sess.upsert @ BoundingBox(
    key="bounding-box",
    color="red",
  )

  await sess.forever()

Performance Tip

When rendering multiple BoundingBox instances, wrap them in a BoundingBoxProvider for better performance. The provider enables instanced rendering with shared shader material and geometry.

Insane Performance With BBProvider

It is not uncommon for us to have a large number of bounding boxes in a scene. To avoid slowing down the rendering, we offer an instancing provider, that can accomodate up to tens of thousands of bouding boxes while maintaining 120 fps refresh rate.

  • todo: use portal to share the default provider in self-provider set up. This is done for the DepthPointCloud component, but not here afaik.

import asyncio

from vuer import Vuer, VuerSession
from vuer.schemas import BoundingBox, BoundingBoxProvider

vuer = Vuer(killport=True)


@vuer.spawn(start=True)
async def main(sess: VuerSession):
  sess.upsert @ BoundingBoxProvider(
    key="provider",
    children=[
      BoundingBox(key="box-0", color="red", position=[0, 0, 0]),
      BoundingBox(key="box-1", color="green", position=[2, 0, 0]),
      BoundingBox(key="box-2", color="blue", position=[4, 0, 0]),
    ]
  )

  await sess.forever()

BoundingBox Parameters

Parameter

Type

Default

Description

key

str

-

Unique identifier for the bounding box

position

list

[0, 0, 0]

Position in 3D space [x, y, z]

rotation

list

[0, 0, 0]

Rotation in Euler angles [x, y, z]

scale

list

[1, 1, 1]

Scale factors [x, y, z]

quaternion

list

-

Rotation as quaternion [x, y, z, w]

matrix

list

-

4x4 transformation matrix (16 values)

size

list

[1, 1, 1]

Size of the box [width, height, depth]

min

list

-

Minimum corner [x, y, z] (alternative to size)

max

list

-

Maximum corner [x, y, z] (alternative to size)

color

str/int

“#00ff00”

Color of edges and faces (hex, rgb, rgba, or name)

edgeOpacity

float

0.9

Opacity of the edges (0-1)

wallOpacity

float

0.08

Opacity of the walls/faces (0-1)

edgeWidth

float

0.02

Width of edges relative to box size (0-0.5)

BoundingBoxProvider Parameters

Parameter

Type

Default

Description

key

str

-

Unique identifier for the provider

edgeWidth

float

0.05

Width of box edges

maxInstances

int

10000

Maximum number of instances

children

list

[]

Child BoundingBox elements

Sizing Options

You can define the box size in two ways:

Using size

BoundingBox(
  key="box",
  size=[2, 1, 3],  # width=2, height=1, depth=3
  position=[0, 0.5, 0],  # centered at this position
)

Using min and max

BoundingBox(
  key="box",
  min=[-1, 0, -1.5],
  max=[1, 1, 1.5],
)