Перейти к основному содержимому

Пространственные структуры и ускорение

Программистам CG

Наивный тест «луч против каждого треугольника» или «каждый объект против каждого» быстро становится узким местом. Пространственные структуры группируют геометрию так, чтобы отбрасывать целые регионы одной проверкой.

Связь

Отсечение по окну в 2D — 15.md. Z-buffer и порядок отрисовки — 17.md. RTX/BVH в играх — 13.md.


Пространственные структуры и ускорение

Ограничивающие объёмы

AABB (Axis-Aligned Bounding Box) — прямоугольный параллелепипед с гранями параллельно осям. Пересечение луч–AABB сводится к отсечению параметра t по трём парам плоскостей (slab method).

OBB (Oriented Bounding Box) — тот же box, но повёрнут вместе с объектом; точнее облегает модель, проверка дороже.

Сфера — дешёвый тест расстояния; часто bounding sphere вокруг меша.

k-DOP — выпуклая оболочка несколькими парами параллельных плоскостей; компромисс между AABB и OBB.

Сначала проверяют дешёвый bound; только при попадании спускаются к геометрии.


Иерархии и деревья

СтруктураИдеяТипичное применение
BVHДерево вложенных AABB/OBBRay tracing, DXR/Vulkan RT, коллизии
OctreeРекурсивное деление куба на 8 частейОбъёмные данные, voxel, loose octree в играх
kD-treeРазбиение плоскостями по осямТочки, photon maps, offline RT
BSPДвоичное разбиение пространства плоскостямиIndoor-уровни, порядок отрисовки
R-treeГруппировка перекрывающихся AABBGIS, индексы объектов на карте
Uniform gridРавномерная сетка ячеекЧастицы, простые 2D/3D сцены

Иерархия ограничивающих тел — несколько уровней bounds (группа → объект → часть меша), что совпадает с иерархией сцены в движке.


Луч–треугольник и луч–OBB (кратко)

Пересечение луча O + t·d с треугольником решают через барицентрические координаты или плоскость треугольника + проверку u,v ≥ 0, u+v ≤ 1. Для OBB переходят в локальную систему box и применяют slab test.

В трассировке после попадания в лист BVH вызывают точный тест; без дерева миллионы треугольников неподъёмны даже на GPU.


Когда что выбирать

  • Динамика редкая, много статики — BVH перестраивают или refit.
  • Комнаты и коридоры — BSP + порталы.
  • Открытый мир, равномерное распределение — grid или loose octree.
  • Геоданные — R-tree в PostGIS и аналогах.

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").