Подробный гайд по созданию симуляции ткани и масочного материала для этой ткани.
Для начала запустим существующий проект, куда хотели-бы добавить ткань, или создадим новый.
Откроем раздел моделирование (горячие клавиши SHIFT+5)
Создадим «Rectangle» (данный раздел отвечает за создание прямоугольников с сеткой.
В созданном ресурсе выставим значения ширины и длины будущего полотна ткани. После нажмём "Принять".
Далее зайдём в раздел "Модель" и нажмём на "Subdivide". В значении сетки увеличим до 6.
В параметре "Boudary Sheme" выставим значение "Sharp Corners" (Данное значение означает, что наши края буду острыми, а не скруглёнными, как было до)
После изменений нажимаем "Принять"
В режиме "Каркас" (горячие клавиши ALT+2) мы можем проверить количество треугольников. (Чем больше треугольников, тем выше детализация, тем больше нагрузки на симуляцию)
Теперь перейдём в библиотеку "FAB", и найдём материал ткани.
Для этого в поисковой строке введём "Tarp", со значениями фильтра "Материалы и текстуры", со свободной лицензией для личного использования.
Откроем подходящий материал и добавим его в наш проект, нажав "Add to Project"
В скаченной с библиотеке "FAB" папке создадим новый материал, он будет базовым для дальнейших манипуляций.
Откроем его. В разделе сведения, выставим галочку в значении "Two Sided".
Two Sided— это настройка, которая позволяет сделать материал двухсторонним. Это означает, что текстура будет отображаться на обеих сторонах объекта.
Также в разделе "Bland Mode" выставим значение "Masked"
Откроем панель ресурсов, и из папки материала и добавим текстуры
Подключим текстуры согласно схеме. В большинстве случаев базовые узлы одинаковы в логике подключения.
Теперь создадим ноду "Texture Coordinate" - она будет определять координаты нашей текстуры.
Далее создадим ноду "Multyplay" — это компонент графа материалов, который позволяет умножать значения, передаваемые через соединения.
Далее нода "Param" (Горячие клавиши S+ЛКМ) — это узел, который позволяет задавать параметры материала. Выставим параметр в 1 единицу.
Дадим название данной ноде "Tiling" (Горячая клавиша F2)
Подключим "Multyplay" к каждой текстуре "UVs"-каналу.
Через ЛКМ выделим 3 ноды и скопируем их.
Вставим чуть ниже данные ноды.
В панели ресурсов откроем содержимое проекта и выставим фильтр на значение "Текстура"
В поиске найдем текстуру будущей маски. (Текстура шума)
Через ЛКМ добавим в наш Event Graph.
Повторим подключение "Multyplay" к текстуре через "UVs"-канал.
Добавим дополнительные ноды "Multyplay" и "Param". Где "Param" подключим к каналу "B" ноды "Multyplay", а в канал "A" подключим "RGB" текстуры маски. Тем самым мы создадим настраиваемую маску ткани.
Теперь нашу настраиваемую маску подключим к параметру "Маска прозрачности".
Через ЛКМ (или Ctrl+ЛКМ) выделим все 4 текстуры и преобразуем их в параметры. Для этого нажмем ПКМ, раздел "Преобразовать в параметр".
Дадим каждой текстуре имя. И после, не забываем все сохранить.
1 текстура - "BaseColor"
2 текстура - "Normal"
3 текстура - "ARD"
4 текстура - "Mask"
Теперь в папке, где располагается наш полученный материал создадим его экземпляр. Через ПКМ "Создать экземпляр материала".
Применим данный экземпляр к нашему объекту. Добавим его в материал объекта.
Откроем наш экземпляр через двойное нажатие ЛКМ.
Активируем параметры "Param" и "Tiling" прожав галочки в соответствующих пунктах.
Изменим данные параметры по своему усмотрению.
Выделим наш объект и через ПКМ нажмём "Перейти к ресурсу" (Либо нажмем горячие клавиши Ctrl+B).
В панели найдем искомый ресурс и экспортируем его. Нажмем по нему ПКМ, раздел "Действия с ресурсом", выпадающее меню "Экспорт".
В открывшимся окне выберем папку для сохранения объекта, дадим ему название (по желанию).
В следующем открывшимся окне настройки экспорта обязательно выставим в Fbx Export Compatibility значение FBX 2020. Остальное по умолчанию.
Далее создадим новую папку, дадим ей название и откроем ее.
В этой папке, через ПКМ импортируем нашу заготовку.
В открывшимся окне выберем наш файл, который ранее был экспортирован, и нажмем открыть.
В окне "Параметры импорта FBX" найдем параметр "Сетка", "Skeletal Mesh" и поставим галочку.
Далее нажмем "Импорт всего".
После успешного импорта журнал не должен показать критических ошибок. Это означает, что предшествующие шаги были выполнены верно. Следовательно журнал можно очистить и закрыть.
Теперь найдем файл формата "Скелетная сетка" и добавим его на сцену.
Откроем данный файл через двойной ЛКМ.
Откроется окно редактирования данного файла. Развернем его для удобства на весь экран.
Далее ПКМ на нашей скелетной сетке и выберем раздел "Создать данные об одежде из секции" и нажмем "Создать".
В верхней части меню нажмем на раздел "Активировать заливку одежды".
Далее, в открывшимся окне "Одежда" выберем наши данные "Rectangle"
Найдем параметр "Tool Settings", "Рисовать значение" выставим на 1000, а "Радиус" по своему желанию.
Обратим внимание, что кисть показывает силу и радиус влияния на материал.
Переходим к покраске скелетной сетки. Помним, что розовый цвет оставит скелетную сетку без изменений.
После манипуляций с кистью отключим режим заливки одежды.
Теперь найдем наш созданный экземпляр материала и применим его к скелетной сетке.
Далее снова выберем наш ресурс и через ПКМ откроем дополнительное меню.
Применим данные об одежде созданной в предыдущих этапах.
Если все верно выполнено, то произойдет примерно так.
Запустим симуляцию уровня.
Полотно ткани работает. Но не хватает динамики. Добавим в наш уровень систему ветра.
Для начала развернем наш объект в плоскости. Используем горячие клавиши "W", "Z", "E".
В данном виде будет подобие флага
Теперь в верхней части меню нажмем на добавление на сцену акторов и в поисковой строке найдем "Wind Directional Source". Добавим его в наш уровень.
Данный актор (инструмент) сориентируем в плоскости по желанию.
Запустим симуляцию уровня и проверим.
Теперь откроем параметра нашего ветра (Wind Directional Source Component) и выставим значение скорости ветра (Speed) около 10. Что означает примерно 10 метров в секунду.
Нажмем на симуляцию уровня и получим конечный результат. (https://dzen.ru/video/watch/6841e25643f4657534623cbf)