skybolt
-Python API for accessing Skybolt Engine C++ functionality.
- - -Attributes
- -
-
LoadAcrossMultipleFrames: LoadTimingPolicy
-
-
- module-attribute
-
-
-
-
-
-
-
LoadBeforeRender: LoadTimingPolicy
-
-
- module-attribute
-
-
-
-
-
- Classes
- -
-
Box3d
-
-
-
-
-
- Attributes
- -
-
maximum: Vector3
-
-
- instance-attribute
-
-
-
-
-
-
-
minimum: Vector3
-
-
- instance-attribute
-
-
-
-
-
- Functions
- -
-
center()
-
-
-
-
-
-
merge(arg0)
-
-
-
-
-
-
size()
-
-
-
-
-
-
CameraComponent
-
-
-
-
-
-
- Bases: Component
Attributes
- -
-
state: CameraState
-
-
- instance-attribute
-
-
-
-
-
-
-
CameraControllerComponent
-
-
-
-
-
-
- Bases: Component
, CameraControllerSelector
-
CameraControllerSelector
-
-
-
-
-
- Functions
- -
-
getSelectedControllerName()
-
-
-
-
-
-
selectController(arg0)
-
-
-
-
-
-
setTargetId(arg0)
-
-
-
-
-
-
CameraState
-
-
-
-
-
- Attributes
- -
-
farClipDistance: float
-
-
- instance-attribute
-
-
-
-
-
-
-
fovY: float
-
-
- instance-attribute
-
-
-
-
-
-
-
nearClipDistance: float
-
-
- instance-attribute
-
-
-
-
-
-
-
Component
-
-
-
-
-
- Base class for components which can be attached to an Entity
Functions
- -
-
setSimTime(arg0)
-
-
-
-
-
-
EngineRoot
-
-
-
-
-
- Attributes
- -
-
entityFactory: EntityFactory
-
-
- property
-
-
-
-
-
-
-
scenario: Scenario
-
-
- property
-
-
-
-
-
-
-
world: World
-
-
- property
-
-
-
-
-
- Functions
- -
-
locateFile(arg0)
-
-
-
-
-
-
Entity
-
-
-
-
-
- Attributes
- -
-
dynamicsEnabled: bool
-
-
- instance-attribute
-
-
-
-
-
- Functions
- -
-
addComponent(arg0)
-
-
-
-
-
-
getComponents()
-
-
-
-
-
-
getComponentsOfType(arg0)
-
-
-
-
-
-
getFirstComponentOfType(arg0)
-
-
-
-
-
-
getId()
-
-
-
-
-
-
getName()
-
-
-
-
-
-
getOrientation()
-
-
-
-
-
-
getPosition()
-
-
-
-
-
-
setOrientation(arg0)
-
-
-
-
-
-
setPosition(arg0)
-
-
-
-
-
-
EntityFactory
-
-
-
-
-
- Class responsible for creating Entity
instances based on a template name
Functions
- -
-
createEntity(templateName, name='', position=..., orientation=..., id=...)
-
-
-
-
-
-
EntityId
-
-
-
-
-
- Attributes
- -
-
applicationId: int
-
-
- instance-attribute
-
-
-
-
-
-
-
entityId: int
-
-
- instance-attribute
-
-
-
-
-
-
-
EntityTargeter
-
-
-
-
-
- Interface for a class which references a target Entity
by EntityId
Functions
- -
-
getTargetId()
-
-
-
-
-
-
getTargetName()
-
-
-
-
-
-
setTargetId(arg0)
-
-
-
-
-
-
setTargetName(arg0)
-
-
-
-
-
-
Frustum
-
-
-
-
-
- Attributes
- -
-
fieldOfViewHorizontal: float
-
-
- instance-attribute
-
-
-
-
-
-
-
fieldOfViewVertical: float
-
-
- instance-attribute
-
-
-
-
-
-
-
orientation: Quaternion
-
-
- instance-attribute
-
-
-
-
-
-
-
origin: Vector3
-
-
- instance-attribute
-
-
-
-
-
-
-
GeocentricOrientation
-
-
-
-
-
-
- Bases: Orientation
Attributes
- -
-
orientation: Quaternion
-
-
- instance-attribute
-
-
-
-
-
-
-
GeocentricPosition
-
-
-
-
-
-
- Bases: Position
Attributes
- -
-
position: Vector3
-
-
- instance-attribute
-
-
-
-
-
-
-
LatLon
-
-
-
-
-
- Represents a 2D location on a planet location as a latitude and longitude in radians
- - - - - - - - - -Attributes
- -
-
lat: float
-
-
- instance-attribute
-
-
-
-
-
-
-
lon: float
-
-
- instance-attribute
-
-
-
-
-
-
-
LatLonAlt
-
-
-
-
-
- Represents a 3D location on a planet location as a latitude and longitude in radians, and altitude in meters
- - - - - - - - - -Attributes
- -
-
alt: float
-
-
- instance-attribute
-
-
-
-
-
-
-
lat: float
-
-
- instance-attribute
-
-
-
-
-
-
-
lon: float
-
-
- instance-attribute
-
-
-
-
-
-
-
LatLonAltPosition
-
-
-
-
-
-
- Bases: Position
Attributes
- -
-
position: LatLonAlt
-
-
- instance-attribute
-
-
-
-
-
-
-
LoadTimingPolicy
-
-
-
-
-
- Enum specifying policy for timing of loading data into the renderer
-Members:
-LoadAcrossMultipleFrames
-LoadBeforeRender
- - - - - - - - - -Attributes
- -
-
LoadAcrossMultipleFrames: LoadTimingPolicy
-
-
- class-attribute
-
-
-
-
-
-
-
LoadBeforeRender: LoadTimingPolicy
-
-
- class-attribute
-
-
-
-
-
-
-
name: str
-
-
- property
-
-
-
-
-
-
-
value: int
-
-
- property
-
-
-
-
-
-
-
LtpNedOrientation
-
-
-
-
-
-
- Bases: Orientation
Attributes
- -
-
orientation: Quaternion
-
-
- instance-attribute
-
-
-
-
-
-
-
MainRotorComponent
-
-
-
-
-
-
- Bases: Component
Functions
- -
-
getPitchAngle()
-
-
-
-
-
-
getRotationAngle()
-
-
-
-
-
-
getTppOrientationRelBody()
-
-
-
-
-
-
setNormalizedRpm(arg0)
-
-
-
-
-
-
OffscreenWindow
-
-
-
-
-
-
- Bases: Window
-
Orientation
-
-
-
-
-
-
-
Position
-
-
-
-
-
-
-
Quaternion
-
-
-
-
-
- Represents an orientation as a quarternion of [x, y, z, w] components
- - - - - - - - - -Attributes
- -
-
w: float
-
-
- instance-attribute
-
-
-
-
-
-
-
x: float
-
-
- instance-attribute
-
-
-
-
-
-
-
y: float
-
-
- instance-attribute
-
-
-
-
-
-
-
z: float
-
-
- instance-attribute
-
-
-
-
-
-
-
RectI
-
-
-
-
-
- A rectangle defined by [x, y, width, height]
- - - - - - - - - -
-
Scenario
-
-
-
-
-
- Attributes
- -
-
currentJulianDate: float
-
-
- property
-
-
-
-
-
-
-
startJulianDate: float
-
-
- instance-attribute
-
-
-
-
-
-
-
time: float
-
-
- instance-attribute
-
-
-
-
-
-
-
ScenarioMetadataComponent
-
-
-
-
-
-
- Bases: Component
Attributes
- -
-
deletable: bool
-
-
- instance-attribute
-
-
-
-
-
-
-
directory: VectorString
-
-
- instance-attribute
-
-
-
-
-
-
-
serializable: bool
-
-
- instance-attribute
-
-
-
-
-
-
-
StandaloneWindow
-
-
-
-
-
-
- Bases: Window
-
TemplateNameComponent
-
-
-
-
-
-
- Bases: Component
A component storing the name of the template which an Entity
instantiates
Attributes
- -
-
name: str
-
-
- property
-
-
-
-
-
-
-
Vector3
-
-
-
-
-
- A 3D vector of [x, y, z] components
- - - - - - - - - -Attributes
- -
-
x: float
-
-
- instance-attribute
-
-
-
-
-
-
-
y: float
-
-
- instance-attribute
-
-
-
-
-
-
-
z: float
-
-
- instance-attribute
-
-
-
-
-
-
-
VectorString
-
-
-
-
-
- Functions
- -
-
append(x)
-
-
-
-
- Add an item to the end of the list
- -
-
clear()
-
-
-
-
- Clear the contents
- -
-
count(x)
-
-
-
-
- Return the number of times x
appears in the list
-
insert(i, x)
-
-
-
-
- Insert an item at a given position.
- -
-
remove(x)
-
-
-
-
- Remove the first item from the list whose value is x. It is an error if there is no such item.
- -
-
VisRoot
-
-
-
-
-
- Functions
- -
-
addWindow(arg0)
-
-
-
-
-
-
removeWindow(arg0)
-
-
-
-
-
-
setLoadTimingPolicy(arg0)
-
-
-
-
-
-
Window
-
-
-
-
-
-
-
World
-
-
-
-
-
- Functions
- -
-
addEntity(arg0)
-
-
-
-
-
-
findObjectByName(arg0)
-
-
-
-
-
-
getEntities()
-
-
-
-
-
-
removeAllEntities()
-
-
-
-
-
-
removeEntity(arg0)
-
-
-
-
- Functions
- -
-
attachCameraToWindowWithEngine(arg0, arg1, arg2)
-
-
-
-
-
-
calcSmallestAngleFromTo(arg0, arg1)
-
-
-
-
-
-
createEngineRootWithDefaults()
-
-
-
-
- Create an EngineRoot with default values
- -
-
cross(arg0, arg1)
-
-
-
-
-
-
dot(arg0, arg1)
-
-
-
-
-
-
getGlobalEngineRoot()
-
-
-
-
- Get global EngineRoot
- -
-
moveDistanceAndBearing(arg0, arg1, arg2)
-
-
-
-
-
-
normalize(arg0)
-
-
-
-
-
-
quaternionFromEuler(arg0)
-
-
-
-
-
-
registerComponent(arg0, arg1)
-
-
-
-
-
-
render(engineRoot, window)
-
-
-
-
-
-
setGlobalEngineRoot(arg0)
-
-
-
-
- Set global EngineRoot
- -
-
setWaveHeight(arg0, arg1)
-
-
-
-
-
-
stepSim(arg0, arg1)
-
-
-
-
-
-
toGeocentricOrientation(arg0, arg1)
-
-
-
-
-
-
toGeocentricPosition(arg0)
-
-
-
-
-
-
toLatLon(arg0)
-
-
-
-
- skybolt
+Python API for accessing Skybolt Engine C++ functionality.
-
-
transformToScreenSpace(arg0, arg1)
-
- Skybolt is a 3D geospatial application for simulating and visualizing dynamic entities in planetary environments.
With Skybolt you can:
- Create scenarios featuring dynamic 3D objects with modular components and properties.
- Interact with objects via 3D geospatial user interface.
- Render photoreal environments featuring terrain, ocean, buildings, roads, vegetation, and clouds.
- Import and visualize data from external sources including CSV files and CIGI host applications.
- Extend functionality with C++ and Python plugins.
Continue to the Getting Started guide.
"},{"location":"index.html#contact","title":"Contact","text":"To submit a bug report, please raise an issue on the GitHub repository. For general discussion, please post on our GitHub discussions page. For business enquiries, please use our contact form.
"},{"location":"index.html#license","title":"License","text":"This project is licensed under the Mozilla Public License Version 2.0.
"},{"location":"architecture.html","title":"Architecture","text":""},{"location":"architecture.html#core","title":"Core","text":"The Skybolt engine is based on a flexible entity-component system, which makes it easy to represent both physical and non-physical objects in the world.
"},{"location":"architecture.html#skyboltsim","title":"SkyboltSim","text":"At the heart of the engine, the SkyboltSim
library manages the simulation loop and handles dynamics and system state updates.
The main aspects of the simulation architecture are:
- Simulation Loop: Continuously updates the state of entities based on dynamics, user input, and external data.
- Systems: Handle core processes such as dynamics simulation.
- Entities: Objects in the simulation. Each entity can represent a physical object (e.g. aircraft, ship) or an non-physical object that performs a function.
- Components: Modular building blocks giving functionality to entities. Components may define an entity's position, behavior, appearance, or other characteristics.
The SkyboltVis
library renders visual represenations of entities. The renderer is built to provide physically plausible imagery from ground level to space. The renderer uses tile-based streaming from geospatial sources, allowing efficient real-time loading of terrain and features such as buildings, roads, rivers and lakes.
Environments are rendered use multiple physically-based lighting techniques:
- Hard-surface BRDFs to render hard objects like aircraft, terrain and buildings
- Planetary atmospheric scattering model
- Volumetric cloud ray-marcher
Under the hood, SkyboltVis
uses OpenSceneGraph to manage scene graph state, issue draw calls, and handle 2D/3D asset file IO.
The SkyboltEngine
library ties together SkyboltSim
and SkyboltVis
, and provides engine-level functionality like user input, scenario management, and plugin support.
To support a wide variety of use cases, the simulation engine is extensible through C++ and Python plugins.
- C++ Plugins: Leverages high-performance code for simulation-critical functionality.
- Python Plugins: For rapid prototyping, scripting, and extending functionality, for example adding new entity component types.
The application features a Qt-based graphical user interface that allows users to interact with entities in the 3D environment. The SkyboltQt
library provides funcionality for GUI widgets and bindings between the GUI and the engine.
At runtime, Skybolt uses assets such as meshes, textures, and shaders. These assets are organized into packages. Each package is a folder containing a hierarchy of asset files on disk.
Some packages are requied to run Skybolt, while others are optional. The pre-built version of Skybolt ships with the minimum set of required packages. If you compiled Skybolt from source, please ensure Skybolt can find the required packages.
Skybolt searches for asset packages in these locations:
<CurrentWorkingDirectory>/Assets
- Paths in the
SKYBOLT_ASSETS_PATH
environment variable
Core assets including fonts, icons, shaders and python modules. Located under the Assets
folder in the main repository.
These packages required for running the SkyboltQtApp
and example applications. These are located in the SkyboltAssets repository. SkyboltAssets uses DVC for remote storage and retrieval of large files which are not stored in the git repository itself.
To checkout the SktboltAssets repository:
- If you do not already have DVC installed, run
pip install dvc[s3]
to install with pip - Clone SkyboltAssets and checkout desired git branch/tag
- Run
dvc pull
command in the SkyboltAssets root directory to fetch the remote files
Land cover tiles for USA. Used by Skybolt to place trees on terrain in forest areas. This package can be downloaded here.
"},{"location":"asset_packages.html#seattle","title":"\"Seattle\"","text":"Map features (buildings, roads, lakes etc) for the city of Seattle. These features were generated from OpenStreetMap data using Skybolt's MapFeaturesConverter
tool. This package can be downloaded here.
Skybolt uses the CMake meta-build system and the Conan package manager.
A list of skybolt dependencies can be found in conanfile.py
.
Install with pip: pip3 install conan
.
Use conan to build Skybolt. Under the hood this will execute CMake to generate project files for your IDE and compile the project.
conan build %SKYBOLT_SOURCE% --output-folder=%SKYBOLT_BUILD% --lockfile-partial\n
Custom configuration options may be supplied with the -o
argument, for example:
conan build %SKYBOLT_SOURCE% --output-folder=%SKYBOLT_BUILD% --lockfile-partial -o openscenegraph-mr:shared=True -o enable_python=True -o enable_qt=True -o enable_bullet=True -o enable_cigi=True\n
Please refer to conanfile.py
for a full list of available configuration options.
Skybolt needs a minimum set of required asset packages to run. These packages are shipped with the pre-built Skybolt version, but must be installed manually when building from source. See Asset Packages for details.
"},{"location":"configuration.html","title":"Configuration","text":""},{"location":"configuration.html#engine-settings","title":"Engine Settings","text":"Engine settings are stored in a Settings.json
json file, which may be manually edited with a text editor, or edited in the SkyboltQtApp
using the Tools->Settings
dialog.
The settings file can be loaded by Skybolt applications with the --settingsFile
commandline option. If the option is not specified, a default Settings.json
in the Operating System user's home directory will be used. On windows, this is located at C:/Users/%USERNAME%/AppData/Local/Skybolt/Settings.json
.
SKYBOLT_PLUGINS_PATH
sets plugin search locations. The /plugins folder in the application executable's directory is searched in additional to this path.SKYBOLT_CACHE_DIR
sets the directory where cached terrain tiles are read from and written to. If not set, the default directory is C:/Users/%USERNAME%/AppData/Local/Skybolt/CacheSKYBOLT_ASSETS_PATH
sets the search locations for asset packages.SKYBOLT_MAX_CORES
sets the maximum number of CPU cores the engine may use. If not set, all cores are used.
By default, the PlanetEarth
Skybolt entity uses mapbox for albedo and elevation data. To use mapbox, you must acquire an API key from Mapbox. Without an API key, the tiles will not download, the the planet will not render correctly. If desired, PlanetEarth
can be edited to use Bing maps for albedo instead. A bing key can be obtained from Microsoft.
API keys for third party map sources are stored in the engine settings file Settings.json
.
Skybolt can be obtained using one of the following methods:
- Download a pre-built version on supported operating systems
- Build from source
The main Skybolt GUI application can be started by running the SkyboltQtApp
executable from the bin
folder.
To explore example scenarios, navigate to the /Scenarios
folder, where you will find pre-configured scenarios that demonstrate use cases of the application.
Skybolt supports Python and C++ plugins as follows:
"},{"location":"getting_started.html#python","title":"Python","text":"Skybolt allows users to implement new Entity Component types in Python. These components are initialized when the entity is added to the scene, updated each time step, and destroyed when the entity is removed.
The ReplaySource
is an example of a component implemented in Python. This component is responsible for replaying simulation data from a CSV file. See Assets/Core/Scripts/replay_source.py
.
At runtime, Skybolt searches for python plugin modules inside asset packages under <AssetPackage>/Scripts
.
Skybolt allows develpers to add new engine functionality by writing C++ plugins. Please refer to src/Skybolt/SkyboltEnginePlugins/
for examples.
At runtime, Skybolt searches for plugins under the bin/plugins
folder.
Skybolt has a python API which allows the engine to be used outside the SkyboltQtApp
application. Refer to src/SkyboltExamples/MinimalPython/MinimalPython.py
as an example. See also Python API documentation.
Skybolt comes with the following Python modules:
- skybolt - provides access to Skybolt Engine C++ functionality.
- skybolt_util - auxilary utility functionality.
Python API for accessing Skybolt Engine C++ functionality.
"},{"location":"python_api/skybolt.html#skybolt-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.LoadAcrossMultipleFrames","title":"LoadAcrossMultipleFrames: LoadTimingPolicy
module-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.LoadBeforeRender","title":"LoadBeforeRender: LoadTimingPolicy
module-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt-classes","title":"Classes","text":""},{"location":"python_api/skybolt.html#skybolt.Box3d","title":"Box3d
","text":""},{"location":"python_api/skybolt.html#skybolt.Box3d-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.Box3d.maximum","title":"maximum: Vector3
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Box3d.minimum","title":"minimum: Vector3
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Box3d-functions","title":"Functions","text":""},{"location":"python_api/skybolt.html#skybolt.Box3d.center","title":"center()
","text":""},{"location":"python_api/skybolt.html#skybolt.Box3d.merge","title":"merge(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.Box3d.size","title":"size()
","text":""},{"location":"python_api/skybolt.html#skybolt.CameraComponent","title":"CameraComponent
","text":" Bases: Component
state: CameraState
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.CameraControllerComponent","title":"CameraControllerComponent
","text":" Bases: Component
, CameraControllerSelector
CameraControllerSelector
","text":""},{"location":"python_api/skybolt.html#skybolt.CameraControllerSelector-functions","title":"Functions","text":""},{"location":"python_api/skybolt.html#skybolt.CameraControllerSelector.getSelectedControllerName","title":"getSelectedControllerName()
","text":""},{"location":"python_api/skybolt.html#skybolt.CameraControllerSelector.selectController","title":"selectController(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.CameraControllerSelector.setTargetId","title":"setTargetId(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.CameraState","title":"CameraState
","text":""},{"location":"python_api/skybolt.html#skybolt.CameraState-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.CameraState.farClipDistance","title":"farClipDistance: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.CameraState.fovY","title":"fovY: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.CameraState.nearClipDistance","title":"nearClipDistance: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Component","title":"Component
","text":"Base class for components which can be attached to an Entity
setSimTime(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.EngineRoot","title":"EngineRoot
","text":""},{"location":"python_api/skybolt.html#skybolt.EngineRoot-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.EngineRoot.entityFactory","title":"entityFactory: EntityFactory
property
","text":""},{"location":"python_api/skybolt.html#skybolt.EngineRoot.scenario","title":"scenario: Scenario
property
","text":""},{"location":"python_api/skybolt.html#skybolt.EngineRoot.world","title":"world: World
property
","text":""},{"location":"python_api/skybolt.html#skybolt.EngineRoot-functions","title":"Functions","text":""},{"location":"python_api/skybolt.html#skybolt.EngineRoot.locateFile","title":"locateFile(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.Entity","title":"Entity
","text":""},{"location":"python_api/skybolt.html#skybolt.Entity-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.Entity.dynamicsEnabled","title":"dynamicsEnabled: bool
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Entity-functions","title":"Functions","text":""},{"location":"python_api/skybolt.html#skybolt.Entity.addComponent","title":"addComponent(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.Entity.getComponents","title":"getComponents()
","text":""},{"location":"python_api/skybolt.html#skybolt.Entity.getComponentsOfType","title":"getComponentsOfType(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.Entity.getFirstComponentOfType","title":"getFirstComponentOfType(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.Entity.getId","title":"getId()
","text":""},{"location":"python_api/skybolt.html#skybolt.Entity.getName","title":"getName()
","text":""},{"location":"python_api/skybolt.html#skybolt.Entity.getOrientation","title":"getOrientation()
","text":""},{"location":"python_api/skybolt.html#skybolt.Entity.getPosition","title":"getPosition()
","text":""},{"location":"python_api/skybolt.html#skybolt.Entity.setOrientation","title":"setOrientation(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.Entity.setPosition","title":"setPosition(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.EntityFactory","title":"EntityFactory
","text":"Class responsible for creating Entity
instances based on a template name
createEntity(templateName, name='', position=..., orientation=..., id=...)
","text":""},{"location":"python_api/skybolt.html#skybolt.EntityId","title":"EntityId
","text":""},{"location":"python_api/skybolt.html#skybolt.EntityId-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.EntityId.applicationId","title":"applicationId: int
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.EntityId.entityId","title":"entityId: int
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.EntityTargeter","title":"EntityTargeter
","text":"Interface for a class which references a target Entity
by EntityId
getTargetId()
","text":""},{"location":"python_api/skybolt.html#skybolt.EntityTargeter.getTargetName","title":"getTargetName()
","text":""},{"location":"python_api/skybolt.html#skybolt.EntityTargeter.setTargetId","title":"setTargetId(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.EntityTargeter.setTargetName","title":"setTargetName(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.Frustum","title":"Frustum
","text":""},{"location":"python_api/skybolt.html#skybolt.Frustum-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.Frustum.fieldOfViewHorizontal","title":"fieldOfViewHorizontal: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Frustum.fieldOfViewVertical","title":"fieldOfViewVertical: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Frustum.orientation","title":"orientation: Quaternion
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Frustum.origin","title":"origin: Vector3
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.GeocentricOrientation","title":"GeocentricOrientation
","text":" Bases: Orientation
orientation: Quaternion
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.GeocentricPosition","title":"GeocentricPosition
","text":" Bases: Position
position: Vector3
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.LatLon","title":"LatLon
","text":"Represents a 2D location on a planet location as a latitude and longitude in radians
"},{"location":"python_api/skybolt.html#skybolt.LatLon-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.LatLon.lat","title":"lat: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.LatLon.lon","title":"lon: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.LatLonAlt","title":"LatLonAlt
","text":"Represents a 3D location on a planet location as a latitude and longitude in radians, and altitude in meters
"},{"location":"python_api/skybolt.html#skybolt.LatLonAlt-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.LatLonAlt.alt","title":"alt: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.LatLonAlt.lat","title":"lat: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.LatLonAlt.lon","title":"lon: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.LatLonAltPosition","title":"LatLonAltPosition
","text":" Bases: Position
position: LatLonAlt
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.LoadTimingPolicy","title":"LoadTimingPolicy
","text":"Enum specifying policy for timing of loading data into the renderer
Members:
LoadAcrossMultipleFrames
LoadBeforeRender
"},{"location":"python_api/skybolt.html#skybolt.LoadTimingPolicy-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.LoadTimingPolicy.LoadAcrossMultipleFrames","title":"LoadAcrossMultipleFrames: LoadTimingPolicy
class-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.LoadTimingPolicy.LoadBeforeRender","title":"LoadBeforeRender: LoadTimingPolicy
class-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.LoadTimingPolicy.name","title":"name: str
property
","text":""},{"location":"python_api/skybolt.html#skybolt.LoadTimingPolicy.value","title":"value: int
property
","text":""},{"location":"python_api/skybolt.html#skybolt.LtpNedOrientation","title":"LtpNedOrientation
","text":" Bases: Orientation
orientation: Quaternion
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.MainRotorComponent","title":"MainRotorComponent
","text":" Bases: Component
getPitchAngle()
","text":""},{"location":"python_api/skybolt.html#skybolt.MainRotorComponent.getRotationAngle","title":"getRotationAngle()
","text":""},{"location":"python_api/skybolt.html#skybolt.MainRotorComponent.getTppOrientationRelBody","title":"getTppOrientationRelBody()
","text":""},{"location":"python_api/skybolt.html#skybolt.MainRotorComponent.setNormalizedRpm","title":"setNormalizedRpm(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.OffscreenWindow","title":"OffscreenWindow
","text":" Bases: Window
Orientation
","text":""},{"location":"python_api/skybolt.html#skybolt.Position","title":"Position
","text":""},{"location":"python_api/skybolt.html#skybolt.Quaternion","title":"Quaternion
","text":"Represents an orientation as a quarternion of [x, y, z, w] components
"},{"location":"python_api/skybolt.html#skybolt.Quaternion-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.Quaternion.w","title":"w: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Quaternion.x","title":"x: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Quaternion.y","title":"y: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Quaternion.z","title":"z: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.RectI","title":"RectI
","text":"A rectangle defined by [x, y, width, height]
"},{"location":"python_api/skybolt.html#skybolt.Scenario","title":"Scenario
","text":""},{"location":"python_api/skybolt.html#skybolt.Scenario-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.Scenario.currentJulianDate","title":"currentJulianDate: float
property
","text":""},{"location":"python_api/skybolt.html#skybolt.Scenario.startJulianDate","title":"startJulianDate: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Scenario.time","title":"time: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.ScenarioMetadataComponent","title":"ScenarioMetadataComponent
","text":" Bases: Component
deletable: bool
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.ScenarioMetadataComponent.directory","title":"directory: VectorString
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.ScenarioMetadataComponent.serializable","title":"serializable: bool
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.StandaloneWindow","title":"StandaloneWindow
","text":" Bases: Window
TemplateNameComponent
","text":" Bases: Component
A component storing the name of the template which an Entity
instantiates
name: str
property
","text":""},{"location":"python_api/skybolt.html#skybolt.Vector3","title":"Vector3
","text":"A 3D vector of [x, y, z] components
"},{"location":"python_api/skybolt.html#skybolt.Vector3-attributes","title":"Attributes","text":""},{"location":"python_api/skybolt.html#skybolt.Vector3.x","title":"x: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Vector3.y","title":"y: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.Vector3.z","title":"z: float
instance-attribute
","text":""},{"location":"python_api/skybolt.html#skybolt.VectorString","title":"VectorString
","text":""},{"location":"python_api/skybolt.html#skybolt.VectorString-functions","title":"Functions","text":""},{"location":"python_api/skybolt.html#skybolt.VectorString.append","title":"append(x)
","text":"Add an item to the end of the list
"},{"location":"python_api/skybolt.html#skybolt.VectorString.clear","title":"clear()
","text":"Clear the contents
"},{"location":"python_api/skybolt.html#skybolt.VectorString.count","title":"count(x)
","text":"Return the number of times x
appears in the list
insert(i, x)
","text":"Insert an item at a given position.
"},{"location":"python_api/skybolt.html#skybolt.VectorString.remove","title":"remove(x)
","text":"Remove the first item from the list whose value is x. It is an error if there is no such item.
"},{"location":"python_api/skybolt.html#skybolt.VisRoot","title":"VisRoot
","text":""},{"location":"python_api/skybolt.html#skybolt.VisRoot-functions","title":"Functions","text":""},{"location":"python_api/skybolt.html#skybolt.VisRoot.addWindow","title":"addWindow(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.VisRoot.removeWindow","title":"removeWindow(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.VisRoot.setLoadTimingPolicy","title":"setLoadTimingPolicy(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.Window","title":"Window
","text":""},{"location":"python_api/skybolt.html#skybolt.World","title":"World
","text":""},{"location":"python_api/skybolt.html#skybolt.World-functions","title":"Functions","text":""},{"location":"python_api/skybolt.html#skybolt.World.addEntity","title":"addEntity(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.World.findObjectByName","title":"findObjectByName(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.World.getEntities","title":"getEntities()
","text":""},{"location":"python_api/skybolt.html#skybolt.World.removeAllEntities","title":"removeAllEntities()
","text":""},{"location":"python_api/skybolt.html#skybolt.World.removeEntity","title":"removeEntity(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt-functions","title":"Functions","text":""},{"location":"python_api/skybolt.html#skybolt.attachCameraToWindowWithEngine","title":"attachCameraToWindowWithEngine(arg0, arg1, arg2)
","text":""},{"location":"python_api/skybolt.html#skybolt.calcSmallestAngleFromTo","title":"calcSmallestAngleFromTo(arg0, arg1)
","text":""},{"location":"python_api/skybolt.html#skybolt.createEngineRootWithDefaults","title":"createEngineRootWithDefaults()
","text":"Create an EngineRoot with default values
"},{"location":"python_api/skybolt.html#skybolt.cross","title":"cross(arg0, arg1)
","text":""},{"location":"python_api/skybolt.html#skybolt.dot","title":"dot(arg0, arg1)
","text":""},{"location":"python_api/skybolt.html#skybolt.getGlobalEngineRoot","title":"getGlobalEngineRoot()
","text":"Get global EngineRoot
"},{"location":"python_api/skybolt.html#skybolt.moveDistanceAndBearing","title":"moveDistanceAndBearing(arg0, arg1, arg2)
","text":""},{"location":"python_api/skybolt.html#skybolt.normalize","title":"normalize(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.quaternionFromEuler","title":"quaternionFromEuler(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.registerComponent","title":"registerComponent(arg0, arg1)
","text":""},{"location":"python_api/skybolt.html#skybolt.render","title":"render(engineRoot, window)
","text":""},{"location":"python_api/skybolt.html#skybolt.setGlobalEngineRoot","title":"setGlobalEngineRoot(arg0)
","text":"Set global EngineRoot
"},{"location":"python_api/skybolt.html#skybolt.setWaveHeight","title":"setWaveHeight(arg0, arg1)
","text":""},{"location":"python_api/skybolt.html#skybolt.stepSim","title":"stepSim(arg0, arg1)
","text":""},{"location":"python_api/skybolt.html#skybolt.toGeocentricOrientation","title":"toGeocentricOrientation(arg0, arg1)
","text":""},{"location":"python_api/skybolt.html#skybolt.toGeocentricPosition","title":"toGeocentricPosition(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.toLatLon","title":"toLatLon(arg0)
","text":""},{"location":"python_api/skybolt.html#skybolt.transformToScreenSpace","title":"transformToScreenSpace(arg0, arg1)
","text":""},{"location":"python_api/skybolt_util.html","title":"skybolt_util","text":"Utility functionality for working with Skybolt in Python.
"},{"location":"python_api/skybolt_util.html#skybolt_util-functions","title":"Functions","text":""},{"location":"python_api/skybolt_util.html#skybolt_util.geocentric_to_lla","title":"geocentric_to_lla(xyz)
","text":"Converts a geocentric position Vector3
to a LatLonAlt
lla_to_geocentric(lla)
","text":"Converts a LatLonAlt
to a geocentric position Vector3
rpy_to_geocentric_quat(rpy, lat_lon)
","text":"Converts a roll, pitch, yaw Vector3
to a Quartion
at the given LatLonAlt
location
set_entity_lla(entity, lla)
","text":"Sets the position of an entity to a latitude, longitude and altitude
"},{"location":"python_api/skybolt_util.html#skybolt_util.set_entity_lla_rpy","title":"set_entity_lla_rpy(entity, lla, rpy)
","text":"Sets the position of an entity to a latitude, longitude and altitude, and sets the orientation to a roll, pitch, yaw vector.
"}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"index.html","title":"Overview","text":"Skybolt is a 3D geospatial application for simulating and visualizing dynamic entities in planetary environments.
With Skybolt you can:
- Create scenarios featuring dynamic 3D objects with modular components and properties.
- Interact with objects via 3D geospatial user interface.
- Render photoreal environments featuring terrain, ocean, buildings, roads, vegetation, and clouds.
- Import and visualize data from external sources including CSV files and CIGI host applications.
- Extend functionality with C++ and Python plugins.
Continue to the Getting Started guide.
"},{"location":"index.html#contact","title":"Contact","text":"To submit a bug report, please raise an issue on the GitHub repository. For general discussion, please post on our GitHub discussions page. For business enquiries, please use our contact form.
"},{"location":"index.html#license","title":"License","text":"This project is licensed under the Mozilla Public License Version 2.0.
"},{"location":"architecture.html","title":"Architecture","text":""},{"location":"architecture.html#core","title":"Core","text":"The Skybolt engine is based on a flexible entity-component system, which makes it easy to represent both physical and non-physical objects in the world.
"},{"location":"architecture.html#skyboltsim","title":"SkyboltSim","text":"At the heart of the engine, the SkyboltSim
library manages the simulation loop and handles dynamics and system state updates.
The main aspects of the simulation architecture are:
- Simulation Loop: Continuously updates the state of entities based on dynamics, user input, and external data.
- Systems: Handle core processes such as dynamics simulation.
- Entities: Objects in the simulation. Each entity can represent a physical object (e.g. aircraft, ship) or an non-physical object that performs a function.
- Components: Modular building blocks giving functionality to entities. Components may define an entity's position, behavior, appearance, or other characteristics.
The SkyboltVis
library renders visual represenations of entities. The renderer is built to provide physically plausible imagery from ground level to space. The renderer uses tile-based streaming from geospatial sources, allowing efficient real-time loading of terrain and features such as buildings, roads, rivers and lakes.
Environments are rendered use multiple physically-based lighting techniques:
- Hard-surface BRDFs to render hard objects like aircraft, terrain and buildings
- Planetary atmospheric scattering model
- Volumetric cloud ray-marcher
Under the hood, SkyboltVis
uses OpenSceneGraph to manage scene graph state, issue draw calls, and handle 2D/3D asset file IO.
The SkyboltEngine
library ties together SkyboltSim
and SkyboltVis
, and provides engine-level functionality like user input, scenario management, and plugin support.
To support a wide variety of use cases, the simulation engine is extensible through C++ and Python plugins.
- C++ Plugins: Leverages high-performance code for simulation-critical functionality.
- Python Plugins: For rapid prototyping, scripting, and extending functionality, for example adding new entity component types.
The application features a Qt-based graphical user interface that allows users to interact with entities in the 3D environment. The SkyboltQt
library provides funcionality for GUI widgets and bindings between the GUI and the engine.
At runtime, Skybolt uses assets such as meshes, textures, and shaders. These assets are organized into packages. Each package is a folder containing a hierarchy of asset files on disk.
Some packages are requied to run Skybolt, while others are optional. The pre-built version of Skybolt ships with the minimum set of required packages. If you compiled Skybolt from source, please ensure Skybolt can find the required packages.
Skybolt searches for asset packages in these locations:
<CurrentWorkingDirectory>/Assets
- Paths in the
SKYBOLT_ASSETS_PATH
environment variable
Core assets including fonts, icons, shaders and python modules. Located under the Assets
folder in the main repository.
These packages required for running the SkyboltQtApp
and example applications. These are located in the SkyboltAssets repository. SkyboltAssets uses DVC for remote storage and retrieval of large files which are not stored in the git repository itself.
To checkout the SktboltAssets repository:
- If you do not already have DVC installed, run
pip install dvc[s3]
to install with pip - Clone SkyboltAssets and checkout desired git branch/tag
- Run
dvc pull
command in the SkyboltAssets root directory to fetch the remote files
Land cover tiles for USA. Used by Skybolt to place trees on terrain in forest areas. This package can be downloaded here.
"},{"location":"asset_packages.html#seattle","title":"\"Seattle\"","text":"Map features (buildings, roads, lakes etc) for the city of Seattle. These features were generated from OpenStreetMap data using Skybolt's MapFeaturesConverter
tool. This package can be downloaded here.
Skybolt uses the CMake meta-build system and the Conan package manager.
A list of skybolt dependencies can be found in conanfile.py
.
Install with pip: pip3 install conan
.
Use conan to build Skybolt. Under the hood this will execute CMake to generate project files for your IDE and compile the project.
conan build %SKYBOLT_SOURCE% --output-folder=%SKYBOLT_BUILD% --lockfile-partial\n
Custom configuration options may be supplied with the -o
argument, for example:
conan build %SKYBOLT_SOURCE% --output-folder=%SKYBOLT_BUILD% --lockfile-partial -o openscenegraph-mr:shared=True -o enable_python=True -o enable_qt=True -o enable_bullet=True -o enable_cigi=True\n
Please refer to conanfile.py
for a full list of available configuration options.
Skybolt needs a minimum set of required asset packages to run. These packages are shipped with the pre-built Skybolt version, but must be installed manually when building from source. See Asset Packages for details.
"},{"location":"configuration.html","title":"Configuration","text":""},{"location":"configuration.html#engine-settings","title":"Engine Settings","text":"Engine settings are stored in a Settings.json
json file, which may be manually edited with a text editor, or edited in the SkyboltQtApp
using the Tools->Settings
dialog.
The settings file can be loaded by Skybolt applications with the --settingsFile
commandline option. If the option is not specified, a default Settings.json
in the Operating System user's home directory will be used. On windows, this is located at C:/Users/%USERNAME%/AppData/Local/Skybolt/Settings.json
.
SKYBOLT_PLUGINS_PATH
sets plugin search locations. The /plugins folder in the application executable's directory is searched in additional to this path.SKYBOLT_CACHE_DIR
sets the directory where cached terrain tiles are read from and written to. If not set, the default directory is C:/Users/%USERNAME%/AppData/Local/Skybolt/CacheSKYBOLT_ASSETS_PATH
sets the search locations for asset packages.SKYBOLT_MAX_CORES
sets the maximum number of CPU cores the engine may use. If not set, all cores are used.
By default, the PlanetEarth
Skybolt entity uses mapbox for albedo and elevation data. To use mapbox, you must acquire an API key from Mapbox. Without an API key, the tiles will not download, the the planet will not render correctly. If desired, PlanetEarth
can be edited to use Bing maps for albedo instead. A bing key can be obtained from Microsoft.
API keys for third party map sources are stored in the engine settings file Settings.json
.
Skybolt can be obtained using one of the following methods:
- Download a pre-built version on supported operating systems
- Build from source
The main Skybolt GUI application can be started by running the SkyboltQtApp
executable from the bin
folder.
To explore example scenarios, navigate to the /Scenarios
folder, where you will find pre-configured scenarios that demonstrate use cases of the application.
Skybolt supports Python and C++ plugins as follows:
"},{"location":"getting_started.html#python","title":"Python","text":"Skybolt allows users to implement new Entity Component types in Python. These components are initialized when the entity is added to the scene, updated each time step, and destroyed when the entity is removed.
The ReplaySource
is an example of a component implemented in Python. This component is responsible for replaying simulation data from a CSV file. See Assets/Core/Scripts/replay_source.py
.
At runtime, Skybolt searches for python plugin modules inside asset packages under <AssetPackage>/Scripts
.
Skybolt allows develpers to add new engine functionality by writing C++ plugins. Please refer to src/Skybolt/SkyboltEnginePlugins/
for examples.
At runtime, Skybolt searches for plugins under the bin/plugins
folder.
Skybolt has a python API which allows the engine to be used outside the SkyboltQtApp
application. Refer to src/SkyboltExamples/MinimalPython/MinimalPython.py
as an example. See also Python API documentation.
Skybolt comes with the following Python modules:
- skybolt - provides access to Skybolt Engine C++ functionality.
- skybolt_util - auxilary utility functionality.
Python API for accessing Skybolt Engine C++ functionality.
"},{"location":"python_api/skybolt_util.html","title":"skybolt_util","text":"Utility functionality for working with Skybolt in Python.
"},{"location":"python_api/skybolt_util.html#skybolt_util-functions","title":"Functions","text":""},{"location":"python_api/skybolt_util.html#skybolt_util.geocentric_to_lla","title":"geocentric_to_lla(xyz)
","text":"Converts a geocentric position Vector3
to a LatLonAlt
lla_to_geocentric(lla)
","text":"Converts a LatLonAlt
to a geocentric position Vector3
rpy_to_geocentric_quat(rpy, lat_lon)
","text":"Converts a roll, pitch, yaw Vector3
to a Quartion
at the given LatLonAlt
location
set_entity_lla(entity, lla)
","text":"Sets the position of an entity to a latitude, longitude and altitude
"},{"location":"python_api/skybolt_util.html#skybolt_util.set_entity_lla_rpy","title":"set_entity_lla_rpy(entity, lla, rpy)
","text":"Sets the position of an entity to a latitude, longitude and altitude, and sets the orientation to a roll, pitch, yaw vector.
"}]} \ No newline at end of file