Spec-Zone.ru › Qt 6.1

Оптимизация 2D-активов

Оптимизация изображений, используемых компонентами Texture в вашей сцене, может существенно улучшить производительность вашего приложения как при запуске, так и во время выполнения, а также визуальное качество в некоторых ситуациях.

Мотивация

Неоптимизированные изображения могут негативно сказаться на производительности вашего приложения несколькими способами:

  • Большое изображение требует больше пропускной способности памяти при использовании в качестве текстуры.
  • Сжатые изображения PNG и JPG должны быть распакованы перед отправкой в графическую систему.
  • Неправильно подобранные размеры изображений ухудшают производительность и качество при запуске.
  • Отправка нескомпрессированных изображений в графическую систему занимает больше времени, и они занимают больше графической памяти при использовании.

Кроме того, выбор подходящего размера для ваших изображений и использование mip-картирования может предотвратить проблемы с алиасингом, если ваше изображение будет отображаться существенно меньше в некоторых моментах.

Сокращение размеров изображения

Примечание: Сделайте изображение маленьким, но с размерами, которые являются степенью двойки.

Первое, что вам нужно сделать, — это изменить размер вашего изображения до почти минимально возможного размера. Более мелкие изображения могут загружаться графической системой быстрее, так как им требуется меньше пропускной способности и памяти. Подумайте о максимальном размере, который ваше изображение будет иметь, и измените размер изображения до этого размера. Если ваша текстура будет повторяться с шагом около 32 пикселей, не сохраняйте ее в формате 1024×1024.

Однако обратите внимание, что как горизонтальный, так и вертикальный размер вашего изображения должны быть степенью двойки (POT), чтобы их можно было хранить в GPU. Большинство современных GPU поддерживают текстуры с нецелыми размерами (NPOT), но многие исследования показывают, что использование NPOT-текстур снижает производительность примерно на 30%. Если вам нужно использовать NPOT-текстуры, мы рекомендуем делать размеры кратными 4. Это может помочь вашему GPU эффективно использовать память и кэш, а в конечном итоге повысить производительность.

Примечание: Если вы используете mip-картирование, существуют дополнительные ограничения на размеры изображения.

Использование mip-картирования

Примечание: Используйте mip-картирование, когда ваше изображение может отображаться меньше, чем исходный размер, включая части в перспективе.

Включение mip-картирования создает много меньших копий изображения, увеличивая использование памяти на 1/3. Размеры каждой mip-карты уменьшаются вдвое по сравнению с предыдущей, и масштабирование выполняется в инструменте редактирования изображений с хорошим пересчетом изображения. В результате ускоряется рендеринг, уменьшается время, затрачиваемое GPU на поиск текстуры, а также уменьшаются артефакты алиасинга, такие как мозаичность или подвыборка текстур.

Для создания mip-карт во время сборки текстура должна быть в контейнерном формате, например KTX, так как стандартные форматы изображений не имеют возможности хранить mip-карты.

Возможна генерация mip-карт во время выполнения, установив свойство Texture::generateMipmaps в true.

Примечание: mip-карты требуют определенных размеров изображения для правильной работы на всех уровнях, в зависимости от используемого кодирования.

Mip-карты и размеры изображений

Если исходные размеры изображения представлены значениями width, height, и depth, количество уровней mip-карт будет 1 + floor(log2(max(width, height, depth))), а размеры каждого уровня будут max(1, width_prev >> 1), max(1, height_prev >> 1), и max(1, depth_prev >> 1).

Сохранение альфа-каналов

В большинстве случаев при работе с изображениями, содержащими полупрозрачные области, проще использовать прозрачные слои в инструменте редактирования изображений при их редактировании. Если вы выберете сжатое кодирование, которое поддерживает альфа-канал, прозрачные области вашей сцены должным образом используются для хранения информации об альфа-канале.

Однако в некоторых случаях вам необходимо управлять значениями RGB полностью прозрачных пикселей. В частности, вы можете увидеть визуальные артефакты, если:

  • Любая часть вашего изображения будет отображаться размером больше, чем сохраненный.
  • У вас есть полностью прозрачные пиксели на изображении рядом с достаточно непрозрачными пикселями.

В этом случае интерполяция текстуры между полностью прозрачным пикселем и его соседними несколько непрозрачными пикселями смешивает значения RGB между этими двумя. Если вы используете прозрачные слои в инструменте редактирования изображений, значения RGB для некоторых прозрачных пикселей сохраняются как белый цвет, и вы увидите белую окантовку по краям ваших прозрачных областей.

В таких случаях вместо создания полупрозрачного слоя в инструменте редактирования изображений создайте слой без прозрачности, задав значение RGB для каждого пикселя, который вас интересует. Затем сохраните информацию об альфа-канале в четвертом канале.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/quick3d-asset-conditioning-2d-assets.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API