Превосходное качество изображения и низкое энергопотребление, технология суперразрешения графического процессора Airspace открывает новые возможности

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

обеспечиваемая HarmonyOS SDK (XEngine Kit) , основана на входном однокадровом изображении и использует информацию о пространственной окрестности для достижения суперсэмплирования. Когда производительности графического процессора недостаточно для поддержки рендеринга сцен с высоким разрешением, для улучшения пользовательского опыта можно использовать возможность пространственного суперразрешения графического процессора для восстановления изображений с более низким разрешением в изображения с высоким разрешением с помощью сверхразрешения. По сравнению с прямым рендерингом изображений с высоким разрешением, использование возможностей суперразрешения может снизить нагрузку на графический процессор и снизить энергопотребление.

Демо

Ниже приведена демонстрация функции суперразрешения графического процессора воздушного пространства (GLES). Если разработчики заинтересованы в реализации, они могут загрузить или чтобы испытать ее и оптимизировать на основе конкретных сценариев применения.

1720970243360.png

Этапы разработки гиперразрешения графического процессора Airspace

1. Знакомство с API​

1. API OpenGL ES​

930821_CZ9GPECTBU4ES8A.jpg


HMS_XEG_SpatialUpscaleParameter используется для ввода параметров сверхвысокого разрешения. Согласно перечислению, приведенному в заголовочном файле, необходимо ввести всего два параметра:

• XEG_SPATIAL_UPSCALE_SCISOR используется для установки области выборки сверхвысокого разрешения. Значение представляет собой адрес массива целых чисел длиной 4.

•XEG_SPATIAL_UPSCALE_SHARPNESS используется для установки резкости, а значением является адрес числа с плавающей запятой.

HMS_XEG_RenderSpatialUpscale используется для выполнения рендеринга со сверхвысоким разрешением, а входными данными является идентификатор текстуры, подлежащей сверхразрешению.

Код:

1
2
3
4
5
6
7
8
9
float m_sharpness = 0.3;
int upscaleScissor[4] = {0, 0, 720, 540};
HMS_XEG_SpatialUpscaleParameter(XEG_SPATIAL_UPSCALE_SHARPNESS, &m_sharpness);
HMS_XEG_SpatialUpscaleParameter(XEG_SPATIAL_UPSCALE_SCISSOR, upscaleScissor);
...
glBindFramebuffer(GL_FRAMEBUFFER, framebufferID);
glViewport(0, 0, 1080, 720);
glScissor(0, 0, 1080, 720);
HMS_XEG_RenderSpatialUpscale(textureID);

Когда входное перечисление XEG_SPATIAL_UPSCALE_SCISOR равно {0, 0,textureWidth,textureHeight}, изображение, соответствующее скорректированному значению резкости, выглядит следующим образом:

Резкость=0:
1720970364575.png



Резкость = 0,3:
1720970411042.png



Продолжаем увеличивать резкость, резкость = 1:
1720970504855.png


Когда входное перечисление XEG_SPATIAL_UPSCALE_SCISOR равно {textureWidth/4,textureHeight/4,textureWidth/2,textureHeight/2}, то есть: входная текстура начинается с четверти ширины и высоты, а ширина и высота составляют половину текстуры. . Эффект супер-оценки показан на рисунке:

1720970549069.png


Сравнение исходного изображения и изображения после увеличения сверхразрешения в 1,5 раза выглядит следующим образом:
1720970585653.png


1720970614265.png

2.Вулкан API​

930821_YKB9XXESFWY6UVR.jpg


HMS_XEG_CreateSpatialUpscale используется для создания экземпляра со сверхвысоким разрешением. Параметр конструкции представляет собой структуру. Конкретное описание параметра следующее:


IMG_20240714_183106_329.jpg


Преимущество указания размера изображения при создании состоит в том, что после создания экземпляра вам нужно будет только передавать входные и выходные изображения сверхразрешения при последующем использовании. Поскольку ресурсы Vulkan, необходимые для сверхразрешения, создаются в этом интерфейсе, в процессе сверхразрешения выполняется только рисование, а накладные расходы очень малы. Недостаток в том, что входные и выходные размеры, значения резкости и т. д. фиксируются после создания экземпляра. При изменении параметров экземпляр необходимо создавать заново. Поэтому при использовании этого интерфейса лучше уточнять. сначала размер сверхвысокого разрешения, чтобы избежать сверхразрешения во время выполнения. Создание и уничтожение подэкземпляров.

XEG_SpatialUpscaleDescription используется для выполнения суперразрешения. Как и общие команды Vulkan, этот интерфейс используется только для записи Vulkan. После завершения записи вам необходимо отправить входные данные командного буфера с помощью интерфейса.

