Adreno GPU上Android 游戏开发介绍 (3)

传统游戏HDR

在HDR和SDR图像的对比中,传统的HDR图像具有更令人信服的视觉效果。

在这里插入图片描述
在这里插入图片描述传统的游戏 HDR 管道需要以下步骤:

  • RenderedScene:在具有 HDR 格式的 Render-Target 上渲染场景,例如 RGBA16、R11G11B10、R10G10B10A2。
  • 后处理:Bloom、晕影、颗粒抖动、运动模糊等。
  • ColorGrading:对比度、饱和度和伽马、增益等。
  • ToneMapping:将动态范围数据映射到标准范围数据(RGBA8888/sRGB)。 传统的映射曲线有很多:

在这里插入图片描述

True HDR

真正的 HDR 图像具有更高的对比度。 更多细节保留在高光和阴影区域。 Qualcomm True HDR 游戏兼容 HDR10 标准。 事实上,显示处理单元(DPU)期望HDR10数据输入。

在这里插入图片描述

真正的 HDR 管线

HDR 游戏内容是在具有更高动态范围和更宽色域的参考显示器上生成的。 渲染的场景在后处理阶段映射到True HDR支持的动态范围和色彩空间,并通过元数据通知显示。

在这里插入图片描述
以下提供了 True HDR 管道及其工作原理的详细概述:

  • HDR 内容:在具有大色彩量(更高的动态范围和更宽的色域)的参考显示器上生成的游戏内容。
  • 场景参考图像:以 HDR 内容为输入,采用基于物理渲染 (PBR) 的逼真渲染方法,生成具有适当曝光、丰富高光和阴影的良好 HDR 场景参考图像。
  • 后处理、颜色分级:与传统游戏 HDR 相同。
  • GamutMap 和 Tonemapper:将 RenderedScene 的动态范围和色彩空间映射到 True HDR 支持的动态范围和色彩空间。
  • UIToneMapper:将 UI 渲染数据映射到 HDR。
  • 添加比例因子:向 UI 添加比例因子以匹配主渲染场景。
  • 复合:混合场景 HDR 和 UI HDR 输入。如果游戏依赖大量透明 UI,与直接渲染 UI 到后台缓冲区相比,在渲染目标中渲染整个 UI,然后与后台缓冲区混合会更容易。
  • ST-2084-PQ(OETF):True HDR 需要后台缓冲区接收的数据是 ST-2084-PQEncoded。因此,backbuffer 将由 ST-2084-PQ 编码,编码值映射到 [0.0,1.0] 范围内。
  • EOTF/Tonemapping/GamutMapping:由高通 DPU 处理。
    1)ST-2084-PQ(EOTF):ST-2084-PQ(OETF) 的倒数。
    2)色调映射:将 EOTF 的输出映射到屏幕使用的实际色彩空间和实际动态范围。
    3)GamutMaping:将一种色彩空间映射到另一种色彩空间。 通常的方法是线性拉伸或压缩。 HDR10标准要求的色彩空间为BT2020,但实际屏幕无法满足这一要求。 Qualcomm DPU 将执行色域转换。

学院色彩编码系统 (ACES) 色调映射

即使使用 HDR 屏幕,支持的动态范围也是有限的。 场景参考图像可以生成非常高动态范围的图像。 SceneToneMapper 会将输入的 HDR 场景(高达 10000 尼特)映射到真正的 HDR 场景(1000 尼特)。 UIToneMapper 会将 UI 数据映射到 True HDR 数据。

学院色彩编码系统 (ACES) 经常用于游戏中。

ACES管道

ACES有两个色域:AP0和AP1。

AP0 和 AP1 包含 BT.709 和 BT.2020。 这意味着 ACES 可以处理各种类型的色调映射和色域映射。

