Репозиторий дипломной работы по теме:
«Реализация и оптимизация алгоритма параллельного построения BVH на GPU для рендеринга в реальном времени»
- Тестирующая система
- Реализация LBVH
Статья: Maximizing Parallelism in the Construction of BVHs, Octrees, and k-d Trees, 2012 - Реализация H-PLOC
Статья: H-PLOC: Hierarchical Parallel Locally-Ordered Clustering for Bounding Volume Hierarchy Construction, 2024 - Реализация Binary BVH to Wide BVH Conversion для H-PLOC
- Сравнение производительности
Все недостающие модели можно скачать отсюда
- Gnome - простая модель гнома: 1 297 вершин, 764 треугольника. Уже добавлена в репозиторий.
- Sponza - модель атриума дворца Sponza в версии Crytek: 184 330 вершин, 262 267 треугольников.
- Chinese Dragon - модель китайского дракона из Stanford Scan: 438 929 вершин, 871 306 треугольников.
- Happy Buddha - модель смеющегося Будды из Stanford Scan: 549 333 вершины, 1 087 474 треугольника.
- Hairball - модель массы тонких волосков от NVIDIA Research: 1 441 098 вершин, 2 880 000 треугольников.
- Rungholt - средневековая деревня, экспортированная из Minecraft: 12 308 528 вершин, 6 704 264 треугольника.
- San Miguel - детальная модель местности в Сан-Мигель-де-Альенде, Мексика: 5 933 233 вершин, 9 980 699 треугольников.
- Powerplant - полная модель угольной электростанции: 10 614 919 вершин, 12 759 246 треугольников.
Сборка через CMake:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target run_experiments -jПри необходимости тесты топологии H-PLOC можно собрать так:
cmake --build build --target hploc_topology_tests -jЗапускать run_experiments нужно из корня репозитория, чтобы относительные пути к data/ и results/ работали корректно.
Формат запуска:
./build/run_experiments \
--bench_iters <N> \
--experiments <список_экспериментов> \
--scenes <список_сцен> \
[--disable_warmup] \
[--device <id>]run_experiments использует adaptive warmup на CUDA events: перед замером каждый этап прогревается минимум 5 секунд, после чего раннер проверяет стабилизацию медианы. Если за 60 секунд стабилизации нет, печатается предупреждение. Для отключения прогрева есть флаг --disable_warmup.
Поддерживаемые эксперименты:
lbvhhplochploc_bvh4hploc_bvh8
Пример запуска:
./build/run_experiments \
--bench_iters 10 \
--experiments hploc,hploc_bvh4,lbvh \
--scenes data/gnome/gnome.ply,data/powerplant/powerplant.objПример запуска одного эксперимента на одной сцене:
./build/run_experiments \
--bench_iters 5 \
--disable_warmup \
--experiments hploc_bvh4 \
--scenes data/hairball/hairball.obj \
--device 0