Оптимизация 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.2/quick3d-asset-conditioning-2d-assets.html