С развитием эпохи больших данных виртуальная реальность, дополненная реальность и другие приложения, требующие обработки изображений и вычислений в реальном времени, создали новые проблемы и возможности для служб ускорения графических процессоров.
Демо
Ниже приведена демонстрация функции суперразрешения графического процессора воздушного пространства (GLES). Если разработчики заинтересованы в реализации, они могут загрузить
Этапы разработки гиперразрешения графического процессора Airspace
HMS_XEG_SpatialUpscaleParameter используется для ввода параметров сверхвысокого разрешения. Согласно перечислению, приведенному в заголовочном файле, необходимо ввести всего два параметра:
• XEG_SPATIAL_UPSCALE_SCISOR используется для установки области выборки сверхвысокого разрешения. Значение представляет собой адрес массива целых чисел длиной 4.
•XEG_SPATIAL_UPSCALE_SHARPNESS используется для установки резкости, а значением является адрес числа с плавающей запятой.
HMS_XEG_RenderSpatialUpscale используется для выполнения рендеринга со сверхвысоким разрешением, а входными данными является идентификатор текстуры, подлежащей сверхразрешению.
Код:
Когда входное перечисление XEG_SPATIAL_UPSCALE_SCISOR равно {0, 0,textureWidth,textureHeight}, изображение, соответствующее скорректированному значению резкости, выглядит следующим образом:
Резкость=0:
Резкость = 0,3:
Продолжаем увеличивать резкость, резкость = 1:
Когда входное перечисление XEG_SPATIAL_UPSCALE_SCISOR равно {textureWidth/4,textureHeight/4,textureWidth/2,textureHeight/2}, то есть: входная текстура начинается с четверти ширины и высоты, а ширина и высота составляют половину текстуры. . Эффект супер-оценки показан на рисунке:
Сравнение исходного изображения и изображения после увеличения сверхразрешения в 1,5 раза выглядит следующим образом:
HMS_XEG_CreateSpatialUpscale используется для создания экземпляра со сверхвысоким разрешением. Параметр конструкции представляет собой структуру. Конкретное описание параметра следующее:
Преимущество указания размера изображения при создании состоит в том, что после создания экземпляра вам нужно будет только передавать входные и выходные изображения сверхразрешения при последующем использовании. Поскольку ресурсы Vulkan, необходимые для сверхразрешения, создаются в этом интерфейсе, в процессе сверхразрешения выполняется только рисование, а накладные расходы очень малы. Недостаток в том, что входные и выходные размеры, значения резкости и т. д. фиксируются после создания экземпляра. При изменении параметров экземпляр необходимо создавать заново. Поэтому при использовании этого интерфейса лучше уточнять. сначала размер сверхвысокого разрешения, чтобы избежать сверхразрешения во время выполнения. Создание и уничтожение подэкземпляров.
XEG_SpatialUpscaleDescription используется для выполнения суперразрешения. Как и общие команды Vulkan, этот интерфейс используется только для записи Vulkan. После завершения записи вам необходимо отправить входные данные командного буфера с помощью интерфейса.
Входные параметры этого интерфейса включают vkcommandbuffe, созданный экземпляр сверхвысокого разрешения xegSpatialUpscale и структуру ввода и вывода сверхвысокого разрешения. XEG_SpatialUpscaleDescription включает в себя два vkiamgeview: vkimageview входной текстуры сверхвысокого разрешения и выходной текстуры.
HMS_XEG_DestroySpatialUpscale: используется для уничтожения экземпляра xegSpatialUpscale со сверхвысоким разрешением.
1) Создайте xegSpatialUpscale при инициализации Vulkan.
2) Выполните команду суперразрешения. Запись команды суперразрешения должна выполняться вне renderpass.
Обычная запись команд вк, сначала startcommandbuffer.
Завершить рендерпасс.
После завершения рендерпаса вы можете переоценить балл.
После завершения суперсчета запишите следующую команду renderpass, пока не будут завершены все записи команд.
3) Когда процесс готов к уничтожению, необходимо уничтожить экземпляр сверхвысокого разрешения.
Рендеринг супер-оценки:
Когда inputRegion — это вся область входной текстуры, outputRegin — это вся область выходной текстуры, а резкость = 0:
Увеличьте резкость до Резкости = 0,3:
Продолжайте увеличивать степень резкости =1,1. В этот момент уже произошла чрезмерная резкость:
При изменении области ввода в среднюю область входной текстуры, например { inputTextureWidth/4, inputTextureHeight/4, inputTextureWidth/2, inputTextureHeight/2 }, то есть: входная текстура начинается с четверти ширины и высоты , а ширина, высота и длина — это половина текстуры. Результат супер-оценки выглядит следующим образом:
Продолжайте настраивать область вывода outputRegion, например: {outputTextureWidth/3, outputTextureHeight/3, outputTextureWidth/2, outputTextureHeight/2}, то есть начните с одной трети ширины и высоты, а ширина и высота составляют половину. ширины и высоты текстуры. Эффект показан на рисунке:
В приведенном выше примере можно управлять областью сверхвысокого разрешения и областью выборки, изменяя inputRegion и outputRegion.
Сравнение исходного изображения и изображения после увеличения сверхразрешения в 1,5 раза выглядит следующим образом:
Ссылка скрыта от гостей
обеспечиваемая
Ссылка скрыта от гостей
HarmonyOS SDK (XEngine Kit) , основана на входном однокадровом изображении и использует информацию о пространственной окрестности для достижения суперсэмплирования. Когда производительности графического процессора недостаточно для поддержки рендеринга сцен с высоким разрешением, для улучшения пользовательского опыта можно использовать возможность пространственного суперразрешения графического процессора для восстановления изображений с более низким разрешением в изображения с высоким разрешением с помощью сверхразрешения. По сравнению с прямым рендерингом изображений с высоким разрешением, использование возможностей суперразрешения может снизить нагрузку на графический процессор и снизить энергопотребление.Демо
Ниже приведена демонстрация функции суперразрешения графического процессора воздушного пространства (GLES). Если разработчики заинтересованы в реализации, они могут загрузить
Ссылка скрыта от гостей
или
Ссылка скрыта от гостей
чтобы испытать ее и оптимизировать на основе конкретных сценариев применения.Этапы разработки гиперразрешения графического процессора Airspace
1. Знакомство с API
1. API OpenGL ES
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:
Резкость = 0,3:
Продолжаем увеличивать резкость, резкость = 1:
Когда входное перечисление XEG_SPATIAL_UPSCALE_SCISOR равно {textureWidth/4,textureHeight/4,textureWidth/2,textureHeight/2}, то есть: входная текстура начинается с четверти ширины и высоты, а ширина и высота составляют половину текстуры. . Эффект супер-оценки показан на рисунке:
Сравнение исходного изображения и изображения после увеличения сверхразрешения в 1,5 раза выглядит следующим образом:
2.Вулкан API
HMS_XEG_CreateSpatialUpscale используется для создания экземпляра со сверхвысоким разрешением. Параметр конструкции представляет собой структуру. Конкретное описание параметра следующее:
Преимущество указания размера изображения при создании состоит в том, что после создания экземпляра вам нужно будет только передавать входные и выходные изображения сверхразрешения при последующем использовании. Поскольку ресурсы Vulkan, необходимые для сверхразрешения, создаются в этом интерфейсе, в процессе сверхразрешения выполняется только рисование, а накладные расходы очень малы. Недостаток в том, что входные и выходные размеры, значения резкости и т. д. фиксируются после создания экземпляра. При изменении параметров экземпляр необходимо создавать заново. Поэтому при использовании этого интерфейса лучше уточнять. сначала размер сверхвысокого разрешения, чтобы избежать сверхразрешения во время выполнения. Создание и уничтожение подэкземпляров.
XEG_SpatialUpscaleDescription используется для выполнения суперразрешения. Как и общие команды Vulkan, этот интерфейс используется только для записи Vulkan. После завершения записи вам необходимо отправить входные данные командного буфера с помощью интерфейса.
1 | VKAPI_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); |
Обычная запись команд вк, сначала startcommandbuffer.
1 2 3 4 5 | vkBeginCommandBuffer(cmdbuffer, &cmdBufInfo)) (beginerenderpassinfo省略) Begine一个renderpass: vkCmdBeginRenderPass(cmdbuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); (renderpass内录制命令,如vkCmdSetScissor、vkCmdBindPipeline等等) |
1 | vkCmdEndRenderPass(cmdbuffer); |
1 2 3 4 | XEG_SpatialUpscaleDescription xegDescription{0}; xegDescription.inputImage = inputTextureImageView; xegDescription.outputImage = outputTextureImageView; HMS_XEG_CmdRenderSpatialUpscale(cmdbuffer, xegSpatialUpscale, &xegDescription); |
1 2 | vkCmdBeginRenderPass(cmdbuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); VK_CHECK_RESULT(vkEndCommandBuffer(cmdbuffer)); |
1 | HMS_XEG_DestroySpatialUpscale(xegSpatialUpscale); |
Когда inputRegion — это вся область входной текстуры, outputRegin — это вся область выходной текстуры, а резкость = 0:
Увеличьте резкость до Резкости = 0,3:
Продолжайте увеличивать степень резкости =1,1. В этот момент уже произошла чрезмерная резкость:
При изменении области ввода в среднюю область входной текстуры, например { inputTextureWidth/4, inputTextureHeight/4, inputTextureWidth/2, inputTextureHeight/2 }, то есть: входная текстура начинается с четверти ширины и высоты , а ширина, высота и длина — это половина текстуры. Результат супер-оценки выглядит следующим образом:
Продолжайте настраивать область вывода outputRegion, например: {outputTextureWidth/3, outputTextureHeight/3, outputTextureWidth/2, outputTextureHeight/2}, то есть начните с одной трети ширины и высоты, а ширина и высота составляют половину. ширины и высоты текстуры. Эффект показан на рисунке:
В приведенном выше примере можно управлять областью сверхвысокого разрешения и областью выборки, изменяя inputRegion и outputRegion.
Сравнение исходного изображения и изображения после увеличения сверхразрешения в 1,5 раза выглядит следующим образом:
Ссылка скрыта от гостей
, созданного Фрэнком Мейнлом . Crytek имеет лицензию
Ссылка скрыта от гостей