在这里插入图片描述在这里插入图片描述对于游戏,场景渲染后的图像是场景引用图像。 在 ACES 管道中,只有三个组件:

  • 颜色分级:在 ACES 色彩空间中分级。
  • 参考渲染变换 (RRT):将场景参考色度转换为显示参考。 色彩空间转换为 ACES 定义的 AP0 色彩空间。 动态范围转换为 0-10000 尼特,因此它允许渲染到任何输出设备。

在这里插入图片描述

  • 输出设备转换 (ODT):将色彩空间转换为 ACES 定义的 AP1 色彩空间。 动态范围映射到设备支持的动态范围。 输出前将 AP1 转换为设备支持的色彩空间。 ODT有很多,如ODT_48nits、ODT_1000nits、ODT_2000nits等。
    在这里插入图片描述

真正的 HDR 代码设置

要在 OpenGL ES 中启用 True HDR,必须支持以下扩展:

  • EGL_EXT_gl_colorspace_display_p3
  • EGL_EXT_gl_colorspace_bt2020_pq
  • EGL_EXT_surface_SMPTE2086_metadata

设置 EGLSurface 格式

将 EGLSurface 格式设置为 R10G10B10A2:

EGLConfig EGLConfigList [1]; int ConfigAttributes [] = {
    EGL_RED_SIZE,10
    EGL_GREEN_SIZE,10
    EGL_BLUE_SIZE,10
    EGL_ALPHA_SIZE,2
    EGL_COLOR_COMPONENT_TYPE_EXT,
EGL_COLOR_COMPONENT_TYPE_FIXED_EXT, EGL_NONE};

eglChooseConfig (eglDisplay,ConfigAttributes,EGLConfigList,1, eglNumConfigs);

设置色彩空间

将 eglWindowSurface 的颜色空间设置为 EGL_GL_COLORSPACE_BT2020_PQ_EXT。

EGLint attribs[] = {EGL_GL_COLORSPACE_KHR,EGL_GL_COLORSPACE_BT2020_PQ_EXT,EGL_NONE };
EGLSurface eglSurface=eglCreateWidowSurface(eglDisplay,eglConfigParam, InWindow, attribs);

设置元数据

设置 eglSurface 的元数据属性。

