1. はじめに
研修でPinRescueの再現をする過程で、元アプリとの比較のためにUnityRecorderでアプリを撮影したのですが、
撮影した映像の色がGameViewで見える色とずれていました。
何とか解決させることが出来たため、解決法をまとめます。
2. 生じた問題
右がUnityのGame veiwの画像、左が.mp4形式で撮影した動画のキャプチャです。
よく見るとわかりますが、背景の色が微妙にずれています。
Game veiwの画像の背景色はrgb(236, 242, 227)、動画キャプチャの背景色はrgb(240, 244, 231)となり、
各値で2~4ほどのずれが生じていました。
今回の場合は比較的小さいですが、自分が制作していた時には各値10程度の大きなずれが生じたこともありました。
3. 原因
[非公式] Unite Tokyo 2019 Eve2 LT Fes" (2019/9/23) で登壇しました
こちらの記事の発表スライドP20に詳しくありました。
どうやら原因は色空間変換のようです。
UnityRecoder内ではビデオのエンコード時ににRGB - YUV 間の色空間変換が行われているようなのですが、その過程で計算がおかしくなってしまい、色味がずれるらしいです。
4. 解決法
(1).webmで書き出す
自分の場合はこの方法で解決しました。
おそらく書き出し形式を変えたことで色空間変換の計算法が変わったため、色のずれがなくなったと思われます。
ただ、ダビンチリゾルブではwebm形式を扱えないため、このサイト等で形式をmp4に変換する必要があります。
また上記記事には.webmでも問題が起こるとあったので、プロジェクト次第では解決法にならないかもしれません。
(2)連番画像として書き出す
おそらく映像を撮影するだけなら一番確実な方法です。
上記記事でも品質優先ならこの方法だと勧められています。
連番画像はダビンチリゾルブに取り込ませればそのまま映像になります。(参考)
ただし音声が入らないので、実務での使用は厳しいかもしれません。
5. 余談
今回自分は遭遇しませんでしたが、撮影した映像の光の見え方がおかしくなる場合もあるようです。
その場合はProject SettingのColor Space設定と出力フォーマットの組み合わせが悪いことが原因のようです(参考)