Unreal EngineとDaVinci Resolve(無料版)でHDR動画を作る

## 概要

前回の続きです。

https://qiita.com/yorung/items/a6603d17627cd5d8a21c

前回Unreal EngineからDaVinci Resolveに動画を渡す際OpenEXR形式を使用しました。OpenEXRはダイナミックレンジを保持しているのでDaVinci Resolveから出力を工夫すればHDR動画が作れるはずと思い、試してみました。

https://vimeo.com/950463920

バージョンはUnreal Engine 5.4, DaVinci Resolveは19 Preview 3(無料版)を使用しています。

目指す成果はVimeoやYouTubeに動画をアップロードした状態であり、HDR対応モニタでSDRでは表示できない高輝度情報もしくはsRGB外の色域の色を表示することとします。

以下手法は何か間違っている可能性があります。後述しますが、現状HDR動画を制作することは敷居が高く、何をもって正しいとするか判断が困難を極めました。しかし、結果的に明暗差をもたせた動画を作る手法が確立出来たのでまとめることにします。


## DaVinci Resolve 19のWindowsにおけるHDR表示対応について

DaVinci Resolveはバージョン19のPreview3からWindows上でのHDR表示に対応しました。これで、専用ハードウェアなしで編集画面でHDR動画の色を確認できるようになりました。

Preferencesを開き、以下２個所をチェックします。
* Use 10 bit precision in viewers if available
* Use Windows display color management and HDR for viewers
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/5250b1f1-37fa-8954-b723-21303747318c.png)



## タイムラインにHDRの設定をする

新しいタイムラインを作り、以下のように設定します
* Color scienceをDaVinci YRGB Color Managedに
* Color processing modeをHDRに
* Output color spaceをHDR HLGに

これらはプロジェクト設定でも同様のことができますが、タイムラインに設定することでSDRとHDRのタイムラインを同一プロジェクト内に共存するなどが可能であったので、そうしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/8e4d6336-0de0-e112-32f2-caf8c7ff4faf.png)


## クリップにInput Color Spaceの設定

各クリップごとにACEScgである旨を指定する必要があります。
Input Color SpaceにACEScgを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/bcac4b30-e3cc-6c20-9318-c02c42b441f4.png)


## カット毎のカラーグレーディング

Colorタブで、以下のようなACES Transformノードを作って通します。
* ACES Version は ACES 1.3 に
* Input Transform は ACEScg - CSC に
* Output Transform は Rec.2020 HLG (1000 nits)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/f44f76fa-62e1-73f5-36ff-0872f677d19a.png)

全体のノード構成は以下の通りです。最後のノードがACES Transformで、その他は Offset, Gain, Gamma等でカラーグレーディングを行っています。基本的にはUnreal Engineで作った色を正として制作しましたが、シーンによりSDRとHDRで印象が異なる場合があり、その場合は調整しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/5e577050-b346-0f4a-58cb-a070afe3b472.png)

Deliveryの設定は以下のようにします。
* Format は QuickTime に
* Codec は DNxHR に
* Type は DNxHR HQX 10-bit に

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66160/a99beab2-9405-850c-b6fe-8af3c9c6374a.png)


## 動画サイトへのアップロード

これで、VimeoやYouTubeにアップロード可能なHDR動画ができました。
残念ながらWindows上では動画ファイルを直接再生できませんでした（AVdhフォーマット対応のコーデックが無いと表示される）。しかし、VimeoやYouTubeにアップロードするとWindowsから視聴可能でした。

両サイトとも、動画アップロード完了からHDR動画視聴可能になるまで数十分から数時間かかるようです。時間に余裕を持ち、気長に待ちましょう。HDR動画の前にSDR動画が先に変換が完了するようで、やっと視聴できるようになったと思ったらHDRではなくSDRだった、ということがよくありました。


## HDR動画作成の敷居の高さについて

Unreal EngineでHDR動画を作ってみることがモチベーションであり、ひとまず達成しました。

しかし、以下の課題が未解決です。

* HDR PGとHDR HLGはどちらを選択すべきか（最終的に成果物と視聴体験にどう影響するのかわからない意味において）
* ACES TransformでACEScgからRec.2020 HLG(1000nits)に変換するのは正しいか
* ブラウザ、OS、モニタ、動画サイト毎の挙動の違い
* 有料版 DaVinci Resolve Studioを使うべきなのか
* そもそもsRGB以外の色空間に関する知識が乏しい
* 情報へのリーチしにくさ

　
現状気づいたこと 2024/05/28時点
* FireFoxはHDR動画を再生できない
* 同じ動画でもVimeoがYouTubeより明るく表示される
* DNxHR HQX 10-bitではなくDNxHR HQX 12-bitにするとVimeoで暗く表示される

ゲームと実写動画ではそれぞれHDR対応が進んでいる現状、もう少し取り組みやすい環境が出来ていても良い気がします。よりHDRモニタ等が普及し、対応ソフトウェアや情報が増えてくるとこなれてくるのかもしれません。