Skip to content

Commit 689a59a

Browse files
bnbailey-pslktrizzo
andcommitted
[1.3.65] 2026-02-27
- Expanded `loadTabularTimeseriesData()` to support combined "datetime" columns (ISO-8601 with timezone offsets, compact YYYYMMDDHH/YYYYMMDDHHMM, space-separated date+time), a "time" column (HH:MM, HH:MM:SS), compact 8-digit date strings, and date format synonyms (e.g., "YYYY-MM-DD", "DD/MM/YYYY"). - Fixed `Tube::pruneTubeNodes()` to correctly partition and delete primitives using the proper UUID ordering, and fixed `Tube::updateTriangleVertices()` loop order to match `addTubeObject()` so that colors stay mapped to the correct segments. - Added Vulkan compute backend with software BVH traversal, enabling GPU-accelerated ray tracing on AMD, Intel, and Apple Silicon GPUs without requiring CUDA or OptiX. Backend selection is now automatic based on available hardware, with `FORCE_VULKAN_BACKEND` CMake option for testing. The OptiX backend now handles its own launch batching internally rather than in `RadiationModel`. Tile sub-patches are treated as individual patches for cross-backend compatibility, and the Prague sky model parameters are now properly passed to all backends. - Major overhaul: added Bayesian Optimization (Gaussian Process with UCB acquisition) and CMA-ES algorithms alongside the existing Genetic Algorithm. New `setAlgorithm()` API replaces the old `OptimizationSettings` struct, with configurable crossover operators (BLX-alpha, BLX-PCA), mutation operators (per-gene, isotropic, hybrid PCA), integer/categorical parameter types, fitness caching, and `explore()`/`exploit()` factory presets for each algorithm. - Fixed sign error in turgor pressure term of the water potential equation in the documentation. - Updated multi-return triangulation filter documentation to reflect first-return filtering and corrected separation ratio threshold. Co-authored-by: Kyle Rizzo <ktrizzo@users.noreply.github.com>
1 parent 1e45bc2 commit 689a59a

66 files changed

Lines changed: 34833 additions & 1123 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/linux_GPU_selftests.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
start-gpu:
1818
runs-on: ubuntu-latest
1919
steps:
20-
- uses: aws-actions/configure-aws-credentials@v2
20+
- uses: aws-actions/configure-aws-credentials@v4
2121
with:
2222
role-to-assume: ${{ secrets.OIDC_ROLE_ARN }}
2323
aws-region: us-west-2
@@ -60,7 +60,7 @@ jobs:
6060
runs-on: [self-hosted,helios]
6161
needs: start-gpu
6262
steps:
63-
- uses: actions/checkout@v3
63+
- uses: actions/checkout@v4
6464
- name: Bash script
6565
run: |
6666
cd utilities
@@ -76,7 +76,7 @@ jobs:
7676
if: always()
7777
runs-on: ubuntu-latest
7878
steps:
79-
- uses: aws-actions/configure-aws-credentials@v2
79+
- uses: aws-actions/configure-aws-credentials@v4
8080
with:
8181
role-to-assume: ${{ secrets.OIDC_ROLE_ARN }}
8282
aws-region: us-west-2

.github/workflows/linux_selftests.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ jobs:
1818
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
1919
runs-on: ubuntu-latest
2020
steps:
21-
- uses: actions/checkout@v3
21+
- uses: actions/checkout@v4
2222
#- uses: openrndr/setup-opengl@v1.1
2323
- name: Checkout OPENRNDR repository
24-
uses: actions/checkout@v3
24+
uses: actions/checkout@v4
2525
with:
2626
fetch-depth: 0
2727
repository: openrndr/openrndr
@@ -34,15 +34,15 @@ jobs:
3434
sudo apt-get install -y mesa-utils xvfb
3535
xvfb-run glxinfo
3636
37-
- name: Install dependent packages for visualizer
37+
- name: Install dependent packages for visualizer and Vulkan
3838
run: |
3939
sudo apt-get update -y
40-
sudo apt-get install -y libx11-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev libxrandr-dev
40+
sudo apt-get install -y libx11-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev libxrandr-dev libvulkan-dev glslang-tools
4141
4242
- name: Bash script
4343
run: |
4444
cd utilities
45-
if ! ./run_tests.sh --nogpu --visbuildonly --log-file ../linux_selftests.log; then
45+
if ! ./run_tests.sh --visbuildonly --log-file ../linux_selftests.log; then
4646
echo "==== run_tests.sh failed; dumping linux_selftests.log ===="
4747
cat ../linux_selftests.log
4848
exit 1

