본문으로 건너뛰기
CHOI HONGSU
1 min read

Splat Map Reduction

 

스플랫맵이 담당하던 타일링 제거, 톤 보정, 경계 블렌딩 기능을 Plane / Vertex Color / Alpha Decal로 분리해 지형 셰이더의 고정 텍스처 샘플링 비용을 줄인 작업입니다.

Problem

기존 배경 타일은 스플랫맵을 사용해 타일링 반복을 깨고, 영역별 색 변화와 경계 블렌딩을 처리하고 있었습니다.

하지만 이 방식은 지형 전체에서 추가 텍스처 샘플링이 발생하는 구조였고, 실제로는 모든 영역에 복잡한 블렌딩이 필요한 것은 아니었습니다.

특히 모바일 환경에서는 배경이 넓게 깔리기 때문에, 지형 셰이더의 샘플 수가 누적 비용으로 이어질 수 있었습니다.

Goal

스플랫맵이 담당하던 기능을 모두 유지하려고 하기보다, 실제로 필요한 용도별로 더 저렴한 방식으로 대체하는 것을 목표로 했습니다.

  • 타일링 반복 제거: Plane 오브젝트로 부분 덮기
  • 영역별 색 보정: Vertex Color로 처리
  • 부드러운 경계 블렌딩: 필요한 영역에만 알파 데칼 사용

Implementation

  1. 01

    배경 타일을 깨는 용도

    스플랫맵은 주로 바닥 타일의 반복 패턴을 깨는 용도로 사용되고 있었습니다.

    이 경우 전체 지형 셰이더에서 추가 샘플을 사용하는 대신, 반복이 눈에 띄는 구간 위에 간단한 Plane 오브젝트를 배치해 시각적인 변화를 만들었습니다.

  2. 02

    대안

    03. Plane으로 부분 덮기

    Plane 오브젝트는 바닥과 거의 같은 위치에 배치해, 기존 타일 위를 자연스럽게 덮도록 구성했습니다.

    프로젝트에서는 MSAA를 사용하지 않았기 때문에 Early-Z 이득을 얻을 수 없기에 위에 덮는 구조로 가도 손해가 없다 판단하였습니다.

Implementation

  1. 01

    지역 블랜딩 용도

    스플랫맵은 지역 간 경계를 부드럽게 섞는 용도로도 사용되고 있었습니다.

    하지만 모든 바닥 픽셀에서 이 비용을 부담할 필요는 없었기 때문에, 실제로 경계 블렌딩이 필요한 부분만 별도 알파 데칼로 처리했습니다.

    이를 통해 복잡한 블렌딩 비용을 전체 지형 셰이더에서 분리하고, 필요한 영역에만 제한적으로 적용할 수 있었습니다.

  2. 02

    대안 ( 알파 메쉬 데칼 )

Implementation

  1. 01

    AO or 톤 보정 용도

    스플랫맵으로 처리하던 단순 톤 보정이나 AO 성격의 어두운 영역 표현은 Vertex Color로 이동했습니다.

    Vertex Color는 추가 텍스처 샘플링 없이 메시 데이터에 포함된 색상 정보를 사용할 수 있기 때문에, 단순한 색 변화나 영역별 톤 조절에는 더 적합했습니다.

    이를 통해 스플랫맵을 사용하지 않아도 배경의 색 변화와 지역감을 유지할 수 있었습니다.

  2. 02

    대안

Before / After

기존 메모리 0.550MB -> 491.3MB ( 스플랫맵 제거 )

 

Result

스플랫맵이 담당하던 기능을 용도별로 분리해, 전체 지형 셰이더의 샘플링 비용을 줄였습니다.

  • 타일링 반복 제거는 Plane 으로 대체
  • 지역 경계 블렌딩은 필요한 부분만 Alpha Decal로 처리
  • 단순 톤 보정 / AO 성격의 색 변화는 Vertex Color로 이동
  • 전체 바닥이 항상 스플랫맵 샘플링 비용을 부담하던 구조를, 필요한 위치에만 비용을 지불하는 구조로 변경

 

 

이 작업은 시각적 품질을 크게 바꾸기보다, 기존 표현을 유지하면서 지형 셰이더의 고정 샘플링 비용을 줄이는 데 목적이 있었습니다.

BEFORE
Before
AFTER
After

Tradeoffs & Future Work

Tradeoffs

  • Plane과 Alpha Decal을 사용하는 방식은 추가 렌더링 오브젝트와 투명 오버드로우 비용이 발생합니다.
  • 따라서 모든 영역에 사용하는 방식이 아니라, 타일링 반복이 눈에 띄거나 경계 블렌딩이 필요한 구간에만 제한적으로 사용했습니다.