Skip to content

ahornero/SILVO

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SILVO — a Simplified Light–Vegetation Overlay model

CI DOI License OpenMP

SILVO model visualization

SILVO is a lightweight 3D ray-tracing model to characterise the structure and illumination of heterogeneous vegetation canopies (e.g., orchards, open woodlands, agroforestry systems) from minimal inputs: tree crown position/size plus sun/view geometry.

It is designed to be fast and reproducible, and it is parallelised with OpenMP.

Table of contents

What SILVO produces

  • Gap fraction and sunlit/shaded fractions (soil & vegetation)
  • Vertical structural proxies (density / profiles) that can constrain 1D RTMs (e.g., SAIL/SCOPE-type workflows)
  • A quick-look render (PPM) and analysis-ready rasters (ENVI BIP + HDR)

Quick start (Linux)

1) Install build tools (Debian-based OS)

sudo apt update
sudo apt install -y build-essential

2) Clone the repository

git clone https://github.com/ahornero/silvo.git
cd silvo

3) Build

From the repository root:

make

The executable is created at (already precompiled in the repo for amd64)

./bin/silvo

4) Run an example

cd examples/ourique_default
./run_silvo.sh

Outputs are written in the folder where you run SILVO (e.g., inside the example directory) and from the previous example should generate a BIL (ENVI) file (with its header, hdr companion file) containing all the output as layers and a PNG image as preview.

Usage

SILVO workflow By default, SILVO reads the following files from the current working directory:

  • scene.txt
  • settings.txt

But they can be chosen from the command line as arguments:

./bin/silvo --scene path/to/scene.txt --config path/to/settings.txt

Same applies for the solar and camera settings. Command-line values take precedence over settings.txt:

./bin/silvo --scene scene.txt --config settings.txt \
  --sza 35 --saa 120 --cza 0 --caa 0 --cds 600 --fov 30

Help

./bin/silvo -h
Usage: ./bin/silvo
        [-s|--scene scene_file (scene.txt)]
        [-c|--config config_file (settings.txt)]
        [--sza value] [--saa value] [--cza value] [--caa value] [--cds value] [--fov value]
        [-h] (show this)

Inputs

scene.txt (vegetation crowns)

Plain text. Each non-comment (#...) line contains:

x  y  z  radius
  • Lines starting with # are ignored.
  • z is typically 0 for flat terrain (SILVO places spheres sitting on the ground). Example:
# x   y   z   radius
0.0  0.0  0.0  2.5
8.0  0.0  0.0  2.0
0.0  8.0  0.0  3.0

settings.txt (camera + sun + flags)

Plain text key/value pairs, e.g.:

solar_zenith = 35
solar_azimuth = 120

camera_zenith = 0
camera_azimuth = 0
camera_distance = 600
camera_fov = 30

debug = 0
gap_fraction_profile_enabled = 0

Outputs

SILVO outputs SILVO writes outputs to the current working directory:

  • output_image.ppm — RGB quick-look render
  • output.bip + output.hdr — ENVI BIP (15 bands, float32) + header
  • Console metrics (stdout): gap fraction, sunlit/shaded fractions, normalised density
  • Optional CSV profiles:
    • vertical_profile.csv (generated when camera_zenith == 90)
    • gap_fraction_profile.csv (generated when gap_fraction_profile_enabled = 1 and camera_zenith != 90)

How to cite

If you use SILVO in academic work, please cite:

Hornero, A., Prikaziuk, E., Hernandez-Clemente, R., van der Tol, C. (2026).
SILVO, a lightweight 3D illumination model to characterise the spatial structure of heterogeneous vegetation canopies.
International Journal of Applied Earth Observation and Geoinformation, 147, 105178. https://doi.org/10.1016/j.jag.2026.105178
@article{Hornero2026SILVO,
  title   = {SILVO, a lightweight 3D illumination model to characterise the spatial structure of heterogeneous vegetation canopies},
  author  = {Hornero, A. and Prikaziuk, E. and Hernandez-Clemente, R. and van der Tol, C.},
  journal = {International Journal of Applied Earth Observation and Geoinformation},
  volume  = {147},
  pages   = {105178},
  year    = {2026},
  issn    = {1569-8432},
  doi     = {10.1016/j.jag.2026.105178},
  url     = {https://doi.org/10.1016/j.jag.2026.105178}
}

About

Lightweight 3D ray-tracing model for canopy structure, gap fraction & profiles (w/ OpenMP)

Topics

Resources

License

Stars

Watchers

Forks

Contributors