1VKAPI_ATTR void VKAPI_CALL HMS_XEG_CmdRenderSpatialUpscale (VkCommandBuffer commandBuffer, XEG_SpatialUpscale xegSpatialUpscale, XEG_SpatialUpscaleDescription *pXegSpatialUpscaleDescription)

Входные параметры этого интерфейса включают vkcommandbuffe, созданный экземпляр сверхвысокого разрешения xegSpatialUpscale и структуру ввода и вывода сверхвысокого разрешения. XEG_SpatialUpscaleDescription включает в себя два vkiamgeview: vkimageview входной текстуры сверхвысокого разрешения и выходной текстуры.

HMS_XEG_DestroySpatialUpscale: используется для уничтожения экземпляра xegSpatialUpscale со сверхвысоким разрешением.

1) Создайте xegSpatialUpscale при инициализации Vulkan.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
двадцать один
XEG_SpatialUpscale xegSpatialUpscale;
VkRect2D srcRect2D;
srcRect2D.offset.x = 0;
srcRect2D.offset.y = 0;
srcRect2D.extent.width = 960;
srcRect2D.extent.height = 540

VkRect2D dstRect2D;
dstRect2D.offset.x = 0;
dstRect2D.offset.y = 0;
dstRect2D.extent.width = 1440;
dstRect2D.extent.height = 810;

XEG_SpatialUpscaleCreateInfo createInfo;
createInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
createInfo.sharpness = 0.2f;
createInfo.outputSize = dstRect2D.extent;
createInfo.inputRegion = srcRect2D;
createInfo.inputSize = srcRect2D.extent;
createInfo.outputRegion = dstRect2D;
HMS_XEG_CreateSpatialUpscale(device, &createInfo, &xegSpatialUpscale);
2) Выполните команду суперразрешения. Запись команды суперразрешения должна выполняться вне renderpass.

Обычная запись команд вк, сначала startcommandbuffer.

1
2
3
4
5
vkBeginCommandBuffer(cmdbuffer, &cmdBufInfo))
(beginerenderpassinfo省略)
Begine一个renderpass:
vkCmdBeginRenderPass(cmdbuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
(renderpass内录制命令,如vkCmdSetScissor、vkCmdBindPipeline等等)
Завершить рендерпасс.

1vkCmdEndRenderPass(cmdbuffer);
После завершения рендерпаса вы можете переоценить балл.

1
2
3
4
XEG_SpatialUpscaleDescription xegDescription{0};
xegDescription.inputImage = inputTextureImageView;
xegDescription.outputImage = outputTextureImageView;
HMS_XEG_CmdRenderSpatialUpscale(cmdbuffer, xegSpatialUpscale, &xegDescription);
После завершения суперсчета запишите следующую команду renderpass, пока не будут завершены все записи команд.

1
2
vkCmdBeginRenderPass(cmdbuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
VK_CHECK_RESULT(vkEndCommandBuffer(cmdbuffer));
3) Когда процесс готов к уничтожению, необходимо уничтожить экземпляр сверхвысокого разрешения.

1HMS_XEG_DestroySpatialUpscale(xegSpatialUpscale);
Рендеринг супер-оценки:

Когда inputRegion — это вся область входной текстуры, outputRegin — это вся область выходной текстуры, а резкость = 0:
1720971313598.png


Увеличьте резкость до Резкости = 0,3:
1720971352347.png


Продолжайте увеличивать степень резкости =1,1. В этот момент уже произошла чрезмерная резкость:
1720971380197.png


При изменении области ввода в среднюю область входной текстуры, например { inputTextureWidth/4, inputTextureHeight/4, inputTextureWidth/2, inputTextureHeight/2 }, то есть: входная текстура начинается с четверти ширины и высоты , а ширина, высота и длина — это половина текстуры. Результат супер-оценки выглядит следующим образом:
1720971406817.png



Продолжайте настраивать область вывода outputRegion, например: {outputTextureWidth/3, outputTextureHeight/3, outputTextureWidth/2, outputTextureHeight/2}, то есть начните с одной трети ширины и высоты, а ширина и высота составляют половину. ширины и высоты текстуры. Эффект показан на рисунке:
1720971444727.png


В приведенном выше примере можно управлять областью сверхвысокого разрешения и областью выборки, изменяя inputRegion и outputRegion.

Сравнение исходного изображения и изображения после увеличения сверхразрешения в 1,5 раза выглядит следующим образом:
1720971467413.png


1720971487799.png


, созданного Фрэнком Мейнлом . Crytek имеет лицензию
 

Вложения

  • 1720970313419.png
    1720970313419.png
    236,7 КБ · Просмотры: 37
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!