Как очистить проект от неиспользуемых ассетов в Unreal Engine
Проблема захламления проекта кучей ассетов стоит почти у каждой команды, когда проект доходит до определенных стадий. В самом проекте остаются ассеты из прототипов, из покупных паков с маркетплейса, а так же просто лишний хлам, который, по тем или иным причинам, стал не нужен. Рано или поздно, проект начинает весить десятки гигабайт, в то время как рабочий и нужный конент остается не больше пары гигабайт.
В данной статье я хотел описать способы очистки проекта от неиспользуемых ассетов без сторонних плагинов, один из которых недавно обнаружил во время оптимизации нашего проекта. В конце я так же оставлю пару ссылок на сторонние плагины, что бы все было в одном месте.
Так же заранее предупреждаю, что я не рекомендую использовать автоматические инструменты для очистки, в том числе сторонние плагины, если в проекте не настроена система контроля версий. Иначе вы рискуете безвозвратно очистить нужные ассеты без возможности восстановления.
!!! Обратите внимание, что все способы используют систему референсов в Unreal Engine для определения того, что потенциально будет использовано в проекте, а что нет.
Если у вас есть ассеты, на которые ничто не ссылается в редакторе напрямую, но при этом они каким-то образом загружаются неявно (например из кода или по мягким ссылкам), то эти ассеты могут быть легко удалены одним из этих способом.
А если вы уверены в сохранности своего проекта и готовы положиться на инструментарий, предлагаю ознакомиться с содержимым статьи.
Способ 1 — Фильтр
Этот способ самый простой и довольно действенный, хоть и не идеальный. Его принцип предполагает то, что он просто показывает вам те ассеты, которые не используются в уровнях и сценах вашего проекта.
Однако этот способ не поможет удалить ассеты, которые используются в каких-либо ненужных сценах, которые, например, попали в ваш проект в результате импорта пака из магазина. Эти сцены придется удалить вручную перед очисткой проекта этим способом.
Для фильтрации нужно выбрать папку, которую вы хотите очистить от неиспользуемых ассетов, а затем просто включить фильтр Not Used In Any Level.
Выбор фильтра для неиспользуемых ассетов
В Content Browser останутся только те ассеты, которые не используются ни в одной сцене.
А что бы показать ассеты со всего проекта, можно выбрать самую главную папку — Content.
После того, как вам отобразятся все неиспользуемые ассеты, вам останется лишь выделить те, которые хотите удалить и нажать кнопку Delete.
Способ 2 — Аудит ассетов
В отличии от предыдущего способа, этот немного замороченее, однако он позволяет удалить ассеты используемые в картах, которые не будут запаковываться в финальный проект. Так же он поможет удалить и ненужные сцены.
Однако с этим способом стоит быть аккуратным, ведь в вашем проекте могут быть сцены, которые не пакуются в проект, однако необходимы для разработки проекта, например тестовые сцены или ещё не готовые локации.
Что бы найти неиспользуемые ассеты этим способом, в первую очередь стоит выбрать папку в Content Browser, из которой мы хотим найти удалить неиспользуемые ассеты. Затем в строке поиска вставить пробел, что бы отобразить все ассеты, в том числе и те, что находятся в подпапках.
Вы так же можете воспользоваться фильтрами, что бы фильтровать только определенные ассеты
Отобразить все ассеты в папке и подпапках
Для определения использования ассетов нам нужно открыть инструмент Audit Assets, что бы отсортировать используемые и неиспользуемые ассеты. Для этого нужно выбрать все ассеты, которые отобразились после предыдущего шага, нажать ПКМ и выбрать пункт Audit Assets.
Открытие аудита ассетов
У вас откроется панель, где списком представлены все ассеты, которые вы выбрали, а так же различная информация.
Эта панель так же полезна для определения, какие ассеты больше всего весят, или в каких модельках больше всего полигонов, например.
Самая важная колонка для целей этой статьи — Total Usage, которая указывает на вероятность использования ассета в запущенном проекте. Отсортировав ассеты по её значению мы сможем получить список всех ассетов, которые нигде не используются (имеют значение 0).
Что бы отсортировать значение, необходимо нажать на название самой колонки. При необходимости нажать ещё раз, что бы сортировать по возрастанию, а не убыванию.
Сортируем список по использованию ассетов
Отсортировав список по использованию, мы можем выбрать все ассеты, которые действительно не используются и нам не нужны.
Для быстрого выделения всех неиспользуемых, можно выбрать первый ассет, зажать Shift и выбрать последний неиспользуемый ассет.
На данном этапе стоит убедиться, действительно ли выбраны только те ассеты, которые не используются
Когда все нужные ассеты выбраны, нам нужно будет выбрать их в Content Browser'е. Это можно сделав, щелкнув по списку с выделением ПКМ и выбрав пункт Browse To Asset.
Выбор неиспользуемый ассетов
ПК может подвиснуть на некоторое время, но после этого, в Content Browser будут выделены только те ассеты, которые были выделены в списке аудита ассетов.
Далее достаточно будет нажать Delete, как движок начнет процесс удаления.
Он ещё раз покажет вам список ассетов, которые будут удалены, который вы можете дополнительно проверить. Если список вас устраивает, можно нажать красную кнопку Force Delete, которая удалит все ассеты из списка.
Способ 3 — Миграция
Этот способ является наименее предпочтительным, так как для очистки будет задействован второй проект. Основная идея этого способа — выбрать карты, которые должны остаться в проекте, а затем использовать инструмент миграции, что бы перенести карты и используемые в них ассеты в другой проект, игнорируя весь оставшийся контент.
Главный минус данного способа в том, что он не переносит исходники, конфигурацию проекта, а так же блупринты и данные, которые не используются в картах.
Что бы произвести миграцию, для начала стоит создать чистый проект на той же самой версии движка. В новый проект сразу стоит перенести все файлы, необходимые для работы проекта. Как правило, это папка Config и Plugins, а если в проекте есть исходники, то Source и Binaries.
Для того, что бы мигрировать карты вместе с ассетами, необходимо в оригинальном проекте выбрать необходимые ассеты, нажать ПКМ и выбрать пункт Migrate.
Миграция карт
У вас должно отобразиться окошко, где будет список со всеми ассетами, которые эти карты используют, и, как следствие, что будет перенесено в новый проект.
Миграция только используемых ассетов
После того, как вы нажмете OK, редактор предложит вам выбрать путь, куда перенести карты и ассеты. Вам необходимо выбрать путь к папке Content в вашем новом проекте. Именно папку Content, а не путь к самому проекту, иначе миграция не будет успешна.
Как только миграция будет окончена, вы можете открыть новый проект и убедиться в том, что все необходимые ассеты перенеслись, а неиспользуемых ассетов нет.
Если какие-то нужные ассеты не мигрировались, то их можно будет выделить отдельно и тем же самым способом мигрировать в новый проект.
Способ 4 — Плагины
Ниже список сторонних плагинов, которые могут так же помочь в очистке проектов. Я эти плагины никогда не использовал, и не могу ручаться за их работу. Решил закинуть сюда, что бы статья была более полноценна. Если у вас был опыт с одними из них, обязательно напишите об этом в комментариях.
Заключение
Возможно есть ещё какие-то способы, я лишь привел те, которые известны мне. Если у вас есть какие-либо комментарии, буду рад их почитать.
Я надеюсь статья окажется полезной для всех, у кого постоянно захламляется проект разными ассетами с прототипов, ассетов с маркетплейса или просто версионностью.