とあるハッカソンで画像出力を実装したかったので調査のついでに記事を書いたり
はじめに
UE4.13でExportTexture2D / ExportRenderTargetノードが追加されました。
この機能を使うことで、ゲーム中にSceneCapture2Dでキャプチャした結果を出力できたりします。スクリーンショット機能自体は既に標準で用意されていますが、画面上の絵とは別の絵(例えばゲーム中のキャラクタが取った写真)を出力したい場合はこの機能が有用です。(ちなみに標準のスクリーンショット機能については以下の記事で解説してます)
pafuhana1213.hatenablog.com
出力自体はかんたんなのですが、問題はノードの引数にあるFile Pathです。
※ 2017/07/08/1:30 追記
ExportRenderTargetで出力されるファイルは.hdr形式です。その為、標準のビューワーではおそらく開けません。UE4上のコードで一般的な画像に変換できないか、分かり次第追加します
FilePathの指定内容による出力先の変化
FilePathにパスを指定した場合
D:\TEST\test.hdr
(指定したパスにフォルダが無い場合はフォルダが自動生成される)
これはこれで便利なのですが…大抵の方は、そのプロジェクトやパッケージ内の指定フォルダに出力させたいかと思います。
プロジェクト / パッケージの特定のフォルダに出力するには
FPathsクラスで用意されている関数を使うことで、そのフォルダのパスを取得することができます。
FPaths | Unreal Engine API Reference
Packaged Game Paths, Obtain Directories Based on Executable Location - Epic Wiki
残念ながらBPからこれらの関数を使うことが出来ないため、C++コードを書く必要があります。例えばこんな感じ。
h
#pragma once #include "CoreMinimal.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "OkazuBlueprintFunctionLibrary.generated.h" UCLASS() class GIRLFRIENDX_API UOkazuBlueprintFunctionLibrary : public UBlueprintFunctionLibrary { GENERATED_BODY() UFUNCTION(BlueprintCallable) static FString GetGameSavedDir(); };
cpp
#include "OkazuBlueprintFunctionLibrary.h" #include "Misc/Paths.h" FString UOkazuBlueprintFunctionLibrary::GetGameSavedDir() { return FPaths::GameSavedDir(); }
この例だと、プロジェクトのSaveフォルダにRenderTargetが出力されます。