創作內容

2 GP

Graphics - PC的HDR實作

作者:巧克力喬斯達│2023-09-23 03:44:46│巴幣:4│人氣:86
這幾天補足了這個一直沒有去補的知識
因為我自己身為玩家時,甚至都沒有用過HDR螢幕! 價格高就算了,可能還不一定值得
但是現在是身為開發者了,想去了解一下這塊,所幸公司用的螢幕是有支援HDR的,所以主要用它來做測試 (LG某款支援HDR的27吋螢幕,詳細規格不知道)

無HDR vs 有HDR
在我的小引擎裡測試
GIF裡並沒有文字說明哪個是HDR哪個不是,但不用講應該也很明顯了
看起來比較飽和鮮豔的就是了,本來因為色彩空間不足,過亮的像素如果疊加最終只會偏白
而HDR卻可以較為出色的顯示出這些資訊,整體對比度增強

看白天測試更明顯

HDR實作
SDR與HDR比較以及其他一些阿哩阿雜的介紹就不贅述了
整體實作流程大約如下 (以D3D12HDR範例來講):
  • 建立Swap chain之後,檢查螢幕是否支援HDR,除了螢幕支援與否,有沒有在win10設定裡打勾"使用HDR"也是必要
    • Vulkan可以跳過這步,因為它會在確定建立HDR buffer時自動幫我們開啟HDR
  • 給Swap chain設定正確的色彩空間
    • Vulkan也可以跳過這步,因為它的做法是在建立swap chain的同時啟動HDR
  • 設定HDR meta資料

那麼我個人還加了第四步,D3D12的三角形範例太簡單了,完全沒有考慮到實際應用
  • 調整Tone mapping,將在HDR的計算結果轉換成SDR的經典手筋,但在HDR卻不是必要的一手,而且shader裡是有下saturate()指令的,HDR根本不需要這個
    那麼我是簡明的先做log10避免過亮,再做一個gamma校正避免過暗,Code

Swap chain格式與色彩空間
當我在這個螢幕上跑Vulkan實作時,主要抓到了以下兩種HDR格式跟色彩空間:
  1. R16G16B16A16_SFLOAT, VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT
  2. A2B10G10R10_UNORM_PACK32, VK_COLOR_SPACE_HDR10_ST2084_EXT
乍一看之下,好像RGBA16F這個格式是一選,但恰好錯了! 主要是它的色彩空間幾乎與SRGB相似,只是讓我能夠直接在畫面上顯示linear的色彩內容..讓我少一步轉SRGB的步驟罷了,效果上差別不大

那麼就自然是選擇HDR10格式與色彩空間了,這是最廣泛支援的HDR格式之一,還有用於影片的HDR+變種

HDR Meta資料
從前面metadata的連結可以看到,HDR10的meta資料如下:
typedef struct DXGI_HDR_METADATA_HDR10 {  
UINT16 RedPrimary[2];  
UINT16 GreenPrimary[2];  
UINT16 BluePrimary[2];  
UINT16 WhitePoint[2];  
UINT   MaxMasteringLuminance;  
UINT   MinMasteringLuminance;  
UINT16 MaxContentLightLevel;  
UINT16 MaxFrameAverageLightLevel;}
DXGI_HDR_METADATA_HDR10;
必須設定色彩空間的座標,以及螢幕最大最小的亮度、最大內容亮度、最大平均(數個幀)亮度

而HDR10所採用的色彩規範為Rec. 2020 (也稱BT2020),基於CIE 1931的一種規範
從圖表上來看,RGB要填入的數值約為(0.708, 0.292), (0.17, 0.797), (0.131, 0.046)
而白色座標則約為(0.3127, 0.3290),這是單行道沒什麼好說的
只是要注意D3D12必須乘上50000做轉換,而Vulkan只要維持在[0,1]即可

比較有問題的是剩下四個參數,要怎麼決定這些?我目前跟微軟範例一樣寫死1000,0.001,2000,500之類的,注意在設定luminance(單位nits)時都要乘上10000做轉換
而MaxCLL以及MaxFALL直接設定即可

這些參數原則上是要開放給使用者(玩家)設定的,因為每個螢幕的最佳值有所不同
然後玩家應該可以根據一些影片測試,從播放器中得知這些數據,再設定即可

結論
這樣,就又再學習另一個知識了~
那我會因此成為HDR派玩家嗎? 不!
截圖上看不出來,但是當我用公司螢幕開HDR時,畫面直接藍爆
眼睛 超! 不! 舒! 服! 我不知道是HDR一定會這樣還是這是LG螢幕的問題
如果要轉HDR派,我要多方面測試不同種螢幕才行!!
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=5798640
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

2喜歡★ltes50414 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:C++ - 謹慎實作vi... 後一篇:學習日: DirectM...

追蹤私訊切換新版閱覽

作品資料夾

ilove487奇幻小說連載中
《克蘇魯的黎明》0679.虛假看更多我要大聲說9小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】