LoginSignup
1
0

More than 3 years have passed since last update.

SkeletalMeshのLODバイアスを強制する

Last updated at Posted at 2019-07-28

この検証のゴール

以下のようなことをしたいので、実装可能なのかを検証します

  • ゲーム内の特定の場面では設定に関わらず、常に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

今回は一定のサイズ以下になると、マテリアルを変えて色が変わるようにしています
lod-screensize-preview.gif

SkeletalMeshを開き、「アセット詳細」の「Material Slots」で色変え用のマテリアルをセットして
image.png

LOD1で使用するマテリアルを指定することで動画のような動作をさせることが可能です。
image.png

変化する距離については、LODSettings側でScreenSizeを設定すれば準備完了です。
image.png

切り替え処理実装

とりあえず、レベル内にLODの設定を済ませたSkeletalMeshを雑に配置します
image.png

続いてレベルブループリントで以下のノードを作成します
SkinnedMeshごとに、どのLODを適用させるかを設定します
keybordの'1'でLOD1を、keybordの'2'でLOD2を設定します
image.png
SetForcedLODについては以下を参照
https://api.unrealengine.com/INT/BlueprintAPI/Components/SkinnedMesh/SetForcedLOD/index.html

結果

あとはゲームを開始してキーボードを押せば切り替えを確認できます
lod-manual-near-preview.gif

ちなみに一度SetForcedLODを行ったMeshについては、そのレベル内では常に設定したLODが適用されます。
LOD1を設定した後、どれだけカメラが離れて小さく映ろうがLOD1のままです。
lod-manual-far-preview.gif

SetForcedLevelのInNewForcedLODに0を渡すか、
レベルを読み込みなおすと状態がリセットされます。

LODがいくつ存在するかを返してくれるノードもあるので、
BPを少し修正すれば3Dモデルのビューワーなどを作成するときに利用できそうですね
https://docs.unrealengine.com/en-US/BlueprintAPI/Components/SkinnedMesh/GetNumLODs/index.html

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0