👋

Unity2023(URP)+Recorderを使用したアルファ付き動画の書き出し方法

2024/02/16に公開

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 より

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としてます)して以下のように書き換えます。

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差し替えが可能になります。

UniversalRendererData

書き出し用の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