Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time
August 23, 2023 22:51
October 18, 2023 14:20
September 29, 2023 17:07
November 27, 2023 10:53
January 27, 2023 15:39
February 23, 2023 07:54
December 22, 2021 16:15
October 10, 2023 12:59
February 3, 2021 10:25
October 18, 2023 14:20
October 31, 2023 06:32
October 25, 2023 11:39
November 27, 2023 10:17
October 19, 2023 08:00
October 18, 2023 14:20
January 20, 2021 16:09
January 20, 2021 16:09
October 25, 2023 11:39
December 11, 2022 23:51
January 20, 2021 16:56
January 20, 2021 16:56
January 20, 2021 16:56
December 22, 2021 16:15
November 30, 2021 15:45
June 16, 2022 15:08
October 12, 2021 20:27
May 3, 2022 14:34


DOI Issues License Activity Downloads Build

Heidelberg LiDAR Operations Simulator ++


HELIOS++ is a general-purpose software package for simulation of terrestrial, mobile and airborne laser scanning surveys written in C++11. It is developed and maintained by the 3DGeo Research Group at Heidelberg University.

💻 Download

Precompiled versions for Windows and Ubuntu (other Debian might also work, but you need to install dependencies manually) are available under releases.

ℹ Documentation

As a starting point, please consult the wiki. We suggest you take the "first steps" tour to get to know the core concepts of the software.

Official website:

For scientific and collaboration inquiries please contact the HELIOS++ team at

We have also published two papers on HELIOS++. If you use HELIOS++ in a scientific context, please cite one of the following:

  • General description of the framework:

Winiwarter, L., Esmorís Pena, A., Weiser, H., Anders, K., Martínez Sanchez, J., Searle, M., Höfle, B. (2022): Virtual laser scanning with HELIOS++: A novel take on ray tracing-based simulation of topographic full-waveform 3D laser scanning. Remote Sensing of Environment, 269, doi:10.1016/j.rse.2021.112772


title = {Virtual laser scanning with HELIOS++: A novel take on ray tracing-based simulation of topographic full-waveform 3D laser scanning},
journal = {Remote Sensing of Environment},
year = {2022},
volume = {269},
issn = {0034-4257},
doi = {},
url = {},
author = {Lukas Winiwarter and Alberto Manuel {Esmorís Pena} and Hannah Weiser and Katharina Anders and Jorge {Martínez Sánchez} and Mark Searle and Bernhard Höfle},
keywords = {Software, LiDAR simulation, Point cloud, Data generation, Voxel, Vegetation modelling, Diffuse media}
  • High performance computing:

Esmorís, A. M., Yermo, M., Weiser, H., Winiwarter, L., Höfle, B., Rivera, F. F. (2022): Virtual LiDAR Simulation as a High Performance Computing Challenge: Toward HPC HELIOS++. IEEE Access, 10, doi:10.1109/ACCESS.2022.3211072


  author={Esmorís, Alberto M. and Yermo, Miguel and Weiser, Hannah and Winiwarter, Lukas and Höfle, Bernhard and Rivera, Francisco F.},
  journal={IEEE Access},
  title={Virtual LiDAR Simulation as a High Performance Computing Challenge: Toward HPC HELIOS++},
  issn = {2169-3536},

🎮 Examples

XML demos

Example 1 Example 2
Example 3 Example 4
Example 5 Example 6
Example 7 Example 8
Example 9 Example 10
Example 11 Example 12
Example 13 Example 14
Example 15


Tutorial I Tutorial II
Tutorial III Tutorial IV

Further examples

Example A

⌨ Usage

HELIOS++ can be invoked with following syntax:

helios --help
    Show the help for helios++ usage

helios --test
    Perform necessary tests to check everything works as expected
helios --version
    Show the HELIOS++ version details