.github/workflows/mac_selftests.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,20 @@ jobs:
1919
runs-on: macos-latest
2020

2121
steps:
22-
- uses: actions/checkout@v3
22+
- uses: actions/checkout@v4
2323
- name: Install homebrew
2424
run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2525
- name: Install XQuartz
2626
run: brew install Caskroom/cask/xquartz
2727
- name: Install OpenMP support
2828
run: brew install libomp
29+
- name: Install Vulkan dependencies
30+
run: brew install vulkan-headers vulkan-loader molten-vk glslang
2931

3032
- name: Bash script
3133
run: |
3234
cd utilities
33-
if ! ./run_tests.sh --nogpu --visbuildonly --log-file ../macos_selftests.log; then
35+
if ! ./run_tests.sh --visbuildonly --log-file ../macos_selftests.log; then
3436
echo "==== run_tests.sh failed; dumping macos_selftests.log ===="
3537
cat ../macos_selftests.log
3638
exit 1

.github/workflows/windows_GPU_selftests.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
start-gpu:
1818
runs-on: ubuntu-latest
1919
steps:
20-
- uses: aws-actions/configure-aws-credentials@v2
20+
- uses: aws-actions/configure-aws-credentials@v4
2121
with:
2222
role-to-assume: ${{ secrets.OIDC_ROLE_ARN }}
2323
aws-region: us-west-2
@@ -57,7 +57,7 @@ jobs:
5757
runs-on: [self-hosted, Windows]
5858
needs: start-gpu
5959
steps:
60-
- uses: actions/checkout@v3
60+
- uses: actions/checkout@v4
6161
- uses: ilammy/msvc-dev-cmd@v1
6262

6363
- name: Bash script
@@ -76,7 +76,7 @@ jobs:
7676
if: always()
7777
runs-on: ubuntu-latest
7878
steps:
79-
- uses: aws-actions/configure-aws-credentials@v2
79+
- uses: aws-actions/configure-aws-credentials@v4
8080
with:
8181
role-to-assume: ${{ secrets.OIDC_ROLE_ARN }}
8282
aws-region: us-west-2

.github/workflows/windows_selftests.yaml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,20 @@ jobs:
1919
runs-on: windows-latest
2020

2121
steps:
22-
- uses: actions/checkout@v3
22+
- uses: actions/checkout@v4
2323
- uses: ilammy/msvc-dev-cmd@v1
24+
- name: Install Vulkan SDK
25+
uses: humbletim/setup-vulkan-sdk@v1.2.1
26+
with:
27+
vulkan-query-version: latest
28+
vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Headers, SPIRV-Tools, Glslang
29+
vulkan-use-cache: true
2430

2531
- name: Bash script
2632
shell: bash
2733
run: |
2834
cd utilities
29-
if ! ./run_tests.sh --nogpu --visbuildonly --log-file ../windows_selftests.log; then
35+
if ! ./run_tests.sh --visbuildonly --log-file ../windows_selftests.log; then
3036
echo "==== run_tests.sh failed; dumping windows_selftests.log ===="
3137
cat ../windows_selftests.log
3238
exit 1

