Files
workinf_Blender_Wasm/tools/vdb/provision-resources.sh
2026-08-14 18:08:29 -04:00

67 lines
3.7 KiB
Bash
Executable File

#!/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"