サークル獏の佐藤敏 Unityとか備忘録

サークル獏の佐藤敏がUnityとかで知ったTipsを書いておく備忘録です。

Unityで静止画像のアレコレ&背景透過でキャプチャしたいのに色がついてしまう場合

なぜわざわざUnityで静止画を

最近のUnityは3Dキャラをレンダリングして出力するツールとしても悪くない。もちろん普通のことをするだけなら既存のDCCツールのほうが優れているのだろうが、

  • 無料
  • 情報が多い
  • アセットが多い
  • トゥーンシェーダーが充実してきている
  • 元々ゲームエンジンなのでスクリプトで複雑な動作をさせるのがラク
  • ゲーム用に作った動きのコードを流用できる

あたりが魅力的な場合は十分選択肢に入る。
特にトゥーンシェーダーの情報が充実してきているのが大きく、これで静止画像を生成するためにUnityを始めても惜しくない状況まで来ているように思う。
 
 

静止画は透明が欲しい

で、動画を撮る場合は背景までしっかりレンダリングしたものをRecorderあたりのアセットを使って録画することになるだろう。
一方、静止画の場合は背景が透明なほうが使いやすいことも多い。
どうせUnityで作るなら動画にすればいいのでは? なんでわざわざ2Dの静止画を? という意見もあるだろうが、

  • 2D画像にしてしまえば従来の吉里吉里などのゲームエンジンでも活用可能
  • Unity2Dなどで比較的軽めのゲームを作るときに活用することもできる
  • Unityのシェーダーでは綺麗に出しにくいクッキリした落ち影などを後で描き加えてしまうことも可能

なんてメリットがある。
 
qiita.com
で、透明でもスクショを撮れる、というとこうしたコードを参考にさせて頂くのが良い感じである。
こちらはMaciOSでおかしくなることの問題を説明されているのだが、とりあえずWindowsでやる限りは最初のほうのコードでも問題がなかった。
保存するファイル名をtest.pngではなく、System.DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".png"とかにすれば使い勝手も良い。
 
 

背景が透明にならない

ところが背景が透明にならないという別の問題が生じてしまった。
これはPostProcessingStackを付けたままだったからで、PostProcessingStackを切り、カメラのClearFlagsをSolidColorの「0,0,0,0(完全透明)」にすれば上手くいった。

f:id:VinSatoo:20180812200626p:plain
Unityでレンダリングした二次画像をテキトーな背景と合成したもの。PostProcessingは切ってある。縮小した以外は特に加工なし
 

PostProcessingStackの代わり

PostProcessingStackが掛からないぶんについては、PhotoShopなどで処理すればいいだろう。

dic.pixiv.net
一番使うであろうブルームについては、ディフュージョンとかとかでググれば色々出てくる。
アンチエイリアスは、大きめにレンダリングして最後にPhotoShopから書き出すとき小さめに縮小すれば割と問題なくなる。

AO影がないのは寂しいが、Unity上でキャラの動きの完全に動きを切れば、PostProcessingStackのDebugViewsを使ってAO影だけぬきだし、PhotoShop上で合成などということも可能だ。
f:id:VinSatoo:20180812195754p:plain
(※PostProcessingStack v2だとどうなるか分からない。。。)