генерировать вершины с помощью шейдера геометрии (GLSL)

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

Вот концептуально, как работает мой алгоритм выращивания виноградной лозы. выберите любую точку на сетке объекта в качестве корневой точки, алгоритм выращивания виноградной лозы генерирует серию точек (представляющих виноградную лозу) в соответствии с предыдущими полученными точками. На положение точек влияют такие факторы, как гравитация, прилипание и расстояние до граней треугольника. Каждая точка должна быть на той же стороне, что и нормаль треугольной грани.

Как я могу сделать это на GPU? Большое спасибо.


person Nowibananatzki    schedule 21.06.2013    source источник
comment
Я вроде как знаю, как это сделать на процессоре. Честно говоря, я не думаю, что это достаточно хорошо. Сначала следует конкретизировать алгоритм. Если вы используете glm для таких типов данных, как точки, будет очень легко преобразовать его в GLSL. Теоретически. Однако вычисление расстояния от точки до всей сетки, вероятно, не произойдет в шейдере. Какой геометрической формы вы хотите, чтобы лоза росла? Стена, столб, дерево? Сложность этой геометрии повлияет на то, какие части алгоритма вы можете поместить в шейдеры.   -  person Andreas Haferburg    schedule 23.06.2013
comment
любая нормальная сетка, после некоторых исследований я думаю, что GPU не подходит для моего случая. благодарю вас.   -  person Nowibananatzki    schedule 24.06.2013


Ответы (1)


Если вы хотите сделать что-то подобное, это не очень хорошо подходит для обычного конвейера рендеринга, в glsl; лучше всего использовать вычислительные шейдеры (если вам не нужно реализовывать это в glsl, вы также можете рассмотреть OpenCL или CUDA в качестве возможных альтернатив, хотя обратите внимание, что CUDA привязана к поставщику для графических процессоров NVIDIA) в этом случае вы можете использовать его для создания геометрии лозы любым запланированным методом; затем визуализируйте лозы как обычно во втором проходе.

Обратите внимание, что это хорошая идея только в том случае, если ваш алгоритм генерации лозы хорошо соответствует массивно-параллельной природе графического процессора. Если ваш алгоритм по своей сути является последовательным, то использование ЦП для генерации геометрии, скорее всего, даст лучшие результаты.

person MikeMx7f    schedule 21.06.2013
comment
Спасибо, теперь я знаю, что GPU работает параллельно, что не подходит для моего случая. - person Nowibananatzki; 24.06.2013
comment
@Norwizki Я думаю, что часть того, что вы хотите сделать, на самом деле хорошо подходит для графического процессора. Если у вас есть линейный сегмент, представляющий стебель, вы можете использовать геометрический шейдер для создания геометрии стебля и листьев. Только генерация самого стебля, вероятно, должна происходить на ЦП. - person Andreas Haferburg; 24.06.2013
comment
@AndreasHaferburg, но я хочу смоделировать анимацию роста виноградной лозы, и в этом случае мне нужно генерировать стебель один за другим. как я должен управлять геометрическим шейдером, чтобы сделать это? - person Nowibananatzki; 26.06.2013
comment
@Norwizki Он говорит, что вы можете сгенерировать весь скелет стебля, который будет просто набором сегментов линии на ЦП с использованием последовательного алгоритма, затем отправить эти сегменты линии на графический процессор и разбить их на более сложную геометрию в геометрии. шейдер. - person MikeMx7f; 26.06.2013