On this page
article
Lighten Component update
Component Update 경량화 전략
게임 내 액터는 다양한 컴포넌트를 통해 구성되며, 이 컴포넌트들은 기본적으로 매 프레임 업데이트를 수행한다.
하지만 모든 컴포넌트가 매 프레임 업데이트될 필요는 없기 때문에, 필요 없는 기능을 비활성화하여 연산 비용을 줄일 수 있다.
USceneComponent 최적화 항목
USceneComponent
는 모든 씬에 존재하는 기본 컴포넌트로, Transform 및 Attach 정보를 처리한다.
설정 항목 | 설명 |
---|---|
Mobility | Static 이면 업데이트 및 이동 연산 없음. 가능하면 Static 으로 설정 |
SetComponentTickEnabled(false) | 컴포넌트 단위로 Tick 제거 |
bAutoActivate = false | 시작 시 불필요한 컴포넌트는 비활성화 |
bAbsoluteLocation/Rotation/Scale | true일 경우 계산 부담 증가. 반드시 필요한 경우에만 사용(부모와 분리되어 연산되기때문) |
AttachToComponent() 사용 방식 | EAttachmentRule::KeepWorld 는 연산 많음 → KeepRelative 권장(현재의 WorldTransform을 유지하면서 다시 상대값 계산하기때문) |
bWantsOnUpdateTransform | Transform이 바뀔 때마다 수동 업데이트 받을지 여부. false로 설정 권장 |
USkeletalMeshComponent 최적화 항목
USkeletalMeshComponent
는 애니메이션, 본 정보, 물리, 모프 타겟 등 다양한 연산을 포함하므로 성능 부담이 크다.
설정 항목 | 설명 |
---|---|
bTickInEditor | Editor 전용 Tick. 게임 런타임엔 false로 유지 |
MeshComponentUpdateFlag | OnlyTickPoseWhenRendered 설정 시 안 보이면 포즈 계산 생략 가능 |
Visibility Based Anim Tick Option | OnlyTickMontagesWhenNotRendered 등으로 설정하여 최적화 |
bUpdateAnimationInEditor | 에디터 상에서 애니메이션 계산 비활성화 가능 |
bEnableUpdateRateOptimizations | 애니메이션 업데이트 최적화 기능 사용 여부 |
bAllowCullDistanceVolumes | 거리 기반 자동 Cull 허용 |
LOD 설정 | 낮은 LOD에 단순한 본 구성 적용. 각 LOD마다 본 개수 차등화 가능 |
MasterPoseComponent | 여러 캐릭터가 동일 애니메이션 쓸 경우, 마스터-슬레이브 구조로 포즈 공유 |
SkeletalMesh 업데이트 최적화 예시
SkeletalMeshComp->MeshComponentUpdateFlag = EMeshComponentUpdateFlag::OnlyTickPoseWhenRendered;
SkeletalMeshComp->VisibilityBasedAnimTickOption = EVisibilityBasedAnimTickOption::OnlyTickMontagesWhenNotRendered;
SkeletalMeshComp->bEnableUpdateRateOptimizations = true;
이렇게 설정하면 화면에 안 보이는 캐릭터는 포즈 계산을 생략하고,
애니메이션도 꼭 필요한 몽타주만 Tick을 수행하게 된다.
Master Pose Component 최적화 구조
여러 NPC가 동일한 SkeletalMesh + AnimInstance를 공유할 경우,
하나의 마스터만 포즈를 계산하고 나머지는 이를 복사받게 하면 큰 최적화가 가능하다.
SlaveMesh->SetMasterPoseComponent(MasterMesh);
이 방식은 대규모 군중이나 병사처럼 동일한 애니메이션을 공유할 때 매우 유용하다.