Skip to main content
Vizard is a Unity-based 3D visualization tool built to display Basilisk simulation data. It renders exactly what the simulation models: if a planet is included as a gravitational body, it appears in the scene; if it is not modeled, it does not appear. The same principle applies to the sun, sensors, actuators, and every other simulated element.
Vizard is freeware. The current release is version 2.3.2 (December 2025).

Key features

Spacecraft visualization

Renders spacecraft in 3D using built-in or custom CAD models. Supports the default bsk-Sat model as well as .obj and .glb imports and Unity Addressable bundles.

Orbit display

Shows osculating orbit lines and true trajectory lines in multiple reference frames including celestial-body-relative, spacecraft-relative, two-body rotating, and body-fixed frames.

Attitude indicators

Displays coordinate frames, Hill frames, velocity frames, and reaction wheel or thruster heads-up displays (HUDs) driven directly from simulation state data.

Sensor footprints

Visualizes coarse sun sensor coverage spheres, generic sensor field-of-view cones, keep-in/keep-out cones, transceiver frustums, and ground location communication lines.

Celestial bodies

Built-in high-fidelity models for Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Bennu, and Ryugu. Atmospheric shaders are applied automatically for Venus, Earth, and Mars.

Multi-spacecraft

Supports constellations of any size. Spacecraft are rendered as 3D models in close-up views and automatically switch to 2D sprites in planet-centric or heliocentric views to maintain performance.

How Vizard connects to Basilisk

Vizard receives simulation data through the vizInterface Basilisk module. You configure vizInterface from your scenario script using the vizSupport.enableUnityVisualization() helper function in src/utilities/vizSupport.py. Data can be written to a .bin playback file for offline review, or streamed live to a running Vizard instance over a ZMQ socket.

Enabling Vizard in a scenario

The minimum setup requires a simulation base class instance, a task name, and a spacecraft object:
from Basilisk.utilities import vizSupport

viz = vizSupport.enableUnityVisualization(scSim, simTaskName, scObject,
                                          saveFile=fileName)
The function returns a reference to the vizInterface module. You use this reference to configure all subsequent Vizard settings:
# Set ambient lighting
viz.settings.ambient = 0.5

# Show spacecraft coordinate axes at startup
viz.settings.spacecraftCSon = 1

# Show the Hill frame
viz.settings.showHillFrame = 1

Saving a playback file

Pass a saveFile name to write a binary recording that you can open in Vizard later:
viz = vizSupport.enableUnityVisualization(scSim, simTaskName, scObject,
                                          saveFile="myScenario")
Vizard data files are written to a local _VizFiles/ subdirectory. You can also provide a full path ending in .bin to specify the output location explicitly.

Live streaming

To stream the simulation to Vizard as it runs, set liveStream=True:
viz = vizSupport.enableUnityVisualization(scSim, simTaskName, scObject,
                                          liveStream=True)
When live streaming is active, Basilisk waits for an acknowledgement from Vizard after each time step, keeping both in lockstep. See the advanced page for broadcast and headless modes.

Multi-spacecraft setup

Pass a list of spacecraft objects to visualize a formation:
viz = vizSupport.enableUnityVisualization(scSim, simTaskName,
                                          [scObject1, scObject2, scObject3],
                                          saveFile=fileName)
Spacecraft names are read from each object’s ModelTag attribute.

Playback interface

The Vizard window provides a playback bar at the bottom of the screen:
  • The slider on the lower left lets you scrub forward and backward through recorded data.
  • The Play/Pause button at the bottom center pauses and resumes playback.
  • The +/- buttons on the lower right increase or decrease the playback speed. At 1x, one frame of rendering corresponds to one simulation time step.

Build docs developers (and LLMs) love