2015-07-12 2 views
1

Я пытаюсь реализовать fluid dynamics с использованием вычислительных шейдеров. В статье есть серия проходов, выполненных по текстуре, так как это было написано перед вычислением шейдеров.Вычислить шейдер, буфер или текстуру

Быстрее ли выполнять каждый проход по текстуре или буфере? Последний проход должен быть применен к текстуре в любом случае.

ответ

2

Я бы рекомендовал использовать любую размерность ресурса, подходящую для моделирования. Если это 1D-симуляция, используйте RWBuffer, если это 2D-имитация, используйте RWTexture2D, и если это 3D-имитация, используйте RWTexture3D.

В алгоритме, который вы связываете, используются билинейная фильтрация. Если вы ограничиваете себя использованием буфера, вам придется выдавать 4 или 8 выборок памяти (в зависимости от 2D или 3D), а затем больше инструкций для расчета средневзвешенного значения. Воспользуйтесь возможностями оборудования, чтобы сделать это для вас, где это возможно.

Еще одна вещь, о которой следует помнить, заключается в том, что данные в текстурах не строятся последовательно (линейно), как вы могли бы ожидать, вместо этого они укладываются таким образом, что соседние тексели как можно ближе друг к другу в памяти ; это можно назвать Tiling или Swizzling в зависимости от документации, которую вы читаете. По этой причине, если ваша симуляция не является одномерной, вы можете значительно улучшить когерентность кеширования при чтении/записи из ресурса, макет которого наиболее точно соответствует размерам моделирования.

Смежные вопросы