В шейдерах возможно практически все (особенно если вы собираетесь использовать SM4 +).Я не рекомендую переходить на SM3, если вы хотите проникнуть на рынок.Я все еще сожалею, что мы не предоставили запасной вариант SM2 для нашей последней игры, потому что довольно много людей все еще используют старые дрянные карты SM2.
Подробнее об этом вопросе.Вы можете использовать RTT и никогда не возвращаться обратно в основную память (это чертовски медленно, минимизировать перенос из графической памяти в основную память), но недостатком является то, что вам нужно использовать довольно сложные приемы для вычисления AABB(что вам нужно на стороне процессора), если вы используете чистый GPU.
Вместо этого мы делаем все, что требует изменения состояния частицы на стороне процессора.Затем у нас есть жесткое представление памяти этих данных, которое обновляется до GPU.Вершинный шейдер довольно мясистый (но это совершенно нормально, делайте как можно больше в вершинном шейдере!), Он извлекает это сжатое представление частицы, преобразует его и передает несжатые данные в пиксельный шейдер.Важным наблюдением здесь является то, что вы можете и должны разбивать данные по вершинам и частицам.Это подразумевает использование инстансинга (это просто способ сказать: используйте делители частоты).Мы представляем вращение частицы с нормалью + вращение относительно этой нормали.
Еще одна причина для изменения состояния стороны ЦП частицы состоит в том, что чертовски намного проще составлять поведение стороны ЦП.Любая, по крайней мере, половина приличной системы частиц нуждается в небольшом количестве ручек для поворота, чтобы иметь возможность создавать интересные эффекты частиц.
РЕДАКТИРОВАТЬ: И если у вас есть что-то похожее на Particle :: Update, которое не может быть встроено в вас 'мы потерпели неудачу, минимизируем вызовы функций для каждой частицы, особенно виртуальные, и сохраняем представление памяти частицы плотно упакованным!