#ChannelPlayer · Unity · VRソフト

動画の自動露出

色の設定がおかしく感じる動画は、手動でちょっと設定すれば良いのだが、写真を表示するアプリでは自動補正をかけると暗い画面が明るくなったり、明るい画面がちょうど良い感じになったりできるのだから、動画でも出来ても良いのではと、ネットをあちこち検索してみた。

そうすると、Unity Asset Storeにてちょうど良さそうなのがあったので導入してみた。

Auto Exposure Mobile Color Grading | Fullscreen & Camera Effects | Unity Asset Store https://assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/auto-exposure-mobile-color-grading-107079

これはカメラ側にShaderを実装して、その場で変換をかけるようなもの。Asset Storeでの写真へのリンクを示すが、いい感じになるなとは思う。Channel Playerに持ち込む際、Unity 2018から2019に上げる必要があり、そちらの手間がかかり、やっとbuildできるようになったが、取り付けただけで動作は確認できていない。

並行して、色補正は出力側のShaderに実装しているので、カメラ側のShaderで求めたパラメータを、出力側のShaderにどう渡そうかと調査検討中。フラグメントシェーダーやバーテックスシェーダーから値を取り出すのは、GetFloat()などで良いのかと思うが、意外と使っているShaderは見つからない。コンピュートシェーダーなら演算結果を取り出すのは当たり前なんだけれども、とりあえずIndie Visual Lab のUnity Graphics ProgrammingのVol.1と、ソースなどを眺めている。

2022-11-09 追記
さらに調べてみると、Auto ExposureやColor Gradingは、UnityのPost Processing Stack v2にあるので、普通はこちらを使うらしい。もっともVRアプリでは重いので使わないのが一般的のようだが、必要なShader modelを調べるとAuto ExposureはShader model 5, Color Gradingは、Shader Model 3なので、Quest2でも、OpenGL ES 3.1+AEPなら、Shader Model 5なので一応使えることになる。

現在は、Channel PlayerのSteamVR版にて、HDR(High Dynamic Rangeレンダリング)を有効にして、かつ少しでも軽くするために、Stereo Rendering Modeを Multi Passから、Single Passに変更して、VR動画再生時にAuto ExposureとColor Gradingのオンオフ出来ることを確認した。

現在は、Post Processing Stackを導入すると、左右のカメラの前に、矩形で再生中の動画のミラー映像が表示されるようになったため、左右のカメラを廃止する方向で検討中。

左右カメラの存在は、VR動画再生中に動画の前にオブジェクトを配置すると左右の目からはブレて表示されるので、それを避けるために、左右のカメラを導入して、キャプションやダイアログウィンドウ表示を左右のどちらか片方に表示するようにしていたのだが、左右カメラを廃止して、その代わり、他の動画アプリ同様 3D表示オフモードを用意することになる。

3D表示オフモードを用意するには、AVProVideoのユーザーサポート掲示板によれば、AVProVideo AssetのVer1の頃には存在したForceEye Modeを、Ver2版にポーティングすることになる。実際、AVProVideo Asset Ver2でも、AVProVideo.cgincにコードは存在するのだが、使っているShaderによっては実装されていないので、自前で改造することになる。

広告