Новый конвейер импорта активов: Надежная основа для ускорения импорта активов

Начиная с версии 2019.3 новый конвейер импорта активов используется по умолчанию в новых проектах, чтобы сэкономить ваше время за счет более быстрого переключения платформ и заложить основу для более быстрого импорта. Мы также улучшаем масштабирование конвейера активов для очень крупных проектов. Читайте далее, чтобы узнать больше о новых улучшениях, а также о наших мотивах и соображениях. Когда вы помещаете новый актив в проект, он не становится частью проекта до тех пор, пока конвейер импорта активов не обнаружит и не импортирует его. За правильное определение состояния проекта отвечает конвейер импорта активов, позволяющий запрашивать это состояние через различные API. В 2017 году началась работа по переработке конвейера импорта активов, которая позволила создать более надежный и масштабируемый подход, а также устранить ряд болевых точек, о которых вы сообщали в своих ежедневных рабочих процессах. В Unity 2019.3 (уже доступна бета-версия) новый конвейер импорта активов (также известный как Asset Import Pipeline V2) будет использоваться по умолчанию для новых проектов. Старые проекты могут перейти на новый конвейер импорта активов, чтобы получить преимущества этой новой системы. Сейчас самое время поделиться некоторыми соображениями, лежащими в основе нового трубопровода. В частности, мы хотим поделиться информацией о том, как обеспечить совместимость новой системы с существующими API, чтобы при переходе на новый конвейер импорта активов не пришлось переписывать скрипты.
Существует множество рабочих процессов, которые являются частью ежедневного цикла разработки. Мы выявили наиболее трудоемкие проблемы и нашли для них решения. Импорт активов может занять много времени. Преобразование исходных данных в формат, который готов использовать редактор Unity или платформа, - процесс нетривиальный. Например, импорт сложной 3D-модели требует большого количества вычислений, а в сочетании с анимацией это время может быстро увеличиться. Чтобы решить эту проблему, необходимо рассмотреть 3 ключевых понятия, которые должны стать частью решения:
Для большинства типов активов Unity необходимо преобразовать данные из исходного файла, в зависимости от целевой платформы для ваших проектов. Результат будет отличаться в зависимости от совместимых форматов GPU, таких как PVRTC, ASTC или ETC. Это связано с тем, что большинство форматов файлов оптимизированы для экономии места хранения, в то время как в игре или любом другом приложении, работающем в режиме реального времени, данные активов должны быть в формате, готовом к немедленному использованию аппаратным обеспечением, таким как процессор, графическое или звуковое оборудование. Например, когда Unity импортирует файл изображения PNG в качестве текстуры, он не использует исходные данные в формате PNG во время выполнения. Вместо этого, когда текстура импортируется, Unity создает новое представление изображения в другом формате, которое хранится в папке Library проекта. Эта импортированная версия используется классом Texture в движке и загружается в GPU для отображения в реальном времени. Это называется " Результат импорта".
Нам нужно знать, что и вы, и я получаем одинаковые результаты импорта в одном и том же формате, даже если мы используем разное оборудование. Принцип получения одного и того же результата при заданных входных данных мы называем детерминизмом.
Конвейер импорта активов отслеживает все зависимости для каждого актива и хранит кэш импортированных версий всех активов. Зависимости импорта актива - это все данные, которые могут повлиять на результат импорта. Это означает, что при изменении зависимостей импорта актива кэшированная версия импортированного актива устареет и его нужно будет импортировать заново, чтобы отразить эти изменения.
Бывают разные ситуации, когда импорт может занять много времени. Мы выявили два следующих рабочих процесса и реализовали два решения для устранения вышеуказанных проблем: Свежий импорт проектов и быстрое переключение платформ.
При первой настройке проекта происходит то же самое, что и при удалении папки Library. Это означает, что каждый актив в папке assets должен быть перечислен и импортирован конвейером импорта активов. Естественно, это дорогостоящая операция. Однако, обеспечив детерминированность и стабильность процесса импорта на разных машинах, можно сократить время получения результатов импорта на много порядков, в зависимости от размера исходного актива и размера результата импорта. Для этого мы используем новый ускоритель Unity Accelerator, который кэширует результаты импорта в "облаке" у всех, кто к нему подключен, позволяя вам напрямую загружать результаты импорта с сервера, а не проходить тяжелую обработку, которую может повлечь за собой импорт актива.
До версии Unity 2019.2 (с оригинальным конвейером импорта ассетов) папка библиотеки состояла из GUID ассетов и их имен. Таким образом, при переходе с одной платформы на другую результат импорта в папке Library будет аннулирован, и его придется импортировать заново при каждом переходе с одной платформы на другую.