benchmarks/radiation_homogeneous_canopy/main.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ int main() {
2424
timer.tic();
2525

2626
uint objID_ptype = context.addTileObject(make_vec3(0, 0, 0), make_vec2(w_leaf, w_leaf), make_SphericalCoord(0, 0), make_int2(2, 2), "plugins/radiation/disk.png");
27-
std::vector<uint> UUIDs_ptype = context.getObjectPointer(objID_ptype)->getPrimitiveUUIDs();
27+
std::vector<uint> UUIDs_ptype = context.getObjectPrimitiveUUIDs(objID_ptype);
2828

2929
float A_leaf = 0;
3030
for (uint p = 0; p < UUIDs_ptype.size(); p++) {
@@ -43,12 +43,12 @@ int main() {
4343

4444
uint objID = context.copyObject(objID_ptype);
4545

46-
context.getObjectPointer(objID)->rotate(-rotation.elevation, "y");
47-
context.getObjectPointer(objID)->rotate(rotation.azimuth, "z");
46+
context.rotateObject(objID, -rotation.elevation, "y");
47+
context.rotateObject(objID, rotation.azimuth, "z");
4848

49-
context.getObjectPointer(objID)->translate(position);
49+
context.translateObject(objID, position);
5050

51-
std::vector<uint> UUIDs = context.getObjectPointer(objID)->getPrimitiveUUIDs();
51+
std::vector<uint> UUIDs = context.getObjectPrimitiveUUIDs(objID);
5252

5353
UUIDs_leaf.insert(UUIDs_leaf.end(), UUIDs.begin(), UUIDs.end());
5454
}

core/CMake_project.cmake

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,10 @@ if(NOT HELIOS_PREVIOUS_COMMIT STREQUAL GIT_COMMIT_HASH)
8686
message(STATUS "[Helios] Git commit version change detected, automatically re-configuring...")
8787

8888
# Clean CUDA object files to prevent linking issues with stale objects
89-
find_package(CUDAToolkit QUIET)
89+
# Only find CUDA if not forcing Vulkan backend
90+
if(NOT FORCE_VULKAN_BACKEND)
91+
find_package(CUDAToolkit QUIET)
92+
endif()
9093
if(CUDAToolkit_FOUND)
9194
message(STATUS "[Helios] Cleaning CUDA object files due to version change...")
9295
file(GLOB_RECURSE CUDA_OBJECTS

core/include/Context.h

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,6 +1292,8 @@ namespace helios {
12921292

12931293
void updateTriangleVertices() const;
12941294

1295+
void recomputeCrossSections();
1296+
12951297
friend class CompoundObject;
12961298
friend class Context;
12971299
};
@@ -6816,9 +6818,27 @@ namespace helios {
68166818
//! Load tabular weather data from text file into timeseries
68176819
/**
68186820
* \param[in] data_file Path to the text file containing the tabular weather data.
6819-
* \param[in] column_labels Vector of strings indicating which columns to extract.
6821+
* \param[in] column_labels Vector of strings indicating which columns to extract. Special keywords:
6822+
* - "year", "DOY"/"Jul": Specify date via year + day-of-year columns.
6823+
* - "date": Date string column (requires date_string_format).
6824+
* - "datetime": Combined date+time column (e.g., ISO-8601). Cannot be used with "date" or "hour".
6825+
* - "hour": Integer hour column (supports 13 or 1300 formats).
6826+
* - "time": Time string column (auto-detects HH, HH:MM, or HH:MM:SS).
6827+
* - "minute", "second": Optional sub-hour precision with "hour" column.
6828+
* - Any other non-empty label: treated as a data variable.
68206829
* \param[in] delimiter Character or string that separates values in each row.
6821-
* \param[in] date_string_format [optional] Format of date strings. Default: "YYYYMMDD".
6830+
* \param[in] date_string_format [optional] Format of date strings. Supported formats:
6831+
* - Date-only (for "date" column): "YYYYMMDD", "DDMMYYYY", "MMDDYYYY", "YYYYDDMM"
6832+
* (also accepts delimiter-style synonyms: "YYYY-MM-DD", "DD/MM/YYYY", "MM-DD-YYYY", etc.)
6833+
* Compact 8-digit dates without delimiters (e.g., "20260203") are auto-detected.
6834+
* - Combined datetime (for "datetime" column):
6835+
* "ISO8601" — e.g., "2026-02-03T10:00:00Z" or "2026-02-03T02:00:00-08:00"
6836+
* "YYYYMMDDHH" — compact 10-digit, e.g., "2026020310"
6837+
* "YYYYMMDDHHMM" — compact 12-digit, e.g., "202602031000"
6838+
* "YYYY-MM-DD HH:MM", "YYYY-MM-DD HH:MM:SS" — space-separated date and time
6839+
* "DD/MM/YYYY HH:MM", "MM/DD/YYYY HH:MM" — with various date orderings
6840+
* For ISO-8601 with timezone offsets, the local time is used and the Context UTC_offset is set.
6841+
* Default: "YYYYMMDD".
68226842
* \param[in] headerlines [optional] Number of lines to skip at the beginning. Default: 0.
68236843
*/
68246844
void loadTabularTimeseriesData(const std::string &data_file, const std::vector<std::string> &column_labels, const std::string &delimiter, const std::string &date_string_format = "YYYYMMDD", uint headerlines = 0);
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
date,hour,temperature
2+
20260203,10,15.5
3+
20260203,11,16.2
4+
20260203,12,17.8
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
datetime,temperature
2+
2026020310,15.5
3+
2026020311,16.2
4+
2026020312,17.8

0 commit comments

Comments
 (0)