Unreal: Просто шейдер для Interactive foliage
Сперва проверим включен ли Generate Mesh Distance FieldsИдем в Project Settings , И пишем Distance Fields в поисковике
Открываем шейдер растения
DistanceToNearestSurface и Radius: Система измеряет расстояние от каждой точки на поверхности объекта до ближайшей поверхности другого объекта в сцене .
Из расстояния вычитается радиус действия эффекта. Если расстояние < радиуса, значение становится отрицательным → значит вершина в зоне действия.
Subtract, 1-x, Saturate: Результат вычитания из радиуса (Radius - Distance) инвертируется (1-x) и ограничивается нодой (Saturate). Saturate ограничивает значение в диапазоне от 0 до 1. В итоге получается плавная маска:
- 1: если поверхность находится вплотную к другому объекту.
- 0: если поверхность находится дальше, чем заданный Radius.
- Плавный переход между 0 и 1 внутри зоны радиуса.
2 Расчет направления и силы "вдавливания"
- DistanceFieldGradient: Этот нод определяет направление к ближайшей поверхности. Это вектор, который указывает, "откуда" должно идти воздействие.
- Multiply: Направление (DistanceFieldGradient) умножается на маску близости (результат из первого шага). Это делает смещение сильным у самого объекта и плавно затухающим к краю радиуса.
- Strength: Полученный вектор умножается на параметр Strength (Сила), который контролирует общую интенсивность эффекта "вдавливания".
3. Применение эффекта к поверхности
- VertexNormalWS: Этот нод представляет исходное направление нормалей вершин объекта (то есть, куда "смотрит" нормаль вершины).
- Add: Add — складывает нормаль и смещение. То есть вершины двигаются вдоль своих нормалей с учётом дистанции.
- Clamp (Ограничитель): Эта нодаограничивает итоговое значение, чтобы избежать слишком сильных или некорректных деформаций, которые могут вызвать визуальные артефакты.
4 Дальше создаем Reroute Declaration node
Вызываем ее в нужном на месте
Вызываем ее в нужном на месте
И присоединяем ее ко входу World PositionOffset
Если пин уже занят другими нодами , вызываем ноду Add складываем другие ноды с нашим Interactive
И все
Идем в наш Character blueprints и делаем для него вот такую цилиндр
Создаем для него материал
Переводим BlendMode d Masked , создаем с помощью клавиши 1 на клавиатуре параметр и ставим в нем 0 и подключаем его в OpacityMask и назначаем материал на цилиндр
Мой телеграмм канал в котором я рассказываю про анимацию, unreal и разработку инди проекта