1. 背景
- 筆者はここ最近、YouTube でのゲーム配信に関心を持っていた(※1)
- 筆者の自宅には HDR対応の TV と HDRに対応したゲーム機(PS4 Pro)があるため HDR のゲーム配信をしようと試みた
- しかし、筆者の環境だと PS4 Pro の HDR出力を YouTube で HDR配信することが不可能だと分かった
- 結局 SDRで配信することにしたが、自宅には HDR対応の TV があるので自宅では絶対に HDR でプレイしたかった
- そこで、自宅では HDRでプレイしつつ YouTube には SDRで配信する環境を作ることを考えた
※1 どういうツールを使用するのか、YouTube の管理画面はどうなっているのか、遅延はどのくらいか、といった内容に興味があった
2. 目的
3. おことわり
本記事の「HDR」は High-dynamic-range video を意味します。具体的には BT.2020色域、SMPTE ST2084 の HDR10信号を指します。ご了承下さい。
4. 結論
図1 の構成で目的を達成した。
具体的には OBS 上で HDR to SDR を行う Effect Filter を適用することで達成した。HDR to SDR 変換は以前に作成したものを少し改造して 3DLUT 化して使用した。
実際に配信を行った様子を以下に示す。
上記の動画が成果物だが、本動画のみでは HDR と SDR の差が分かりづらいため比較用の動画を作成した。 結果を以下に示す。四分割された動画のうち左下が今回作成した 3DLUT を適用したものである。なお本動画は HDRに対応した表示デバイスで意図通りに表示される。SDRの表示デバイスで見る場合は代わりに こちら を見て頂きたい。
5. 結論に至るまでの経緯
5.1. YouTube での HDRのライブ配信を試みた
一般家庭にある普通の機材で YouTube での HDRのライブ配信を行うには Mirillis Action! というソフトウェアを使用すれば良い[1]。 筆者は Mirillis Action! とHDMIキャプチャデバイス(4K60 S+)を購入し PS4 ゲームの HDR配信を試みた。
しかし、よく確認したところ Mirillis Action! が対応しているのは Windows上で動作する HDRのゲームの配信であり、HDMIでキャプチャした HDRのゲームの配信には対応していなかった。
ここで筆者のモチベーションはゼロになってしまい、1ヶ月以上放心状態となった(4k60 S+ が文鎮と化した)。
5.2. HDR to SDR 変換して SDRで配信する機会が発生した
筆者は3月下旬に技術系の勉強をする気力がゼロになってしまったため、1週間ほどゲームばかりプレイする生活をしていた。 その際、特に意味もなく YouTube で配信をしていたのだが、筆者はどうしてもゲームを HDR でプレイしたかった。そのため OBS で HDR の信号を BT.709 の信号として強引に解釈させ配信していた。その結果、配信画面は図2のようにコントラストの低い見た目になっていた。
しかし、こうした色異常が生じるのは制作者の方々に申し訳なかったため、OBS で HDR to SDR 変換を行って配信を行うことにした。HDR to SDR 変換には以下の記事で作成した 3DLUT を使用した。OBS に 3DLUT を適用する際は Effect Filters を使用した[2]。
5.3. HDR to SDR 変換 3DLUT の改良
前節で使用した 3DLUT には個人的に好ましくない特性があった。そこで改良を行うことにした。
以前に作成した BT.2446 + BT.2407 の HDR to SDR 変換をベースにトーンマッピングの特性のみ前節の 3DLUT の特性を利用することにした。 具体的には以下の記事で作成した HDR to SDR 変換について、 Tone mapping の数式のみ本記事の図3 に置き換えたものを作成した(図3の元ネタは この記事 を参照)。
5.4. OBS で HDRの信号を扱う際の注意点
これで HDR to SDR 変換する配信環境は完成かと思われたが、OBS上で 3DLUT の効果確認を行っていたところ想定外の色ズレが生じている事が分かった。 具体的には以下の図4に示す通り、OBS で 3DLUT を適用した場合は、特に赤色の輝度が上がる方向にズレることが分かった。
図4 OBS と DaVinci Resolve で同一の HDR10 ファイルに対して 3DLUT を適用した結果の比較 |
色々と調べていると、本症状は OBS が BT.2020色域の動画ファイルをサポートしていない<要出典>ことが原因だと分かった。 具体的には、BT.2020 の Matrix Coefficients の動画ファイルを開く際に BT.709 の Matrix Coefficients を適用してファイルを開いており、色ズレが生じていると推測している(※)。
※これは OBS側には何も問題は無く、サポート外の BT.2020色域のファイルを OBSで無理矢理開こうとした筆者に問題がある。
そこで、これを補正する 3x3 の Matrix を前節で作成した HDR to SDR の 3DLUT に組み込んだ(式の導出はメモを消失して書き直すのが面倒になったので省略します)。 3x3 の Matrix を組み込んだ 3DLUT を使用した場合の結果を図5 に示す。
図5 3x3 Matrix補正適用済みの 3DLUT を適用した結果の比較 |
若干、高輝度領域で差が生じているが、Color Checker の差異は無くなったので今回はOKとする(おそらく 3x3 の Matrix で補正しきれなかった領域だと思うのですが、面倒で解析していません。手抜きでスミマセン…)。
6. 作成した 3DLUT
誰も使わないと思いますが作成した 3DLUT を以下で公開しておきます。 再配布をしなければ自由に使って頂いて構いません(なお、何か問題が発生しても筆者は責任を取れませんのでご了承下さい)。
7. 改善点
配信動画を見ると、なんとなくコントラストが低く感じる
- ITU-R BT.1886 を参考に Gamma=2.4 のモニターをターゲットにしているのが悪いのかもしれない
- 明るい環境用に Gamma=2.2 ターゲットの 3DLUT も上記リンクに入れた。必要に応じて試して頂きたい
-
- 可能であれば HDR調整の結果を取得して それに適した Tone mapping を行いたい(無理だけど)
バレットのシーンを見ていて思ったが、暗部が潰れ気味な気がしている。
- 暗部の特性を改善する Tone mapping も試してみたい
- 本当は Piecewise Power Curves[3] を試したかったのだが今回は諸事情により断念した
8. 考察というか感想
我ながら意味不明な記事を書いてしまいました。ここまで読んで下さった方、ありがとうございます。
9. 参考資料
[1] YouTube Help, "Stream HDR video on YouTube", https://support.google.com/youtube/answer/10265272
[2] OBS Beginners Guide, "Color Grading using LUTs in OBS", https://streamshark.io/obs-guide/color-grading-lut
[3] "Piece-Wise Power Curves", https://www.desmos.com/calculator/12vlon6rpu