Эффект дыма от Мэтта Старка
![Эффект дыма от Мэтта Старка](https://coremission.net/wp-content/uploads/2020/02/sheider-zloveschaya-aura.jpg)
Попытаюсь объяснить, как я недавно сделал эффект дыма. С ним объект окружен аурой волнистых клубов. Вот, как это выглядит в действии:
Состоит эффект из частично прозрачной текстуры на билборде (кваде, который всегда поворачивается лицом к камере). Центр квада примерно совпадает с центром дракона, и квад достаточно большой, чтобы вместить дым.
![квад, внутри которого уместится эффект дыма](https://coremission.net/wp-content/uploads/2020/02/effect-dyma-1.png)
Сначала я отрисовываю копию вида камеры, содержащую только силуэт дракона. Моя камера имеет черный фон и отображает только один слой сцены. В качестве альтернативы вы можете использовать буфер трафарета, но в Unity к нему сложно получить доступ после рендеринга сцены.
![маска](https://coremission.net/wp-content/uploads/2020/02/effect-dyma-2-1024x484.png)
Затем я нахожу экранные координаты углов билборда, чтобы можно было сэмплировать соответствующую область текстуры.
![вырезанная маска](https://coremission.net/wp-content/uploads/2020/02/effect-dyma-3-1024x484.png)
Я блендирую эту область текстуры силуэта с существующей текстурой билборда. Это имитирует дым, который исходит из источника с постоянной скоростью и постепенно исчезает. Затем я искажаю текстуру билборда, используя векторы скорости, основанные на карте потока. Это текстура, где красные и зеленые значения цвета представляют x и y компоненты скорости. Я также добавляю постоянную скорость вверх. Такое искажение текстуры имитирует завихрения от восходящих вверх потоков воздуха.
![потоки, пока в инвертированном цвете](https://coremission.net/wp-content/uploads/2020/02/effect-dyma-4.png)
![текстура](https://coremission.net/wp-content/uploads/2020/02/effect-dyma-5.png)
Наконец, я использую текстуру в материале, нанесенном на билборд. Шейдер материала преобразует черный и белый в прозрачный и черный. Материал исчезает там, где находится близко к поверхности позади себя, поэтому вы не увидите отсечение сквозь дракона. Он также исчезает вблизи краев билборда, чтобы не обнаружить тот резкими переходами.
Вот и все! Я очень доволен тем, как выглядит этот эффект дыма и как мало он влияет на производительность. Можно создать более простую версию для чего-то вроде пылающего факела, где просто из текстуры читается силуэт, но в этом случае проще использовать флипбук текстуру.
Оригинал статьи: https://matt.stark.scot/2019/10/11/smoky-aura-effect.html