Должны ли системы частиц полностью обновляться в геометрическом шейдере - PullRequest
4 голосов
/ 06 марта 2012

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

Ответы [ 2 ]

4 голосов
/ 06 марта 2012

В шейдерах возможно практически все (особенно если вы собираетесь использовать SM4 +).Я не рекомендую переходить на SM3, если вы хотите проникнуть на рынок.Я все еще сожалею, что мы не предоставили запасной вариант SM2 для нашей последней игры, потому что довольно много людей все еще используют старые дрянные карты SM2.

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

Вместо этого мы делаем все, что требует изменения состояния частицы на стороне процессора.Затем у нас есть жесткое представление памяти этих данных, которое обновляется до GPU.Вершинный шейдер довольно мясистый (но это совершенно нормально, делайте как можно больше в вершинном шейдере!), Он извлекает это сжатое представление частицы, преобразует его и передает несжатые данные в пиксельный шейдер.Важным наблюдением здесь является то, что вы можете и должны разбивать данные по вершинам и частицам.Это подразумевает использование инстансинга (это просто способ сказать: используйте делители частоты).Мы представляем вращение частицы с нормалью + вращение относительно этой нормали.

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

РЕДАКТИРОВАТЬ: И если у вас есть что-то похожее на Particle :: Update, которое не может быть встроено в вас 'мы потерпели неудачу, минимизируем вызовы функций для каждой частицы, особенно виртуальные, и сохраняем представление памяти частицы плотно упакованным!

1 голос
/ 06 марта 2012

Это зависит от того, какая у вас система частиц. В большинстве случаев у вас есть программное представление на C ++ и аппаратное представление для вашего шейдера. Геометрические данные для шейдера вычисляются из программного представления и должны быть как можно меньше. Потому что в большинстве случаев ограничивающим ресурсом является не вычислительная мощность, а скорость передачи видеокарты.

Если вы можете еще больше уменьшить объемы передачи с помощью вашего метода, вы все равно можете сохранить представление программного обеспечения в памяти для дальнейшего использования. Даже если это предполагает вычисление данных дважды, это может быть быстрее, чем процесс передачи.

...