Unity2023(URP)+Recorderを使用したアルファ付き動画の書き出し方法
URP(Universal Render Pipeline)前提のお話です。
Unity2023+Recorderを使用した際、アルファ付き動画の書き出し方法についてのメモです。
Recorderの改造
Unity2023をインストールすると自動的にRecorder5.0.0がインストールされていると思います。
RecorderのPackageファイルをLibraryに移動してPackageを編集できるようにします。
MovieRecorderEditor.csの書き換え
Recorder5.0.0時点ではURPではアルファの書き出しの対応がされていないようです。
この部分を以下のように編集して、まずはEditor上からアルファの書き出し設定が出来るようにします。
Recorder/Editor/Sources/Recorders/MovieRecorder/MovieRecorderEditor.cs より
// Before
//if(!UnityHelpers.UsingURP() && mrs.ImageInputSettings.SupportsTransparent && mrs.EncoderSettings.CanCaptureAlpha)
// After
if(mrs.ImageInputSettings.SupportsTransparent && mrs.EncoderSettings.CanCaptureAlpha)
これでRecorderのWindowにIgnore Alphaの項目が表示されたかと思います。
UberPostの改造
Unity既存のUberPost.shaderは透過情報を保持していないので、元のUberPost.shaderをプロジェクトにコピー(UberPostAlpha.shaderとしてます)して以下のように書き換えます。
half alpha = SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_LinearClamp, uvDistorted).w;
return half4(color, alpha);
これで透過情報が書き込まれるようになります。
UniversalRendererDataの設定
次に先ほど改造したUberPostをUniversalRendererDataのUberPostPSに設定をします。
UberPostPSを差し替えるには、以下のファイルをEditorに入れて使ってください。
ExtendedScriptableObjectDrawer.cs
これにより、UberPostPSのShader差し替えが可能になります。
書き出し用のRenderTextureの設定
書き出し用のRenderTextureを作成して、透過情報を書き込めるようにFormatを調整してください。
Cameraの設定
レンダリングしたいCameraのComponentを選択して以下の設定を行ってください。
項目 | 設定 |
---|---|
Background Type | Solid Color |
Background | R:0 G:0 B:0 A:0 |
RenderTextureの適用
CameranoOutput Textureに先ほど設定した書き出し用のRenderTextureを設定します
RecorderWindowの設定
Inputの設定
InputのSourceを「Render Texture Asset」に設定してください。
Render Textureの項目が表示されると思いますので、書き出し用のRenderTextureを設定します。
Output Formatの設定
こちらはCodec format的に透過情報が書き込めるフォーマットであれば大丈夫だと思います。
実際に動画を撮ってみる
実装にUnityのRecorderを使用して動画を書き出してみました。
撮った時の状況
OBSで透過確認している時の状況
背景に見やすいように赤一色にしています
応用してみる
UberPostAlpha.shaderの透過情報を書き換えればBloomなどを透過情報に書き込むことが可能です。
色々なやり方があると思いますので、試してみてください。
Discussion