Unity 6.3
0 онлайн 96 гостей 3 в системе
Вход
Оптимизация Шаг 117 из 208

Загрузка текстуры и сетки

Unity может загружать текстуры и данные сетки с диска и загружать их на GPU двумя способами: синхронно или асинхронно. Эти два процесса называются синхронным конвейером загрузки и асинхронным конвейером загрузки.

Когда Unity использует синхронный конвейер загрузки, он не может выполнять другие задачи во время загрузки и передачи данных. Это может вызвать видимые паузы в приложении. Когда Unity использует асинхронный конвейер загрузки, он может выполнять другие задачи во время фоновой загрузки и передачи данных.

Если текстура или сетка подходит для конвейера асинхронной загрузки, Unity автоматически использует конвейер асинхронной загрузки. Если текстура или сетка не подходит для конвейера асинхронной загрузки, Unity автоматически использует конвейер синхронной загрузки.

Как это работает

Основное различие между синхронным и асинхронным конвейерами загрузки заключается в том, где Unity сохраняет данные во время сборки, что влияет на то, как Unity загружает их во время выполнения.

В синхронном конвейере загрузки, Unity должен загружать как метаданные (заголовочные данные), так и текстурные или вершинные данные (двоичные данные) для текстуры или сетки в одном кадре. В асинхронном конвейере загрузки, Unity должен загружать только данные заголовка в одном кадре, и он может передавать двоичные данные в GPU в последующих кадрах.

В конвейере синхронной загрузки:

  • Во время сборки Unity записывает как заголовок, так и двоичные данные для сетки или текстуры в один и тот же файл .res.
  • Во время выполнения, когда приложение нуждается в текстуре или сетке, Unity загружает в память как заголовочные данные, так и двоичные данные для этой текстуры или сетки из файла .res. Когда все данные находятся в памяти, Unity затем загружает двоичные данные из памяти в GPU.. Операции загрузки и выгрузки происходят в основном на главном потоке, в одном кадре.

В конвейере асинхронной загрузки:

  • Во время сборки Unity записывает данные заголовка в файл .res, а двоичные данные в отдельный файл .resS.
  • Во время выполнения, когда приложению требуется текстура или сетка, Unity загружает заголовок из файла .res в память. Когда заголовок находится в памяти, Unity затем передаёт двоичные данные из файла .resS в файл GPU с помощью кольцевого буфера фиксированного размера. Unity передаёт двоичные данные с помощью нескольких потоков в течение нескольких кадров. Обратите внимание, что на некоторых консольных платформах, где Unity уже знает аппаратное обеспечение GPU, Unity пропускает кольцевой буфер и загружает данные прямо в память GPU.

Дополнительные ресурсы

  • Блог Unity: Оптимизация производительности загрузки: понимание асинхронного конвейера загрузки.