Bpで制御しているスケルタルメッシュのlodについて

お世話になっております。

ブループリントで制御されているスケルタルメッシュのLOD設定について以下のような問題が起きているのですが、原因や解決方法をお教えいただけますでしょうか。

■前提情報:人間のキャラクターをBPで組んでおり、体のスケルタルメッシュの他に、手に持っているモノなど別パーツのスケルタルメッシュも構成されています。プレイすると、このBPキャラクターが表示され、移動などさせることが出来ます。

■起きている問題

・スケルタルメッシュのLODを体に入れているのですが、プレイしても、LODが反映されておりませんでした。

・その状態でr.SkeletalMeshLODRadiusScaleを掛けてみたり、r.ForceLODを試しましたが、変化はなく、LODが効いていない様でした。

※r.SkeletalMeshLODRadiusScaleでは、体スケルタルメッシュを直接レベルへ配置したモノは反応していました。

・体のスケルタルメッシュ単品でレベルへ配置してプレイしてみると、そのLODは機能していました。

・プレイした状態で show Boundsでバウンディングボックスを観てみましたが、極端に大きい、小さいは無いようでした。

以上となります。
テキストのみで恐縮ですが、よろしくお願い致します。

お世話になっております。
適用されているLODを視覚的に確認するため、コンソールコマンドの Showflag.LODColoration 1を実行しBlueprintのViewport上でLODの変化が見られるかご確認下さい。プレイ中で無い状態でもLODが適用されていないのであれば、設定の時点で問題があるかもしれません。

実際にLODを更新するのは USkinnedMeshComponent::UpdateLODStatus()で行われます。実際にLODが適用されているかどうかを確認される際にはここで想定されたLODへ更新しているかご確認頂くのがよろしいかと思います。このモジュールはSkeletalMeshのTickComponentで実行されるものであるためTickが有効な限りはLODの更新が適用されているかと思います。逆にTickが無効な場合は更新されない可能性が考えられます。

上記以外のケースでは、SkeletalMeshComponentのForceLodModelが0以上となっている場合は指定のLOD番号で強制されているケースや、SyncAttachParentLODが有効になっていることによって、体のSkeletalMeshComponentがAttachされているMeshにLODに従属してLODが強制されているケースなどが考えられます。
体のSkeletalMeshComponent単体でのLOD切替はうまくいっているようですので、まずは上記のLOD設定について一度ご確認頂ければと思います。
よろしくお願いします。

お世話になっております。

ご返答をいただきありがとうございます。

お教えいただいたコマンドを試しつつLODがどの段階で掛らないのかを調べたのですが、その過程で、BPの構成上、そうなることが解りました。

BPで人間のキャラクターを組む際に、頭やボディ等は別メッシュが、基の人間モデルと組み替えられるように作られていた為、この「組み替える側」のモデルはLODを作成し対応していたのですが、組み換え前の大元の人間の方にLODがなかった為、組み替える側のLODモデルを作っていても、反映されない、という感じでした。

大元のモデルにLODを付けた所、それと入れ替わる、ないしは武器の様にそのモデルに紐づけされるモデルのLODも、効くようになりました。

大元のモデルにLODが無くても、それに差し替わる形で紐づくモデルのLODが個別に機能する方法は無さそうに見受けられましたので、大元のLODモデルを入れる事で対応するしか無いかなと思いました。

よろしくお願い致します。

ご確認ありがとうございます。もしパーツが大元のモデルにアタッチされているものであれば、各パーツのSyncAttachParentLOD=falseに設定することで頭やボディ等などパーツ単独でLODを適用できるように思いますが、こちらは有効ではありませんでしたでしょうか。

お世話になっております。

SyncAttachParentLODに関しましては、「組み替える側(各パーツ)」のモデルに対して下図の様にSyncAttachParentLODのチェックを外しても

257721-キャフチャ.jpg

親モデルのLOD設定がの有無でのみLODに変化がおき、またLODが変わる距離なども依存してしまっており、SyncAttachParentLODのチェックの有る無しは、機能しているようには見えませんでした。

試しにFoced Lod Modelの値を-1にしても駄目でした。
Foced Lod Modelの値を2、などにすると、LODが反映されましたが、スクリーンサイズで動的に変化せず、恐らくは強制的にそのLODレベル固定になる、といった挙動でした。

よろしくお願い致します。

上記には記載しておりませんでしたが、キャラクターの大元のモデルに追従するためMasterPoseを使用されている場合は子のSkeletalMeshはMasterPoseで指定したSkeletalMeshComponentのLODに全て従属しますがMasterPoseをご利用でしょうか。その場合はForceLODで強制するか、 USkinnedMeshComponent::UpdateLODStatus()の以下の条件をご利用のケースに応じてマスクするかカスタマイズして頂く必要があります。

		// Match LOD of MasterPoseComponent if it exists.
		if (MasterPoseComponent.IsValid())
		{
			PredictedLODLevel = FMath::Clamp(MasterPoseComponent->PredictedLODLevel, 0, MaxLODIndex);
		}

お世話になっております。

なるほど!MasterPoseを使っています。なので従属しているというのは腑に落ちます。

条件毎にカスタムは可能ということで承知いたしました、情報ありがとうございます。

現時点では、とりあえず大元のモデルにLODを仕込み、従属関係にあるMeshはそのLOD距離や段階に依存してLODをする、でも問題が無さそうなので、もし個別対応が必要になりましたら、カスタマイズを検討したいと思います。

迅速にご回答をいただけて大変助かりました。

ありがとうございました。

状況一致していたようで良かったです、こちらこそ早速のご確認及びご連絡頂きありがとうございました。