генериране на върхове с помощта на геометричен шейдър (GLSL)

наскоро се опитвам да внедря алгоритъм за генериране на лоза в реално време. Донякъде знам как да го направя на процесора, но искам да използвам GPU, за да постигна това. Мислех за геометричен шейдър, но изглежда, че геометричният шейдър се изпълнява в примитивен мащаб, което означава, че ще изпълнява точно същата функционалност на всеки примитивен елемент, което не е това, което очаквам.

Ето концептуално как работи моят алгоритъм за отглеждане на лози. изберете произволна точка от мрежата на обекта като основна точка, алгоритъмът за отглеждане на лозата генерира серия от точки (представляващи лозата) според предишните произведени точки. Позициите на точките се влияят от такива фактори като гравитация, адхезия и разстояние до стените на триъгълника. Всяка точка трябва да е от една и съща страна като нормалата на лице на триъгълник.

Как мога да направя това на GPU? Благодаря много.


person Nowibananatzki    schedule 21.06.2013    source източник
comment
Донякъде знам как да го направя на процесора. Честно казано, не мисля, че това е достатъчно добро. Първо трябва да уточните алгоритъма. Ако използвате glm за типове данни като точки, ще бъде много лесно да го конвертирате в GLSL. Теоретично. Въпреки това, изчисляването на разстоянието от точка до цяла мрежа вероятно няма да се случи в шейдър. На каква геометрия искате да расте лозата? Стена, стълб, дърво? Сложността на тази геометрия ще повлияе кои части от алгоритъма можете да поставите в шейдъри.   -  person Andreas Haferburg    schedule 23.06.2013
comment
всяка нормална мрежа, след известно проучване мисля, че графичният процесор не е подходящ за моя случай. Благодаря ти.   -  person Nowibananatzki    schedule 24.06.2013


Отговори (1)


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

Обърнете внимание, че това е добра идея само ако вашият алгоритъм за генериране на лоза се съпоставя добре с масивната паралелна природа на GPU. Ако алгоритъмът ви е присъщо сериен, тогава използването на процесора за генериране на геометрията вероятно ще доведе до по-добри резултати.

person MikeMx7f    schedule 21.06.2013
comment
Благодаря ви, сега знам, че графичният процесор работи паралелно, което не е подходящо за моя случай. - person Nowibananatzki; 24.06.2013
comment
@Norwizki Мисля, че част от това, което искате да направите, всъщност е много подходящо за GPU. Ако имате линеен сегмент, представляващ стъблото, можете да използвате геометричен шейдър, за да генерирате геометрията на стъблото и листата. Вероятно само генерирането на стеблото трябва да се случи на процесора. - person Andreas Haferburg; 24.06.2013
comment
@AndreasHaferburg, но искам да симулирам нарастващата анимация на лозата, в който случай трябва да генерирам стъбло едно по едно. как трябва да контролирам геометричния шейдър, за да направя това? - person Nowibananatzki; 26.06.2013
comment
@Norwizki Той казва, че можете да генерирате целия скелет на стеблото, което би било просто куп линейни сегменти на процесора, използвайки серийния алгоритъм, след което да изпратите тези линейни сегменти на графичния процесор и да ги раздуете в по-сложна геометрия в геометрията шейдър. - person MikeMx7f; 26.06.2013