2013-11-06 5 views
0

У меня есть ситуация, когда у меня есть много (по меньшей мере, тысячи) трехмерных фигур, которые четко определяются небольшим набором значений: масса, центральное положение, угловое положение, скорость, угловая скорость, сила и крутящий момент. Например, предположим, что это эллипсоиды, форма которых зависит от некоторых из этих значений. Например, надавите на сферу, и она «squishes». Спина достаточно быстро, и это дает ауру или что-то в этом роде.Создание динамической геометрии в графическом процессоре или процессоре?

Это что-то, что было бы подходящим, чтобы направить массив этих значений на GPU (если да, то каким будет лучший способ их нажимать?), И у вас есть шейдеры (тесселяция, геометрия, что?) Создают геометрию от них?

И я бы хотел, чтобы другие шейдеры (для таких эффектов, как HDR и т. Д.) Имели доступ к исходным значениям ... скажем, например, тип шейдеров «кометной дорожки», поэтому полосы в направлении напротив скорости.

Вопрос еще раз: подтолкнул бы исходные значения к графическому процессору и позволил бы сделать все, чтобы быть лучшим подходом, или было бы лучше принять какой-то другой подход?

+1

«У меня есть ситуация, когда у меня есть много (по меньшей мере, тысячи) трехмерных фигур, которые четко определяются небольшим набором значений: масса, центральное положение, угловое положение, скорость, угловая скорость, сила и крутящий момент». ... другими словами, частицы? :) Вы можете сделать *** stateful *** моделирования частиц на графических процессорах в наши дни, используя текстуры и фрагментарные шейдеры, или если вы действительно жирные, используя вычислительные шейдеры. И вы ** определенно ** хотите сделать это на GPU, вы можете делать симуляции более миллиона частиц в кадрах реального времени, если вы используете GPU вместо CPU. –

+0

Это зависит от того, что все включено в термин «частицы». Сложный эллипсоид с отдельным сердечником и оболочкой и, возможно, внутри ... это несколько сложная геометрия. Разве это по-прежнему соответствует вашему ответу на вопрос о частице? – mentics

+0

@taotree: для реального моделирования частиц это не имеет значения, так как вы можете сделать очень хорошее приближение, взяв их в качестве точечных масс; форма имеет значение только для столкновений и сопротивления воздуха. Эллипсоиды легко описываются для сопротивления воздуха с использованием так называемого * формфактора *. Чтобы нарисовать каждую «частицу», вы должны использовать instancing, т. Е. Каждый кортеж '(центральная точка, ориентация, форм-фактор)' вызовет визуализацию сложной формы, которая была определена ровно один раз, но используется тысячи раз тогда. – datenwolf

ответ

0

Как это часто бывает, ответ «это зависит».

С точки зрения производительности, выполнение этого на GPU, скорее всего, будет лучшим подходом. Как писал Andon и datenwolf, современный графический процессор может рассчитывать и обновлять состояние полностью на графическом процессоре (например, преобразовывать обратную связь и текстурные буферы), а также с точечными спрайтами, геометрическими шейдерами и тесселяционными шейдерами вы можете создавать сложные спрайты и формы целиком на графическом процессоре также. Тем не менее, «скорее всего», потому что золотое правило исполнения - всегда писать код и измерять, а не гадать.

Но это предполагает современный графический процессор и OpenGL 4. Что не будет доступно, если вы хотите, чтобы это выполнялось на планшете, мобильном телефоне или MacOS.

Кроме того, что это за проект? Вы единственный программист? Если нет, будут ли другие программисты (настоящие или будущие) изучать современные программы GPU?

Предполагая, что у вас есть OpenGL 4 и вы хотите использовать его, в 6-м выпуске OpenGL SuperBible есть несколько полезных разделов о том, как делать вычисления и рендеринг полностью на графическом процессоре.

Надеюсь, это поможет.

+0

Отличный ответ. Я должен был указать, что я предназначен только для настольных компьютеров, а не для мобильных устройств. – mentics

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