Меш манипуляции на GPU против CPU

9

Просто немного любопытно - где вы выполняете манипуляции с сеткой, на процессоре или в шейдере? Я делал все на процессоре, и мой друг предложил перенести все на сторону GPU.

Если вы делаете такие вещи, как анимация костей ... в графическом процессоре, как вы можете вернуть меш? (так как я делаю обнаружение столкновений ...)

AnonAnon
источник

Ответы:

13

Это обычно происходит на GPU, но есть и компромисс для обоих, и вам решать, какой из них будет работать лучше для вас.

Выполнение манипуляции на GPU означает, что вам нужно всего лишь отправить данные сетки один раз, а затем вы можете просто отправить матричные преобразования, чтобы деформировать их. Это здорово, потому что это значительно уменьшает полосу пропускания между CPU-> GPU. Это также означает, что вы можете загрузить только одну копию меша в графический процессор и применить преобразования для множества различных экземпляров меша. Тем не менее, сложнее иметь «точные сетки» столкновений. Поскольку преобразования выполняются на GPU, у вас нет их для тестирования на CPU.

Выполнение манипуляции с процессором означает, что у вас есть доступ к преобразованной сетке. Вы можете получить доступ ко всему, что вам нужно знать об этом. Однако это означает, что вам нужно загружать всю эту сетку в графический процессор каждый кадр. Это также означает, что вы должны загружать трансформированную сетку для каждого экземпляра этой сетки. В итоге, здесь нет исчерпывающего списка плюсов и минусов.

  • Плюсы для GPU

    • Загрузите данные сетки один раз
    • Преобразуйте это для нескольких экземпляров
    • Нужно только отправить матричные преобразования
    • GPU очень хорошо распараллеливает подобные вещи
  • Минусы для GPU

    • Преобразованные сетки недоступны для тестирования на процессоре
  • Плюсы для процессора

    • Преобразованные сетки доступны для испытаний на столкновение и всего остального, что необходимо.
  • Минусы для процессора

    • Нужно загрузить всю трансформированную сетку в каждый кадр
    • Необходимо загрузить всю сетку для каждого экземпляра сетки

Однако есть способы обойти минусы для GPU.

  • Не имейте точных столкновений сетки . Используйте что-то «достаточно близкое», например, ограничивающий прямоугольник для всей сетки или используйте ограничивающие прямоугольники для каждой кости сетки. Ниже приведено использование преобразований графического процессора для сетки и преобразований процессора для выравнивающих осей ограничивающих рамок, представляющих сетку. Вы можете получить еще более точные оценки, используя не AABB.

кости гоблинов

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

В целом, я полагаю, вы понимаете, почему на GPU более распространены преобразования

MichaelHouse
источник
1
Просто из любопытства, действительно ли целесообразно преобразовывать сетки на процессоре, принимая во внимание сложность сеток в современных играх, мощность и многоядерные возможности современного процессора и другие задачи, которые должен выполнять процессор? Кроме того, загрузка в GPU настолько медленная, что эта идея не сработает?
R4D4
Это будет зависеть от игры, но обычно это не практично для игр выше средней сложности. Когда есть такой простой выбор выполнения преобразований на GPU, трудно найти причину, чтобы оправдать дополнительные требования к ресурсам для выполнения преобразований на CPU. Проблема заключается в отправке преобразованной сетки в GPU каждый кадр, что быстро становится дорогим. Как это часто бывает с программным обеспечением, разработчик принимает решение между сложностью и производительностью.
MichaelHouse