#!/usr/bin/env bash set -euo pipefail repo_root=$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd) resource_root=${VDB_RESOURCE_ROOT:-/home/mes123456/resource-library/blender-web-vdb} build_dir=${VDB_TOOLS_BUILD_DIR:-"$repo_root/build_vdb_tools"} sphere_sha=bb884a9a38354e47191c4ece4a11d1e051594a910fde56501cfc51ff52b171ab license_sha=8d3fceb4cb62663775f02c1c551cfbf332d1c736667c17817c16c635caba21e0 mkdir -p "$resource_root"/{generated,official,nanovdb,reports,manifests,licenses} "$repo_root/tools/vdb/build-native-tools.sh" generated_files=(generated-smoke.vdb generated-level-set.vdb generated-large-bounds-sparse.vdb) existing_generated=0 for file in "${generated_files[@]}"; do [[ -f "$resource_root/generated/$file" ]] && existing_generated=$((existing_generated + 1)) done if [[ $existing_generated -eq 0 ]]; then "$build_dir/vdb_fixture_generator" "$resource_root/generated" elif [[ $existing_generated -ne ${#generated_files[@]} ]]; then printf 'generated VDB resource set is incomplete; refusing to overwrite existing source hashes\n' >&2 exit 1 fi download_verified() { local url=$1 output=$2 expected=$3 if [[ -f "$output" ]]; then [[ $(sha256sum "$output" | cut -d' ' -f1) == "$expected" ]] || { printf 'existing resource hash mismatch: %s\n' "$output" >&2; return 1; } return fi curl -L --fail --retry 5 --retry-delay 2 --connect-timeout 20 --max-time 600 --continue-at - -o "$output.part" "$url" [[ $(sha256sum "$output.part" | cut -d' ' -f1) == "$expected" ]] || { printf 'downloaded resource hash mismatch: %s\n' "$output.part" >&2; return 1; } mv "$output.part" "$output" } download_verified \ https://media.githubusercontent.com/media/AcademySoftwareFoundation/openvdb-website/master/download/models/sphere.vdb \ "$resource_root/official/sphere.vdb" "$sphere_sha" download_verified \ https://raw.githubusercontent.com/AcademySoftwareFoundation/openvdb-website/master/LICENSE.txt \ "$resource_root/licenses/CC-BY-4.0.txt" "$license_sha" convert() { local source=$1 bundle=$2 report=$3 quantization=$4 shift 4 "$build_dir/vdb_to_nanovdb" --input "$source" --output "$bundle" --report "$report" --quantization "$quantization" "$@" } convert "$resource_root/generated/generated-smoke.vdb" "$resource_root/nanovdb/generated-smoke.nvdb" "$resource_root/reports/generated-smoke-conversion.json" LOSSLESS \ --grid density --grid temperature --grid color --grid velocity convert "$resource_root/generated/generated-level-set.vdb" "$resource_root/nanovdb/generated-level-set.nvdb" "$resource_root/reports/generated-level-set-conversion.json" LOSSLESS --grid surface convert "$resource_root/generated/generated-large-bounds-sparse.vdb" "$resource_root/nanovdb/generated-large-bounds-sparse.nvdb" "$resource_root/reports/generated-large-bounds-sparse-conversion.json" FP16 --grid density convert "$resource_root/official/sphere.vdb" "$resource_root/nanovdb/official-sphere.nvdb" "$resource_root/reports/official-sphere-conversion.json" LOSSLESS node "$repo_root/tools/vdb/build-nanovdb-manifest.mjs" \ --source "$resource_root/generated/generated-smoke.vdb" \ --bundle "$resource_root/nanovdb/generated-smoke.nvdb" \ --report "$resource_root/reports/generated-smoke-conversion.json" \ --output "$resource_root/manifests/generated-smoke.nanovdb.json" \ --converter "$build_dir/vdb_to_nanovdb" \ --project-id vdb-fixtures \ --source-path //volumes/generated-smoke.vdb \ --bundle-path //volumes/generated-smoke.nvdb VDB_RESOURCE_ROOT="$resource_root" node "$repo_root/tools/vdb/catalog-resources.mjs" VDB_RESOURCE_ROOT="$resource_root" node "$repo_root/tools/vdb/snapshot-evidence.mjs" VDB_RESOURCE_ROOT="$resource_root" npm --prefix "$repo_root/web" run test:vdb-native printf 'vdb-resources-ready root=%s\n' "$resource_root"