[UE4] LOD를 시각화하는 명령
13180 단어 위 4UnrealEngineUnrealEngine4
1. 개요
LOD를 확인하는 콘솔 명령을 소개합니다.
디버그나 LOD의 각 파라미터의 조정시 등에 유용합니다.
2. 명령
2.1. a.VisualizeLODs 1
LOD에 현재 어떤 값이 적용되는지 확인할 수 있는 콘솔 명령입니다.
・본수, 정점수도 확인할 수 있어 Shipping/Test 이외의 빌드로 유효
・SkinnedMeshComponent를 계승한 Component에게만 시각화가 가능
・표시색은 아래와 같이 소스상에 하드코드로 정의
LOD
Color
LOD0
화이트
LOD1
그린
LOD2
Yellow
LOD3
레드
기타
Purple
다음 위치에서 구현됩니다.
SkinnedMeshComponent.cpp
bool USkinnedMeshComponent::UpdateLODStatus_Internal(int32 InMasterPoseComponentPredictedLODLevel)
{
//...
if (CVarAnimVisualizeLODs.GetValueOnAnyThread() != 0)
{
// Reduce to visible animated, non SyncAttachParentLOD to reduce clutter.
if (SkeletalMesh && MeshObject && bRecentlyRendered)
{
const bool bHasValidSyncAttachParent = bSyncAttachParentLOD && GetAttachParent() && GetAttachParent()->IsA(USkinnedMeshComponent::StaticClass());
if (!bHasValidSyncAttachParent)
{
const float ScreenSize = FMath::Sqrt(MeshObject->MaxDistanceFactor) * 2.f;
FString DebugString = FString::Printf(TEXT("PredictedLODLevel(%d)\nMinDesiredLODLevel(%d) ForcedLodModel(%d) MinLodIndex(%d) LODBias(%d)\nMaxDistanceFactor(%f) ScreenSize(%f)"),
PredictedLODLevel, MeshObject->MinDesiredLODLevel, LocalForcedLodModel, MinLodIndex, LODBias, MeshObject->MaxDistanceFactor, ScreenSize);
// See if Child classes want to add something.
UpdateVisualizeLODString(DebugString);
FColor DrawColor = FColor::White;
switch (PredictedLODLevel)
{
case 0: DrawColor = FColor::White; break;
case 1: DrawColor = FColor::Green; break;
case 2: DrawColor = FColor::Yellow; break;
case 3: DrawColor = FColor::Red; break;
default:
DrawColor = FColor::Purple; break;
}
DrawDebugString(GetWorld(), Bounds.Origin, DebugString, nullptr, DrawColor, 0.f, true, 1.2f);
}
}
}
//...
}
2.2. ShowFlag.LODColoration 1
현재 적용되어 LOD를 LOD 레벨별 색상으로 확인할 수 있는 콘솔 명령입니다.
· 모든 PrimitiveComponent에 유효
· 표시 색은 다음과 같이 정의 (BaseEngine.ini의 LODColorationColors 참조)
LOD
Color
LOD0
화이트
LOD1
레드
LOD2
그린
LOD3
블루
LOD4
Yellow
LOD5
Fuchisia
LOD6
Cyan
LOD7
Purple
다음 위치에서 구현됩니다.
SkinnedMeshComponent.cpp
void ApplyViewModeOverrides(
int32 ViewIndex,
const FEngineShowFlags& EngineShowFlags,
ERHIFeatureLevel::Type FeatureLevel,
const FPrimitiveSceneProxy* PrimitiveSceneProxy,
bool bSelected,
FMeshBatch& Mesh,
FMeshElementCollector& Collector
)
{
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
// ...
else if (EngineShowFlags.LODColoration)
{
if (!Mesh.IsTranslucent(FeatureLevel) && GEngine->LODColorationColors.Num() > 0)
{
int32 lodColorationIndex = FMath::Clamp((int32)Mesh.VisualizeLODIndex, 0, GEngine->LODColorationColors.Num() - 1);
bool bLit = Mesh.MaterialRenderProxy->GetMaterial(FeatureLevel)->GetShadingModels().IsLit();
const UMaterial* LODColorationMaterial = (bLit && EngineShowFlags.Lighting) ? GEngine->LevelColorationLitMaterial : GEngine->LevelColorationUnlitMaterial;
auto LODColorationMaterialInstance = new FColoredMaterialRenderProxy(
LODColorationMaterial->GetRenderProxy(),
GetSelectionColor(GEngine->LODColorationColors[lodColorationIndex], bSelected, PrimitiveSceneProxy->IsHovered() )
);
Mesh.MaterialRenderProxy = LODColorationMaterialInstance;
Collector.RegisterOneFrameMaterialProxy(LODColorationMaterialInstance);
}
}
// ...
}
3. 정리
실제 기계에서 빠르게 LOD가 들어 있는지, 어떤 LOD가 적용되고 있는지를 확인할 때 유용합니다.
이들을 잘 활용하여 디버깅을 효율적으로 수행합시다.
Reference
이 문제에 관하여([UE4] LOD를 시각화하는 명령), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/EGJ-Ken_Kuwano/items/e6fd25e896148e4fe4b5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
2.1. a.VisualizeLODs 1
LOD에 현재 어떤 값이 적용되는지 확인할 수 있는 콘솔 명령입니다.
・본수, 정점수도 확인할 수 있어 Shipping/Test 이외의 빌드로 유효
・SkinnedMeshComponent를 계승한 Component에게만 시각화가 가능
・표시색은 아래와 같이 소스상에 하드코드로 정의
LOD
Color
LOD0
화이트
LOD1
그린
LOD2
Yellow
LOD3
레드
기타
Purple
다음 위치에서 구현됩니다.
SkinnedMeshComponent.cpp
bool USkinnedMeshComponent::UpdateLODStatus_Internal(int32 InMasterPoseComponentPredictedLODLevel)
{
//...
if (CVarAnimVisualizeLODs.GetValueOnAnyThread() != 0)
{
// Reduce to visible animated, non SyncAttachParentLOD to reduce clutter.
if (SkeletalMesh && MeshObject && bRecentlyRendered)
{
const bool bHasValidSyncAttachParent = bSyncAttachParentLOD && GetAttachParent() && GetAttachParent()->IsA(USkinnedMeshComponent::StaticClass());
if (!bHasValidSyncAttachParent)
{
const float ScreenSize = FMath::Sqrt(MeshObject->MaxDistanceFactor) * 2.f;
FString DebugString = FString::Printf(TEXT("PredictedLODLevel(%d)\nMinDesiredLODLevel(%d) ForcedLodModel(%d) MinLodIndex(%d) LODBias(%d)\nMaxDistanceFactor(%f) ScreenSize(%f)"),
PredictedLODLevel, MeshObject->MinDesiredLODLevel, LocalForcedLodModel, MinLodIndex, LODBias, MeshObject->MaxDistanceFactor, ScreenSize);
// See if Child classes want to add something.
UpdateVisualizeLODString(DebugString);
FColor DrawColor = FColor::White;
switch (PredictedLODLevel)
{
case 0: DrawColor = FColor::White; break;
case 1: DrawColor = FColor::Green; break;
case 2: DrawColor = FColor::Yellow; break;
case 3: DrawColor = FColor::Red; break;
default:
DrawColor = FColor::Purple; break;
}
DrawDebugString(GetWorld(), Bounds.Origin, DebugString, nullptr, DrawColor, 0.f, true, 1.2f);
}
}
}
//...
}
2.2. ShowFlag.LODColoration 1
현재 적용되어 LOD를 LOD 레벨별 색상으로 확인할 수 있는 콘솔 명령입니다.
· 모든 PrimitiveComponent에 유효
· 표시 색은 다음과 같이 정의 (BaseEngine.ini의 LODColorationColors 참조)
LOD
Color
LOD0
화이트
LOD1
레드
LOD2
그린
LOD3
블루
LOD4
Yellow
LOD5
Fuchisia
LOD6
Cyan
LOD7
Purple
다음 위치에서 구현됩니다.
SkinnedMeshComponent.cpp
void ApplyViewModeOverrides(
int32 ViewIndex,
const FEngineShowFlags& EngineShowFlags,
ERHIFeatureLevel::Type FeatureLevel,
const FPrimitiveSceneProxy* PrimitiveSceneProxy,
bool bSelected,
FMeshBatch& Mesh,
FMeshElementCollector& Collector
)
{
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
// ...
else if (EngineShowFlags.LODColoration)
{
if (!Mesh.IsTranslucent(FeatureLevel) && GEngine->LODColorationColors.Num() > 0)
{
int32 lodColorationIndex = FMath::Clamp((int32)Mesh.VisualizeLODIndex, 0, GEngine->LODColorationColors.Num() - 1);
bool bLit = Mesh.MaterialRenderProxy->GetMaterial(FeatureLevel)->GetShadingModels().IsLit();
const UMaterial* LODColorationMaterial = (bLit && EngineShowFlags.Lighting) ? GEngine->LevelColorationLitMaterial : GEngine->LevelColorationUnlitMaterial;
auto LODColorationMaterialInstance = new FColoredMaterialRenderProxy(
LODColorationMaterial->GetRenderProxy(),
GetSelectionColor(GEngine->LODColorationColors[lodColorationIndex], bSelected, PrimitiveSceneProxy->IsHovered() )
);
Mesh.MaterialRenderProxy = LODColorationMaterialInstance;
Collector.RegisterOneFrameMaterialProxy(LODColorationMaterialInstance);
}
}
// ...
}
3. 정리
실제 기계에서 빠르게 LOD가 들어 있는지, 어떤 LOD가 적용되고 있는지를 확인할 때 유용합니다.
이들을 잘 활용하여 디버깅을 효율적으로 수행합시다.
Reference
이 문제에 관하여([UE4] LOD를 시각화하는 명령), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/EGJ-Ken_Kuwano/items/e6fd25e896148e4fe4b5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([UE4] LOD를 시각화하는 명령), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/EGJ-Ken_Kuwano/items/e6fd25e896148e4fe4b5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)