この検証のゴール
以下のようなことをしたいので、実装可能なのかを検証します
- ゲーム内の特定の場面では設定に関わらず、常にLOD1を使う
- デバッグ機能として、LODモデルをプレビューできるようにする
環境
- UE4.22
- Windows 10
LODを作る際に以下のアセットを利用しています
https://www.unrealengine.com/marketplace/ja/slug/ue4-mannequin-mobile
(マネキン欲しさにスターターパックを入れるのは何となくいやだったので)
LODの設定
基本的な設定手順についてはUE4のドキュメントを参考にしています
https://api.unrealengine.com/JPN/Engine/Content/Types/StaticMeshes/HowTo/LODs/index.html
https://api.unrealengine.com/JPN/Engine/Content/Types/SkeletalMeshes/PerPlatformLOD/index.html
今回は一定のサイズ以下になると、マテリアルを変えて色が変わるようにしています
SkeletalMeshを開き、「アセット詳細」の「Material Slots」で色変え用のマテリアルをセットして
LOD1で使用するマテリアルを指定することで動画のような動作をさせることが可能です。
変化する距離については、LODSettings側でScreenSizeを設定すれば準備完了です。
切り替え処理実装
とりあえず、レベル内にLODの設定を済ませたSkeletalMeshを雑に配置します
続いてレベルブループリントで以下のノードを作成します
SkinnedMeshごとに、どのLODを適用させるかを設定します
keybordの'1'でLOD1を、keybordの'2'でLOD2を設定します
SetForcedLODについては以下を参照
https://api.unrealengine.com/INT/BlueprintAPI/Components/SkinnedMesh/SetForcedLOD/index.html
結果
あとはゲームを開始してキーボードを押せば切り替えを確認できます
ちなみに一度SetForcedLODを行ったMeshについては、そのレベル内では常に設定したLODが適用されます。
LOD1を設定した後、どれだけカメラが離れて小さく映ろうがLOD1のままです。
SetForcedLevelのInNewForcedLODに0を渡すか、
レベルを読み込みなおすと状態がリセットされます。
LODがいくつ存在するかを返してくれるノードもあるので、
BPを少し修正すれば3Dモデルのビューワーなどを作成するときに利用できそうですね
https://docs.unrealengine.com/en-US/BlueprintAPI/Components/SkinnedMesh/GetNumLODs/index.html