UE4.25.4のEditor上のBlueprintでSceneCaptureComponentで撮影した画像をテクスチャアセットとして保存してみたのでそのやり方をメモしておきます。
以下のような512x512のテクスチャを自動で生成していきます。
背景部分は透明になるようにしています。
撮影用のアクタ
以下のような撮影用のアクタを作成し、マップに配置しています。
- StaticMesh:撮影対象
- CaptureImageComponent2D:イメージの撮影用SceneCaptureComponent2D
- CaptureDepthComponent2D:ScneneDepth撮影用(デプスによって背景を透明にする)のSceneCaptureComponent2D
アルファ値を取得する別の方法
以下のような方法もあるみたいです。
デプスじゃなくてこちらを利用してもいいかもです。
[UE4]アルファ付きキャプチャー画像の簡単作成|株式会社ヒストリア
RenderTargetの設定
撮影用アクタのBeginPlayで以下のようにRenderTargetを設定しています。
TargetGammaを2.2にしているのは以下の記事を参照しています。
[UE4]インゲーム画像キャプチャに便利なノード「Export to Disk」の紹介|株式会社ヒストリア
デプス用のRenderTargetについて
最初RGBA8にしていたらRにちゃんと値が入っていませんでした。
RGBA32fで正常にデプスが取得できました。
背景を透明にする用のマテリアル
イメージとデプスのテクスチャから背景が透明なテクスチャをDrawMaterialtoRenderTargetで生成するための以下のマテリアルを作成します。
撮影処理
撮影アクタでの撮影処理のBlueprintは以下のようになります。
StaticMeshを良い感じに設定してこの撮影処理を実行していきます。
DrawMateriltoRenderTargetでのアルファ値
DrawMaterialtoRenderTargetについては以下を参照
ブループリントおよびレンダー ターゲットでテクスチャを作成する方法 | Unreal Engine Documentation
DrawMaterialtoRenderTargetを何の気なしに使うとアルファ値を正しく使ってくれずにすべて透明になったりしました。
下記のサイトを参照して以下のようにしています。
- 使用するマテリアルのBlendModeはAlphaCompositeにする
- Opacityは通常と反転させて扱う(1が透明、0が不透明)
- 事前にRenderTargetは(0, 0, 0, 1)でクリアする
Draw Material To Render Target node has inverted alpha - UE4 AnswerHub
RenderTargetCreateStaticTextureEditorOnlyについて
RenderTargetアセットを右クリックしてCreateStaticTextureをするようなことができます。
作成したアセットはSaveしておかないとEditorを再起動すると消えてしまうようです(何回かやらかした)。
NameをIcons/TextureなどとするとContentフォルダ以下にIconsフォルダが作られTextureアセットが中に生成されました。
名前のみだとBlueprintと同じ階層にアセットが生成されるようでした。
すでにアセットが存在するとプレフィックスがついてインクリメントされていきます。