[GAS] UE 5 멀티플레이어 미니맵 : DX12 투명화 버그와 GPU 크래시 문제

2026. 5. 26. 21:23·Dev./UE 언리얼 엔진
반응형

멀티플레이어 테스트 환경에서 마주한 3중 에러

RTS 게임이나 MOBA 게임을 개발할 때 미니맵은 플레이어의 눈과 귀가 되는 핵심 시스템이다.

하지만 언리얼 엔진 5(UE5) 환경에서 2인 멀티플레이어 테스트를 시작하자마자 미니맵 시스템이 렌더링이 안된다...

미니맵 화면은 투명하게 뚫려서 보이고, 이를 고치려 하자 이내 비디오 메모리 고갈로 엔진이 강제 종료돼버린다..........


왜 미니맵은 투명하게 뚫렸는가?

언리얼 엔진에서 3D 공간의 지형을 미니맵으로 표현하려면 주로 SceneCaptureComponent2D를 사용한다.

이 카메라가 비추는 화면은 Render Target (게임 중에 실시간으로 그리는 동적 캔버스)에 텍스처 데이터로 쓰이게 되고, 위젯의 UImage 컴포넌트가 이 텍스처를 화면에 렌더링한다.

 

지형 캡처 카메라는 정상적으로 작동하고 있었고 라이팅과 액터들을 명확하게 캔버스에 그려내고 있었다.

그러나 화면은 완전히 투명하게 비어 있었다.


원인 분석: DX12의 알파 채널 뭉개기 버그

원인은 DirectX 12(SM6) 환경의 엔진 렌더러 버그에 있었다.

씬 캡처 카메라는 알파 채널을 포함하지 않는 옵션으로 설정되어 풀 씬을 정상 렌더링하고 있었지만, 렌더러가 이 데이터를 최종 UI 시스템으로 보낼 때 알파 채널의 값을 강제로 0(완전 투명)으로 초기화하여 변환하는 치명적인 연산 오류가 발생했다.

 

결국 UI 브러시는 정상적인 텍스처를 전달받았음에도 불구하고 "투명도가 0이므로 화면에 그리지 않는다"고 해석하여 미니맵 배경을 투명하게 관통시켰던 것이다.


솔루션: UI 전용 머티리얼을 통한 알파 제로 버그 강제 무력화

알파 값이 0으로 resolve되어 투명해지는 그래픽 파이프라인 버그는 머티리얼 단에서 가로챘다.

렌더 타겟을 위젯 브러시에 직접 바인딩하지 않고, 렌더 타겟 텍스처를 매개변수로 공급받는 UI 머티리얼을 따로 만들었다.

  • 새로운 UI 전용 머티리얼(M_MinimapImage)을 생성하고 Material Domain을 User Interface로 설정했다.
  • 머티리얼 내부에 TextureSampleParameter2D 노드를 하나 생성하고 이름을 Texture로 설정했다.
  • 해당 노드의 RGB 출력 핀은 최종 색상(Final Color) 핀에 연결했다.

이렇게 하면 DX12가 렌더 타겟 캔버스의 투명도를 아무리 0으로 지워 보내더라도, UI 머티리얼이 화면에 도포되기 직전에 강제로 불투명도 값을 1.0으로 다시 채워 그리기 때문에 미니맵 배경 지형이 뚫리지 않고 100% 견고하게 그려진다.

 

C++ 위젯 클래스에서는 이 머티리얼을 활용해 런타임에 다이내믹 머티리얼 인스턴스를 관리하도록 처리했다.

void UGS_MinimapWidget::ApplyMinimapRenderTarget(UTextureRenderTarget2D* RenderTarget)
{
    if (!MinimapImage || !RenderTarget) return;

    if (MinimapMaterial)
    {
        // 다이내믹 머티리얼 인스턴스(MID)가 없으면 동적 생성
        if (!MinimapMID)
        {
            MinimapMID = UMaterialInstanceDynamic::Create(MinimapMaterial, this);
        }

        if (MinimapMID)
        {
            // 복제된 고유 렌더 타겟 텍스처를 머티리얼의 "Texture" 파라미터에 매핑
            MinimapMID->SetTextureParameterValue(FName("Texture"), RenderTarget);

            FSlateBrush Brush = MinimapImage->GetBrush();
            Brush.SetResourceObject(MinimapMID);
            Brush.DrawAs = ESlateBrushDrawType::Image;
            Brush.ImageSize = FVector2D(RenderTarget->SizeX, RenderTarget->SizeY);

            MinimapImage->SetBrush(Brush);
        }
    }
    // ... 머티리얼 미지정 시 다이렉트 텍스처 바인딩 폴백 지원
}

해결!!

반응형

'Dev. > UE 언리얼 엔진' 카테고리의 다른 글

AI를 Unreal Editor 안으로: UnrealAgent  (0) 2026.06.15
[GAS] 어두운 던전에서 캐릭터가 사라질 때  (0) 2026.05.04
[GAS] 포탈 Niagara VFX 개선 방향 기록  (1) 2026.04.05
[GAS] Runtime Retarget ABP 적용 후 모션이 나오지 않던 문제  (0) 2026.04.05
[GAS] VFX 최적화 컴포넌트 붙였다가, BP 구조 문제를 만났다...  (1) 2026.04.05
'Dev./UE 언리얼 엔진' 카테고리의 다른 글
  • AI를 Unreal Editor 안으로: UnrealAgent
  • [GAS] 어두운 던전에서 캐릭터가 사라질 때
  • [GAS] 포탈 Niagara VFX 개선 방향 기록
  • [GAS] Runtime Retarget ABP 적용 후 모션이 나오지 않던 문제
raindrovvv
raindrovvv
raindrovvv 님의 블로그 입니다.
  • raindrovvv
    raindrovvv 님의 블로그
    raindrovvv
  • 전체
    오늘
    어제
    • 분류 전체보기 (188) N
      • Dev. (181) N
        • AI 인공지능 (38) N
        • UE 언리얼 엔진 (87)
        • Unity 유니티 (0)
        • Wwise 와이즈 (7)
        • 게임 네트워크 (8)
        • 그래픽스 Graphics (22)
        • 프로젝트 (9)
        • 기타 개발 관련 (10)
      • Computer Science (0)
        • 하드웨어 HW (0)
        • 소프트웨어 SW (0)
        • 통신 (0)
        • 데이터 (0)
      • 블로그 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    생산성
    TA
    Wwise
    그래픽스
    UE
    AI
    인디게임
    바이브코딩
    에이전트
    네트워크
    Git
    dev
    트러블슈팅
    깃
    devlog
    언리얼
    unrealengine
    Unreal
    언리얼엔진
    게임개발
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
raindrovvv
[GAS] UE 5 멀티플레이어 미니맵 : DX12 투명화 버그와 GPU 크래시 문제
상단으로

티스토리툴바