После работы над системой рендеринга травы мне захотелось попробовать что-то еще с вычислительными шейдерами, поэтому я решил попробовать сделать крутую систему частиц. Я хотел создать систему, которая могла бы обрабатывать более 1 миллиона частиц, а также иметь объем (или, по крайней мере, создавать иллюзию). Я также хотел создать меш-эмиттер, чтобы можно было поджечь что-нибудь.

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

На изображении выше вы увидите меш сферы, используемый в качестве эмиттера, но на самом деле вы можете передать любой меш, который хотите:

С этой системой еще предстоит проделать работу, так как при увеличении масштаба огня требуется слишком много производительности. Вы также не можете вращать эмиттер в данный момент. Я постараюсь исправить это, когда у меня будет время. Базовая установка для движения вихревого шума основана на сущности Юмы Янагисавы (см. Источники ниже).

Исходный код

Источники

Частицы шума скручивания от Yuma Yanagisawa

https://gist.github.com/ya7gisa0/742bf24d5edf1e73b971e14a2553ad4e