現在、UMG上でゲーム全体の地図を表示したいと考えております。
地図上では以下の画像のように、進入したことのある部屋の表示を切り替えたいです。
部屋一マス単位では、壁の組み合わせなどで20~30種類程度の画像パターンを想定しています。
その方法として、複数のマスのパターンを持つテクスチャをFlipBookノードで切り出し、そのマテリアルインスタンスを
UMG上で並べるという方法を試してみました。
全体としては半透明の表示を行っております。
ですが、この方法ですとImageが大量に並んでしまいマップ全体を表示した際にGPUに大きな負荷がかかってしまいます。
(2500個程度並べた際 60.0FPS → 8.0FPS InclusiveAvg 4.57ms → 20.36ms)
そのため、現在UMG上でマップチップを軽い処理で実現できる方法を探しております。
1枚のImageを分割し、UVを動的に編集したり
複数のImageを一回の描画でまとめて行うことなどはできないでしょうか。
もし、さらに別の手段で実現できるなどあればご教示いただけると幸いです。
以上です、どうぞよろしくお願いいたします。
takanyan7
(takanyan7)
2
CanvasRenderTarget2DのBPクラスを作り、
イベントEventReceiveUpdateから
以下の命令で
Canvas | Unreal Engine Documentation
線や箱、マテリアル内容でDRAW命令がかけます。
その後、何らかのブループリントで
CreateCanvasRenderTarget2Dでテクスチャを作り上記をクラス指定、
UMGのDynamicマテリアルを取得、テクスチャパラメーターに流し込み
UpdateResourceで変更時だけ描画すると軽くはなるかなと思います。
(一応上記の方法で自分も描画はできたのですが、
解説が見つからないので、調べづらいのですが・・・。
takanyan7
(takanyan7)
3
スイマセン書き忘れましたが、上記の方法は、
1枚のテクスチャにマップまとめてDrawで描画し、
そのテクスチャをUMGに張り、描画する方法です。
この方法でも毎フレームDrawする場合、
重くなってしまう可能性もあるので、
もう一枚Canvasを用意し、そちらで、
進入切り替え用のマスクだけを作り、
Draw回数を減らしたほうがいいかもしれません。
教えていただいた処理に関して実装・テストしてみたところ
大きく処理負荷を軽減できました、ありがとうございます!
また、何かありましたらよろしくお願いいたします。