4.13のレンダーターゲットへのブループリント描画
4.13の新機能、テクスチャのUV座標を取得と、レンダーターゲットへのブループリント描画を触っておく
テクスチャのUV座標取得
関数FindCollisionUVがそれ、実装はGameplayStatic.cppにある
エンジン設定でbSupportUVFromHitResultsを有効にすると使えるようになる、これを有効にするとメモリ負荷が増える
Linetrace結果のHit構造体を引数にとって、Hit先のコリジョンを取得し、HitPointのUV座標を計算する
ノードはこんなかんじ、UVChannelは設定を特にいじってなければ0が通常のテクスチャUV、1はライトマップ用になっているはず
参考
UBodySetup | Unreal Engine API Reference
レンダーターゲットへのブループリント描画
レンダーターゲットはそもそも何かで、今までのバージョンでは、例えば監視カメラがあったとして、それが写している映像をマップ内のモニタに表示させたい、みたいなときに(のみ)使用されていたリアルタイム生成テクスチャ、のような感じであった
今回のアップデートで追加されたこの機能は、カメラの映像を反映させるだけでなく、ユーザー側から結構自由にレンダーターゲットをいじれるようになる機能で、上記のUV座標取得と組み合わせることで、例えば板ポリに直接お絵かきとか可能になる
レンダーターゲット描写の関数は色々あり、順に確認する
DrawMaterialToRenderTarget
指定したレンダーターゲットに指定したマテリアルを描写する
マテリアルのemissiveとOpacityアウトプットのみが描写されるので、それ用に作る
また内部的にはCanvasを利用してるので、UI用マテリアルでも動く
この関数ではただマテリアルを転写して終わりなので、色々やるようの方を確認する
BeginDrawCanvasToRenderTarget / EndDrawCanvasToRenderTarget
BeginDrawCanvasToRenderTargetでは、レンダーターゲットのサイズのCanvasを生成する、そのCanvasに対し、Canvas描写系の関数を実行し、EndDrawCanvasToRenderTargetでCanvasをレンダーターゲットに反映するという流れ
このときに、上記のUV座標取得と組み合わせることで、任意の位置への描写が可能になる
どれも実装はKismetRenderingLibrary.cppにある
参考
UCanvas | Unreal Engine API Reference
Time値を渡してやると色々できそう、機能紹介の波紋のノードの解説あるのかな
例えばTimeを使いたいとき、TextureRenderTargetのHDRのチェックを外していると、1以上の値が切り捨てられているので動かなくなる、逆に通常の範囲内での使用ならこのチェックは外していい