EGLint SurfaceAttribs [] = {
EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT,       EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT,
    EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT,
    EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT,
    EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT,
    EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT,
    EGL_SMPTE2086_WHITE_POINT_X_EXT,
    EGL_SMPTE2086_WHITE_POINT_Y_EXT,
    EGL_SMPTE2086_MAX_LUMINANCE_EXT,
    EGL_SMPTE2086_MIN_LUMINANCE_EXT
};
static const DisplayChromacities DisplayChromacityList [] = { {{0.70800f, 0.29200f, 0.17000f, 0.79700f, 0.13100f, 0.04600f, 0.31270f, 0.32900f}}, // DG_Rec2020 };
for (uint32_t i = 0; i < 8; i++)
{
    eglSurfaceAttrib(PImplData->eglDisplay,eglSurface, SurfaceAttribs[i],EGLint(DisplayChromacityList[0].ChromaVals[i]* EGL_METADATA_SCALING_EXT));
}

获取Android上的显示亮度

最大平均亮度:

https://developer.android.com/reference/android/view/Display.HdrCapabilities.html#getDesired MaxAverageLuminance() Maxluminance:

https://developer.android.com/reference/android/view/Display.HdrCapabilities.html#getDesired MaxLuminance() MinLuminance:

https://developer.android.com/reference/android/view/Display.HdrCapabilities.html#getDesired MinLuminance()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. Introduction 1.1 Document Structure 1.1.1. Requirements by Device Type 1.1.2. Requirement ID 1.1.3. Requirement ID in Section 2 2. Device Types 2.1 Device Configurations 2.2. Handheld Requirements 2.2.1. Hardware 2.2.2. Multimedia 2.2.3. Software 2.2.4. Performance and Power 2.2.5. Security Model 2.3. Television Requirements 2.3.1. Hardware 2.3.2. Multimedia 2.3.3. Software 2.3.4. Performance and Power 2.4. Watch Requirements 2.4.1. Hardware 2.4.2. Multimedia 2.4.3. Software 2.4.4. Performance and Power 2.5. Automotive Requirements 2.5.1. Hardware 2.5.2. Multimedia 2.5.3. Software 2.5.4. Performance and Power 2.5.5. Security Model 2.6. Tablet Requirements 2.4.1. Hardware 3. Software 3.1. Managed API Compatibility 3.1.1. Android Extensions 3.1.2. Android Library 3.2. Soft API Compatibility 3.2.1. Permissions 3.2.2. Build Parameters 3.2.3. Intent Compatibility 3.2.3.1. Core Application Intents 3.2.3.2. Intent Resolution 3.2.3.3. Intent Namespaces 3.2.3.4. Broadcast Intents 3.2.3.5. Default App Settings 3.2.4. Activities on secondary displays 3.3. Native API Compatibility 3.3.1. Application Binary Interfaces 3.3.2. 32-bit ARM Native Code Compatibility 3.4. Web Compatibility 3.4.1. WebView Compatibility 3.4.2. Browser Compatibility 3.5. API Behavioral Compatibility 3.5.1. Background Restriction 3.6. API Namespaces 3.7. Runtime Compatibility 3.8. User Interface Compatibility 3.8.1. Launcher (Home Screen) 3.8.2. Widgets 3.8.3. Notifications 3.8.3.1. Presentation of Notifications 3.8.3.2. Notification Listener Service 3.8.3.3. DND (Do not Disturb) 3.8.4. Search 3.8.5. Alerts and Toasts 3.8.6. Themes 3.8.7. Live Wallpapers 3.8.8. Activity Switching 3.8.9. Input Management 3.8.10. Lock Screen Media Control 3.8.11. Screen savers (previously Dreams) 3.8.12. Location 3.8.13. Unicode and Font 3.8.14. Multi-windows 3.8.15. Display Cutout 3.9. Device Administration 3.9.1 Device Provisioning 3.9.1.1 Device owner provisioning 3.9.1.2 Managed profile provisioning 3.9.2 Managed Profile Support 3.9.3 Managed User Support 3.10. Accessibility 3.11. Text-to-Speech 3.12. TV Input Framework 3.13. Quick Settings 3.14. Media UI 3.15. Instant Apps 3.16. Companion Device Pairing 3.17. Heavyweight Apps 4. Application Packaging Compatibility 5. Multimedia Compatibility 5.1. Media Codecs 5.1.1. Audio Encoding 5.1.2. Audio Decoding 5.1.3. Audio Codecs Details 5.1.4. Image Encoding 5.1.5. Image Decoding 5.1.6. Image Codecs Details 5.1.7. Video Codecs 5.1.8. Video Codecs List 5.2. Video Encoding 5.2.1. H.263 5.2.2. H-264 5.2.3. VP8 5.2.4. VP9 5.3. Video Decoding 5.3.1. MPEG-2 5.3.2. H.263 5.3.3. MPEG-4 5.3.4. H.264 5.3.5. H.265 (HEVC) 5.3.6. VP8 5.3.7. VP9 5.4. Audio Recording 5.4.1. Raw Audio Capture 5.4.2. Capture for Voice Recognition 5.4.3. Capture for Rerouting of Playback 5.5. Audio Playback 5.5.1. Raw Audio Playback 5.5.2. Audio Effects 5.5.3. Audio Output Volume 5.6. Audio Latency 5.7. Network Protocols 5.8. Secure Media 5.9. Musical Instrument Digital Interface (MIDI) 5.10. Professional Audio 5.11. Capture for Unprocessed 6. Developer Tools and Options Compatibility 6.1. Developer Tools 6.2. Developer Options 7. Hardware Compatibility 7.1. Display and Graphics 7.1.1. Screen Configuration 7.1.1.1. Screen Size and Shape 7.1.1.2. Screen Aspect Ratio 7.1.1.3. Screen Density 7.1.2. Display Metrics

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值