Эффект дыма от Мэтта Старка
Попытаюсь объяснить, как я недавно сделал эффект дыма. С ним объект окружен аурой волнистых клубов. Вот, как это выглядит в действии:
Состоит эффект из частично прозрачной текстуры на билборде (кваде, который всегда поворачивается лицом к камере). Центр квада примерно совпадает с центром дракона, и квад достаточно большой, чтобы вместить дым.
Сначала я отрисовываю копию вида камеры, содержащую только силуэт дракона. Моя камера имеет черный фон и отображает только один слой сцены. В качестве альтернативы вы можете использовать буфер трафарета, но в Unity к нему сложно получить доступ после рендеринга сцены.
Затем я нахожу экранные координаты углов билборда, чтобы можно было сэмплировать соответствующую область текстуры.
Я блендирую эту область текстуры силуэта с существующей текстурой билборда. Это имитирует дым, который исходит из источника с постоянной скоростью и постепенно исчезает. Затем я искажаю текстуру билборда, используя векторы скорости, основанные на карте потока. Это текстура, где красные и зеленые значения цвета представляют x и y компоненты скорости. Я также добавляю постоянную скорость вверх. Такое искажение текстуры имитирует завихрения от восходящих вверх потоков воздуха.
Наконец, я использую текстуру в материале, нанесенном на билборд. Шейдер материала преобразует черный и белый в прозрачный и черный. Материал исчезает там, где находится близко к поверхности позади себя, поэтому вы не увидите отсечение сквозь дракона. Он также исчезает вблизи краев билборда, чтобы не обнаружить тот резкими переходами.
Вот и все! Я очень доволен тем, как выглядит этот эффект дыма и как мало он влияет на производительность. Можно создать более простую версию для чего-то вроде пылающего факела, где просто из текстуры читается силуэт, но в этом случае проще использовать флипбук текстуру.
Оригинал статьи: https://matt.stark.scot/2019/10/11/smoky-aura-effect.html