Если бы вам приходилось переключаться между платформами несколько раз в день, это могло бы занять несколько часов, в зависимости от размера вашего проекта.
Некоторые из вас придумали обходные пути, например, иметь копию проекта для каждой платформы на своей машине, но это не очень хорошо масштабируется.
В новом конвейере импорта активов мы убрали сопоставление GUID и имени файла. Поскольку зависимости для конкретного актива отслеживаются, мы можем объединить их вместе, чтобы создать ревизию для результата импорта актива. Это позволяет нам иметь несколько ревизий для каждого актива, что означает, что мы больше не привязаны к сопоставлению GUID и имени файла. Отсутствие этого требования позволяет нам иметь результаты импорта, которые работают в разных конфигурациях. Для быстрого переключения платформ мы могли бы иметь результат импорта для каждой платформы, так что при переключении платформ туда и обратно результат импорта уже находится там, что делает переключение платформ на много порядков быстрее, чем в Asset Import Pipeline V1.

При внесении изменений в активы Unity генерирует ряд новых файлов. Это займет больше места на вашем диске. Однако мы решили решить эту проблему так: удалять неиспользуемые результаты импорта при перезапуске Unity. Мы отслеживаем последние результаты импорта для каждой платформы, поэтому быстрое переключение платформ может продолжаться, в то время как старые результаты импорта удаляются, что помогает вам освободить часть дискового пространства.
Новый конвейер импорта активов доступен в бета-версии Unity 2019.3. Если у вас есть существующий проект, вы можете перейти на новый конвейер импорта активов с помощью окна настроек проекта в редакторе:


Выбрав версию 2, вы сообщите редактору, что теперь хотите использовать новый конвейер импорта активов вместе с этим проектом, а перезапуск проекта приведет к его повторному импорту с использованием нового кода конвейера импорта активов. По сути, это тот же эффект, что и удаление папки "Библиотека", но без ее удаления. При переходе на использование Asset Import Pipeline V2 результаты импорта из оригинального Asset Import Pipeline не удаляются, поскольку V2 создает собственную структуру папок для хранения результатов импорта.
Проекты, созданные в Unity 2019.2 или более ранней версии, по умолчанию будут использовать оригинальный конвейер импорта ассетов. При первом открытии такого проекта в Unity 2019.3 вам будет предложено перейти на новый конвейер импорта ассетов. Если вы откажетесь, ваш проект продолжит использовать оригинальный конвейер импорта активов. Кроме того, выбранная версия сохраняется в файле EditorSettings.asset вашего проекта, поэтому ее можно контролировать по версиям.

При создании нового проекта в Unity 2019.3 или более новой версии новый конвейер импорта активов стал использоваться по умолчанию. Все новые проекты, которые вы создадите, будут использовать его.
На выставке Unite Copenhagen 2019 наша команда представила два доклада. Мой доклад представляет собой общее введение в темы, затронутые в этой статье блога, и может послужить руководством для принятия решений по вашим собственным стратегиям управления активами. Мой коллега Йонас Дрюсен рассказал о грядущих функциях, направленных на расширение конвейера активов и обеспечение стабильности проекта:
Получите бета-версию Unity 2019.3 и попробуйте новый конвейер импорта активов. Мы с нетерпением ждем ваших мнений на форуме! Вы также можете связаться со мной в Twitter, если у вас возникнут дополнительные вопросы.
