1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UnrealEngineのRuntimeでStaticMeshのScreenSizeを変更する

Posted at

UnrealEngineのRuntimeでStaticMeshのScreenSizeを動的に変更することができたので調査した内容をメモしておきます。

環境

UE5.3.2

RuntimeでScreenSizeを変えたい理由

DatasmithRuntimeを利用してRuntimeで3Dデータの表示を行っているのですが、Twinmotionのモデルを読み込むと木や人のモデルのLODがすぐに切り替わってしまって荒いモデルが見えてしまうので、動的にScreenSizeを変更する方法を調査していました。

以下の木のモデルだとLOD3のScreenSizeが0.421875という大きい値になっておりすぐにこのモデルが見えてしまいます。
2024-11-07_13h40_58 (1).png

ScreenSizeを変える方法

以下のサンプルコードのような形で変更できるみたいです。

void UMyUtils::SetLOD(UStaticMesh* Mesh)
{
	int32 NumLODs = Mesh->GetNumLODs();
	
	if (NumLODs >= 4) 
	{
#if WITH_EDITORONLY_DATA
        // StaicMeshEidotr用の変更
		Mesh->bAutoComputeLODScreenSize = false;
#endif

#if WITH_EDITOR
        // StaticMeshEditor用の変更
		Mesh->GetSourceModel(0).ScreenSize = 0.5;
		Mesh->GetSourceModel(1).ScreenSize = 0.1;
		Mesh->GetRenderData()->ScreenSize[2] = 0.05;
		Mesh->GetSourceModel(3).ScreenSize = 0.002;
#endif
		Mesh->GetRenderData()->ScreenSize[0] = 0.5;
		Mesh->GetRenderData()->ScreenSize[1] = 0.1;
		Mesh->GetRenderData()->ScreenSize[2] = 0.05;
		Mesh->GetRenderData()->ScreenSize[3] = 0.002;

		// 変更したStaticMeshに対してStaticMeshComponentへの描画の反映
		{
			FStaticMeshComponentRecreateRenderStateContext ReregisterContext(Mesh, false);
			Mesh->Modify();
		}
  }

StaticMeshEditorの変更だけだとUI上の値しか変更されないようで実際の動作には影響を及ぼさないみたいです。
StaticMeshのRenderDataに対してScreenSizeを変更して、StaticMeshComponentに描画の反映をする必要があるみたいです。

参照したコード

StaticMeshEditorのScreenSizeを変更した際の処理を参照しました。

1
1
2

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?