Рендеринг мета-поверхности поверхности частиц GPU

У меня есть вопрос об очень специфическом методе визуализации поверхностных частиц. Этот метод очень хорошо объяснен в 7-й главе видеокарты Nvidia Gems 3 «Точечная визуализация метаболов на графическом процессоре», ссылка на эту главу.

Статья о рендеринге неявной поверхности, используя точки или знаки, которые равномерно распределены по поверхности. Говорят, что вычисление этих частиц полностью выполняется на GPU. Только данные, которые определяют поверхность, отправляются из CPU в GPU, чтобы поддерживать как можно более низкий трафик.

Они также привели несколько примеров псевдокода программ шейдеров фрагментов для вычисления положения частиц, скорости и т. Д., И для меня, похоже, эти программы должны запускаться один раз для каждой частицы.

Теперь мой вопрос, как они хранят эти частицы? Что это за структура данных?
Это должен быть какой-то буфер или текстура, к которой можно получить доступ как для чтения, так и для операций записи на GPU. Но как мне снова визуализировать этот буфер / текстуру на следующем шаге рендеринга?

Моей первой идеей был какой-то объект vertex-buffer-object, который отправлялся в GPU один раз в начале и постоянно обновлялся там при каждом проходе рендеринга. Это возможно вообще?

Одним из требований для меня является то, что это должно быть реализовано с использованием OpenGL / GLSL, я надеюсь, что это возможно.

1

Решение

Да, вам нужны какие-то VBO и повторные проходы по одним и тем же данным. Структура данных может быть SoA (структура массивов) или AoS (массив структур) в зависимости от того, как вы предпочитаете кодировать доступ к различным свойствам массива, т.е.

SoA:

  • Позиции Массив
  • Speed ​​Array
  • Нормальный массив

AoS:

  • Всего один массив, содержащий [Position, Speed, Normal].

    AoS — это то же самое, что и чередующиеся массивы для рендеринга, где только в одном массиве вы сохраняете все свойства меша.

Вы можете использовать VBO или текстуру, единственное отличие состоит в способе кеширования, так как текстуры оптимизированы для 2D-доступа.

Рендеринг выполняется поэтапно, точно так же, как вы представляете его, поэтому все, что вам нужно сделать, это «визуализировать» физический шаг системы, используя шейдеры, которые вычисляют нужные вам свойства, а затем связывают те же структуры с истинным графическим рендерингом в следующий шаг.

0

Другие решения


По вопросам рекламы [email protected]