helios <survey_file_path> [OPTIONAL ARGUMENTS]
    Perform requested simulation.

    NOTICE specifying the path to the survey specification file is mandatory

    Available general OPTIONAL ARGUMENTS are:
        --assets <directory_path>
            Specify the path to assets directory
        --output <directory_path>
            Specify the path to output directory
            Enable the one-file-per-device writing mode when using a
            multi-channel scanner.
            Specify the full waveform must be written
            Specify the full waveform must be fitted
            Enable random noise at full waveform computation
            Sets incidence angle to exactly 1.0 for all intersections
        --seed <seed>
            Specify the seed to be used for randomness generation.
            The seed can be an integer number, a decimal number or a timestamp
            string with format "YYYY-mm-DD HH:MM:SS"
        --gpsStartTime <string>
            Specify the GPS start time. By default it is an empty string "",
            which means using current system time.
            It can be given as both, a posix timestamp as string or a datetime
            string with format "YYYY-MM-DD hh:mm:ss"
            Specify the output point cloud must be generated using LAS format
            Specify the output point cloud and fullwave must be zipped
            Specify the scale factor used to generate LAS output
        --parallelization <integer>
            Specify the parallelization strategy. Where 0 leads to a simple
            static/dynamic chunk based strategy and 1 leads to a warehouse
            based strategy
        -j OR --njobs OR --nthreads <integer>
            Specify the number of simultaneous threads to be used to compute
            the simulation
            If it is not specified or it is specified as 0, then all available
            threads will be used to compute the simulation
        --chunkSize <integer>
            Specify the chunk size. If it is positive, it will be used as a
            fixed size but if it is negative the absolute value will be used
            as starting size of a dynamic chunk-size based strategy.
        --warehouseFactor <integer>
            The number of tasks in the warehouse would be k times the number
            of workers. Greater factor implies less probability of idle cores
            at expenses of greater memory consumption.
            Force scene rebuild even when a previosly built scene is available
        --kdt <integer>
            Specify the type of KDTree to be built for the scene.
            Using 1 leads to the simple KDTree based on median balancing,
            2 to the SAH based KDTree, 3 for the SAH with best axis criteria
            and 4 (the default) to the fast approximation of SAH
        --kdtJobs <integer>
            Specify the number of threads to be used for building the KDTree.
            Using 1 forces sequential building, 0 as many threads as available
            cores and n>1 implies using exactly n threads.
            Using more cores than required might degrade performance due to
        --kdtGeomJobs <integer>
            Specify the number of threads to be used for upper levels of
            KDTree building.
            By default it is 0, which means as many jobs as --kdtJobs
            Using 1, means no geometry-level parallelization will be used when
            building the KDTree
            Using >1, means exactly n threads will be used at geometry-level
            KDTree building
        --sahNodes <integer>
            Either how many nodes must be used by the Surface Area Heuristic
            or the number of bins for the fast approximation of SAH
            Disable platform noise, no matter what is specified on XML files
            Disable leg noise, no matter what is specified on XML files

    Available logging verbosity OPTIONAL ARGUMENTS are:
            Nothing will be reported
        -q OR --quiet
            Only errors will be reported
            Time and errors will be reported
            Errors, information and warnings will be reported
        -vv OR -v2
            Everything will be reported
            Errors and information will be reported by default

    Available logging output mode OPTIONAL ARGUMENTS are:
            Reports will be emitted through standard output and output file
            Reports will be emitted through output file only
            Reports will be emitted through standard output only

    Unzip compressed output:
        --unzip <input_path> <output_path>
            When helios++ is executed with --zipOutput flag, output files are
            compressed. They can be decompressed using --unzip.
            The path to a readable helios++ compressed output file must be
            given through input path.
            The path to a writable file/location must be given through
            output path.

The demo simulation can be executed as follows:


run/helios data/surveys/demo/tls_arbaro_demo.xml


run\helios.exe data/surveys/demo/tls_arbaro_demo.xml

🛠 Building from Source

Build instructions for advanced users and developers are available here.

🐍 Running pyhelios

For running pyhelios, we suggest setting up a seperate conda environment. After downloading one of the releases or building from source, run

conda env create -f conda-environment.yml

in the base environment of your conda installation, while you are in the HELIOS++ root directory. Then run

conda activate pyhelios_env

to activate the environment and

python pyhelios_demo\ data\surveys\toyblocks\als_toyblocks.xml

to run a demo survey including visualisation.

🎞️ Blender Add-ons

Our two Blender add-ons allow you to export animated Blender scenes to HELIOS++, providing an interface to probably the most popular free and open source 3D software. dyn_b2h exports a Blender animation to a dynamic HELIOS++ scene with rigid motions, while multi_epoch_b2h exports static snapshots of the animation, creating a time series of HELIOS++ scenes. The add-ons include exporting scene part OBJ files and writing scene XML files, and can also be used for static scenes. Download the add-ons from the GitHub repo and get started!

🌍 QGIS Plugin

Our QGIS Plugin AEOS embeds HELIOS++ into one of the most widely used GIS applications. It enables the creation of HELIOS++ surveys using QGIS vector and raster layers and the subsequent execution of the surveys, with direct availability of the results in the form of a QGIS point cloud layer. Crucially, it allows for instant visualisation of both the input and output of a HELIOS++ simulation within a familiar user interface, thereby greatly improving ease of use. In Greek mythology, Aeos is the name of one of the four horses that pulls Helios' fiery chariot accross the sky. Feel free to download AEOS from its own GitHub repo and add it to your arsenal of QGIS plugins now!

📜 License