내배캠 TIL

TIL - Unreal Engine 미니맵 구현

xodn246 2026. 4. 13. 21:27

1. 핵심 구조

미니맵과 안개는 완전히 분리된 시스템이다.

  • 미니맵 → SceneCapture로 지형을 RT에 그림
  • 안개 → 별도의 Render Target 2장으로 관리

"지형 / 현재 시야 / 탐색 기록"을 각각 따로 만들고 마지막에 머티리얼에서 합성


2. 미니맵 캡처 (SceneCapture2D)

핵심 포인트

  • 매 프레임 X → 타이머 기반 갱신
  • OrthoWidth로 월드 크기 동기화
  • Render Target에 직접 그림
void ATWMiniMap::BeginPlay()
{
    Super::BeginPlay();

    if (CaptureComp && MinimapRT)
    {
        CaptureComp->TextureTarget = MinimapRT;
        CaptureComp->OrthoWidth = CaptureWidth;

        CaptureComp->bCaptureEveryFrame = false;
        CaptureComp->bCaptureOnMovement = false;

        GetWorldTimerManager().SetTimer(
            CaptureTimerHandle,
            this,
            &ATWMiniMap::UpdateCapture,
            0.1f,
            true
        );
    }
}

void ATWMiniMap::UpdateCapture()
{
    CaptureComp->CaptureScene();
}
 
 

핵심 요약:

  • SceneCapture는 "카메라"가 아니라 "RT에 찍는 도구"
  • 빈번한 업데이트는 성능 낭비 → 타이머로 제한

3. 2중 Fog of War 구조

분리된 RT 2개 사용

  1. CurrentRT
    → "지금 보이는 영역"
    → 매 프레임 덮어씀
  2. ExploredRT
    → "지나간 기록"
    → CurrentRT를 누적(Additive)

동작 흐름

플레이어 이동
	↓
CurrentRT에 원 그리기
	↓
ExploredRT에 누적
 

4. 머티리얼 합성 로직 (UI 전용)

머테리얼 노드

 

의미

  • Explored = 0 → 아예 안보임 (검정)
  • Explored = 1 + Current = 0 → 어두운 지형
  • Current = 1 → 완전 밝음

값 설정

  • Dark = 0.1
  • Bright = 1.0

5. 방향 문제 해결 (중요)

문제

  • 월드: X+가 북쪽
  • UI: 오른쪽이 동쪽

→ 그대로 쓰면 90도 틀어짐

해결

  • 머테리얼이 들어갈 UI Image를 -90만큼 회전

6. UI 연결 구조

흐름

C++
→ Dynamic Material 생성
→ RenderTarget 연결
→ UMG Image에 적용
void AMyPlayerController::SetupMinimapUI()
{
    if (MinimapWidgetClass)
    {
        UUserWidget* Widget = CreateWidget<UUserWidget>(this, MinimapWidgetClass);
        Widget->AddToViewport();

        // Dynamic Material 생성
        // BaseMap / CurrentFog / ExploredFog 연결
    }
}
 

7. 트러블슈팅

1. 안개가 빨갛게 나올 때

  • Texture Sample → R 채널만 사용

2. 방향 틀어짐

  • CustomRotator = 0.25

3. 성능 문제

  • SceneCapture 타이머로 제한
  • Fog 계산은 전부 GPU(Material)에서 처리

8. 최종 결과 상태

상태값결과
미탐색 0 검정
탐색됨 0.1 어두운 지형
현재 시야 1.0 밝은 지형