🧙

【Unity Recorder】背景透過(エフェクトあり)でキャプチャ書き出しする

2023/06/17に公開

◯概要

Unity Recorderで背景を透過させて、キャプチャできるようなのですが、
エフェクト(パーティクル)ありの状態でPNG(EXR)連番書き出しする場合若干はまったのでメモしておきます。

映像制作のときなどいつか役に立つかもしれないです。

◯環境

・Unity 2021.3.22f1
・Universal RP(URP) ver.12.1.10
・Unity Recorder ver.3.0.3
(※バージョン、環境によってUIが異なることがあるので、コメント頂けると他の方が助かるかもです…)

◯流れ

1.背景透過でキャプチャしたいシーンを用意
2.Unity Recorderを入れる
3.カメラの設定
4.Unity Recorderの設定(PNG(EXR))
5.キャプチャ

▼(応用)レイヤーを分けて任意のオブジェクトだけレコーディグする方法
▼うまく背景透過できない場合の確認ポイントまとめ

◯手順

▼1.背景透過でキャプチャしたいシーンを用意

まず、確認用に簡単なシーンを作成していきます。

・Fileメニュー>New Scene>Standard(URP)を選択してCreate
 → 適当な名前で保存

・後でレイヤーわけなども試したいので以下のようにオブジェクトを作成しておきます。
 Plane
 GameObject
  └Sphere
  └Particle System

Tips カメラをシーンビューの位置に移動する方法

▼2.Unity Recorderを入れる

今回の一連の基本の流れはGoogleで「unity alpha recording」と検索して上に出てきた記事と動画がとてもわかりやすかったです!(とてもありがたいm(__)m)
↓(参考)アルファ付き動画で書き出している例 基本この記事を参考にすすめていきます。
https://netsis.jp/unity/unity-alpha-movie/

最初に上記記事の「アセットのインストール」を参考にUnity Recorderを入れておきましょう。

ーーーー
以降の解説では今回連番PNG(EXR)で書き出したかったのでその設定方法と、
主にパーティクル周りでやってみてうまくいかずはまったポイントを補足でメモしておきます。

▼3.カメラの設定

詳細は先述記事の「カメラの設定を行う」で確認していただければと。

▼4.Unity Recorderの設定(PNG(EXR))

詳細は先述記事の「カメラの設定を行う」で確認していただければと。

PNG(EXR)の設定は以下の通りです。

▼5.キャプチャ

「START RECORDING」をクリックしてキャプチャスタート、

「STOP RECORDING」をクリックしてストップ。
キャプチャされました!

Tips Windowsフォトの場合は、「画像の編集」をクリックすると透過状態がわかりやすいと思います。

◯(応用)レイヤーを分けて任意のオブジェクトだけレコーディグする方法

↓(参考)レイヤーとタグを分けてレコーディングしている例 欲しいパーツだけ抜き出す際の参考
https://www.youtube.com/watch?v=iXd8bsxQgm4

上記でおおよそわかるのですが、UIが違って設定手順が一部省略されていてはまったのでメモ。

▼1.レイヤーの設定

まず、書き出したいオブジェクトにレイヤーを指定する必要があります。

今回は初めに以下のようにオブジェクトを用意したので、GameObjectのまとまりにレイヤーを設定してみましょう!
(床、背景オブジェクトなしで、キャラやエフェクトだけ書き出したい状況を想定しています。)
 Plane
 GameObject(AlphaRecordレイヤーに設定する)
  └Sphere
  └Particle System

ーーーーー
GameObjectを選択してInspector右上の「Layer>Add Layer...」をクリック。

するとたくさんLayerが設定できるウィンドウが表示されるたので、

とりあえずUser Layerの空いている部分に今回使いたい「AlphaRecord」のレイヤーを指定しました。
(これで良いか普段使わずよくわからないので、推奨あればコメントで教えてください…m(__; )m)

もう一度GameObjectを選択するとLayer内にさっき追加した「AlphaRecord」があるのでこれを選択します。

なんか表示されました…。
ちょっと怖いですが、GameObjectの子供たちのLayerも「AlphaRecord」に変える?と聞かれているので、落ち着いて「Yes, change children」をクリックしましょう。

これでレイヤーわけができました!

▼2.カメラで撮影するレイヤーを選択する

カメラのCulling Maskでレイヤーを選択するとそのレイヤーだけを描画できるようです。

▼3.キャプチャする

これでキャプチャしてみましょう!
床が消えて、球とパーティクルのみが背景透過状態でキャプチャされました。

◯うまく背景透過できない場合の確認ポイントまとめ

色々試してみて、
主にパーティクルを使う上でうまくいかなかったポイントを以下にメモしておきます。
(忘れそうなので…。)

▼「Background」の色のアルファが0になっていない

すごく初歩的かもしれませんが、最初これに気付かず30分くらいはまりました。

☆対処法

「Background」の色のアルファが0にする

▼「Post Processing:オフ」になっていない

カメラの「Post Processing:オン」だと全面表示された状態でキャプチャされてしまうようです…。
これも全然気付きませんでした。

☆対処法

「Post Processing:オフ」

▼Additiveマテリアルでテクスチャ黒部分が透過に見えているだけ

特にAdditiveのマテリアルで気付きづらいんですが、どうやらアルファ処理していないテクスチャを使用する(もしくはマスクをかけない)場合には、キャプチャ結果は透過されないようです。

ーーーー
・検証
パーティクルシステムに適当なAdditiveマテリアルを試しにあててみました。
シーンビューやゲームビューの表示的には、透過されていそうですが、試しにこれでキャプチャしてみましょうか。

マテリアル設定

シェーダー:Universal Render Pipeline/Particles/Unlit
・Transparent(半透明)
・Additive(加算)

Emissionに白黒テクスチャ(アルファチャンネルなし)

キャプチャ結果です…。
どうやらパーティクルの部分だけ透過されていないようです…。

おそらく、Additiveの場合テクスチャの黒部分は背景と色を加算しても0足しなので透過しているように見えますが、
透過書き出しの際には、透過情報はないのでビルボードの形がそのまま出ているんですね。

☆対処法

対処法としては、
 ・「透過処理をしたテクスチャを入れてあげる」
 (・「シェーダーのマスク機能でアルファ情報としてちゃんと消し込んであげる」)
などですかね

この辺は使用しているシェーダーの機能にもよりますが、共通するのは「ちゃんとアルファ情報としても消込みましょう」ということになるんだと思います。

おわりに

<ポイント>
・UnityRecorderの「Source:Texture Sampling」
・カメラ「Backgroundの色のアルファ0
・カメラ「Post Processing:オフ」
・パーティクルは、マテリアルでアルファを消し込み(テクスチャorマスク)
↑今回試した限りだとこの設定でエフェクト込みでもうまくいきそうでした。

実際に僕が使うときが来るかはわかりませんが、
せっかく検証してみたので備忘録がてらメモしてみました!
映像系に合成するのにはとても使えそうなテクニックですね!

ーーー
検証とかしたことも普段使わないものだと少しすると
「あれどうやるんだっけ」とすぐ忘れてしまいますね。
ほんと3日後の自分は他人だと思っているので
ちゃんと調べて試してみたときにざっくりでもちらほら備忘録まとめておこうと思います…笑(_ _ ;)

Discussion