Vulkan: странное поведение при создании структуры ускорения нижнего уровня - PullRequest
0 голосов
/ 28 июня 2019

В настоящее время я работаю над небольшим проектом с целью визуализации линий тока путем трассировки лучей по кусочкам кривых Безье. На данный момент это делается путем трассировки в соответствующие AABB и использования специального шейдера пересечения для расчета rayhit. Когда дело доходит до создания ускорения нижнего уровня, я обнаружил, что существует огромная разница в производительности между созданием VkGeometryNV для каждого ограничивающего блока и использованием одного VkGeometryNV, установкой aabbData в начало буфера и включением всех AABBS в эту геометрию. , При рендеринге примерно 10 000 кбит / с это приводит к разнице в производительности, равной 500 мс: 0,7 мс (2080Ti) соответственно, что, по меньшей мере, является довольно значительным. Я довольно новичок в трассировке лучей в vulkan, и это кажется мне довольно не интуитивно понятным, поскольку у меня теперь только один верхний уровень и один узел нижнего уровня. Неожиданное предположение состоит в том, что, поскольку для единственного VkGeometryNV все AABB находятся в линейном буфере, он когерентно пересекает все AABB, где, как это было бы при перемещении в этом буфере с несколькими VkGeometryNV (имейте в виду, что он использует один и тот же буфер только с разными смещениями). Однако я, вероятно, не совсем понимаю, как строятся и пересекаются структуры ускорений. Было бы здорово, если бы кто-то смог пролить свет на это, казалось бы, странное поведение.

Заранее спасибо!

...