HDR渲染管线中的像素格式-v1

目录

R16G16B16A16

支持透明度,精度高用起来简单。现在大模型中也常用。。不过游戏中通常不怎么使用这个,涉及DDR带宽读写的功耗开销。复杂场景,pass打断,FP16格式带来的功耗开销,

IOS中一个display p3就建议采用FP16的格式了,不一定支持硬件合成,

下面各种奇葩的像素格式,解决一个问题,优化带宽读写功耗,

EGL------R10G10B10A2 渲染HDR内容实践

基于gles,如果要渲染HDR的视频,

1)视频解码拿出像素buffer,携带metadata

2)EGL创建surface,

  • 指定色域格式,BT2020_PQ,BT2020_HLG
  • 指定像素格式,一般rgba10bit

EGL中还需要给windows设置像素格式,下面是android的平台化代码:

cpp 复制代码
/*
 * Initialize an EGL eglContext_ for the current display_.
 *
 * Supported Format:
 *     8888:     EGL_COLOR_COMPONENT_TYPE_EXT  EGL_COLOR_COMPONENT_TYPE_FIXED_EXT
 *     101010102:EGL_COLOR_COMPONENT_TYPE_EXT  EGL_COLOR_COMPONENT_TYPE_FIXED_EXT
 *     16161616: EGL_COLOR_COMPONENT_TYPE_EXT  EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT
 *
 */
bool ImageViewEngine::CreateWideColorCtx(WIDECOLOR_MODE mode) {
  EGLBoolean status;

  std::vector<EGLint> attributes {
      EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
      EGL_RENDERABLE_TYPE, EGL_OPENGL_ES3_BIT,
      EGL_BLUE_SIZE,  glWideColorCfg[mode].b_,
      EGL_GREEN_SIZE, glWideColorCfg[mode].g_,
      EGL_RED_SIZE,   glWideColorCfg[mode].r_,
      EGL_ALPHA_SIZE, glWideColorCfg[mode].a_,
  };
  attributes.push_back(EGL_NONE);

  // request just one matching config and use it
  EGLint    cfgCount = 1;
  EGLConfig config;
  status = eglChooseConfig(display_, attributes.data(), &config,
                           cfgCount, &cfgCount);
  if (!status || cfgCount != 1) {
    // if not support, report to caller so caller could choose another one
    LOGI("==== Chosen Config type(%d) is not supported", mode);
    return false;
  }

  // Create GL3 Context
  attributes.resize(0);
  attributes.push_back(EGL_CONTEXT_CLIENT_VERSION);
  attributes.push_back(3);
  attributes.push_back(EGL_NONE);
  eglContext_ = eglCreateContext(display_, config,
                                 EGL_NO_CONTEXT, attributes.data());
  if(eglContext_ == EGL_NO_CONTEXT) {
    return false;
  }

  EGLint format;
  eglGetConfigAttrib(display_, config, EGL_NATIVE_VISUAL_ID, &format);
  LOGI("====Surface format is(%d)", format);

  int32_t res = ANativeWindow_setBuffersGeometry(app_->window, 0, 0, format);
  if(res < 0) {
    eglDestroyContext(display_, eglContext_);
    eglContext_ = EGL_NO_CONTEXT;
    return false;
  }
  // ...
}

metal中的扩展像素格式

IOS10之后就搞出来的,重点看32pp的,

IOS10之后引入的,三个分量都是10bit~

cpp 复制代码
        if ([_device supportsFamily:MTLGPUFamilyApple3])
        {
            _drawableFormat = MTLPixelFormatBGR10_XR;
        }
        else
        {
            _drawableFormat = MTLPixelFormatBGRA8Unorm;
        }

P010

HDR可能采用YUV存储,能比rgba少至少10%的数据量。

需要GPU支持采样,vulkan中需要设置ConversionInfo。

R11G10B10F

舍弃透明度,扩展rgb通道,

MTLPixelFormatRG11B10Float

REF

游戏中多pass打断问题

IOS10扩展像素格式

相关推荐
2401_841495645 小时前
【游戏开发】登山赛车
数据结构·python·游戏·游戏开发·pygame·登山赛车游戏·游戏打包发布
AndrewHZ1 天前
【图像处理基石】什么是光栅化?
图像处理·人工智能·算法·计算机视觉·3d·图形渲染·光栅化
做cv的小昊2 天前
计算机图形学:【Games101】学习笔记05——着色(插值、高级纹理映射)与几何(基本表示方法)
笔记·opencv·学习·计算机视觉·图形渲染·几何学
BoBoZz192 天前
3D 医学扫描同时显示患者的皮肤、骨骼的 3D 模型(通过等值面提取),以及三个正交切片
python·vtk·图形渲染·图形处理
喵个咪2 天前
Go单协程事件调度器:游戏后端的无锁有序与响应时间掌控
后端·游戏开发
yongche_shi2 天前
第九十九篇:Python在其他领域的应用:游戏开发、物联网、AIoT简介
开发语言·python·物联网·游戏开发·aiot
SmalBox2 天前
【节点】[NormalBlend节点]原理解析与实际应用
unity3d·游戏开发·图形学
龙智DevSecOps解决方案2 天前
Perforce《2025游戏技术现状报告》Part 5:创意工作者在用什么工具以及如何看待游戏引擎与生成式AI(附免费下载)
游戏引擎·游戏开发·软件开发·perforce·ai创作·龙智
_大学牲3 天前
Flutter 勇闯2D像素游戏之路(五):像元气骑士一样的设计随机地牢
flutter·游戏·游戏开发