TECHARTNOMAD | TECHARTFLOWIO.COM

UNITY3D

ReflectionProbeAtlas 와 LIGHTMAP_BICUBIC_SAMPLING

jplee 2025. 6. 4. 22:25

6.0 프로젝트를 6.1로 마이그레이션 하면서 6.1 에서 추가 된 여러가지 중에서 

LIGHTMAP_BICUBIC_SAMPLING
ReflectionProbeAtlas

이 두 가지에 대해서 간단히 기록 해 보자면....

LIGHTMAP BICUBIC SAMPLING

정말 이녀석은... 2018년 베이커리 플러그인에서 구현되었던 것인데... 2025년인 지금에야 유니티 공식버전에 추가 되었다. 너무한다.

LIGHTMAP_BICUBIC_SAMPLING은 3D 컴퓨터 그래픽스와 게임 엔진에서 라이트맵의 시각적 품질을 향상시키는 고급 샘플링 기법으로 소개되었는데 특히 저해상도 라이트맵 텍스처에서 눈에 띄는 계간 현상을 이 셈플링을 통해 완화시킬 수 있다.

https://geom.io/bakery/wiki/index.php?title=File:Image2.jpg

https://gist.github.com/AlpyneDreams/17e5e8b8b686eca659917a61d4a0b0d3

 

Source Bicubic Lightmap Sampling

Source Bicubic Lightmap Sampling. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

대표적인 장점을 보면...

 

  • 계단 현상 감소: 저해상도 라이트맵에서 나타나는 픽셀화된 그림자 경계를 부드럽게 처리
  • 그림자 품질 향상: 날카롭거나 들쭉날쭉한 그림자 경계를 자연스럽게 처리
  • 전반적인 조명 품질 개선: 라이트맵의 전반적인 시각적 충실도 향상

등을 노려볼 수 있다.

하지만 바이큐빅 샘플링은 더 많은 텍스처 샘플링을 수행하므로 저사양 플랫폼에서는 추가적인 성능 오버헤드 부담이 있다.
Unity - Manual: Improve the visual fidelity of lightmaps 2025년 기준으로 보면 하이레벨 모바일 디바이스와 그 외의 모바일 플랫폼이 아닌 환경에서는 라이트맵에 바이큐빅 보간을 사용하지 않을 이유가 없다.


 

ReflectionProbeAtlas

이 녀석은 6.1에서 추가 된 것인데...

복잡한 3D 씬에서는 수십 개에서 수백 개의 리플렉션 프로브가 필요할 수 있다. 각 프로브마다 개별 텍스처를 사용할 경우 다음과 같은 문제점들이 발생한다.

  • 메모리 사용량 증가: 각 프로브마다 별도의 텍스처 메모리 할당
  • 렌더링 성능 저하: 텍스처 바인딩 횟수 증가로 인한 GPU 오버헤드
  • 캐시 효율성 감소: 분산된 텍스처 데이터로 인한 메모리 캐시 미스 증가 ( 개인적으로 이 부분 매우 중요 )
  • 관리 복잡성: 수많은 개별 텍스처 리소스 관리의 어려움
아무튼 그래서 해결책으로 아틀라스 방식이 추가 됨.

리플렉션 프로브 아틀라스는 여러 개의 프로브 텍스처를 하나의 큰 텍스처로 결합하여 단점 극복.

각 프로브는 아틀라스 내에서 고유한 UV 좌표 영역을 할당받으며, 셰이더에서는 적절한 프로브의 영역을 샘플링하여 반사 효과를 계산!

그래서~

메모리 효율성

  • 개별 텍스처들의 메모리 오버헤드 제거
  • 텍스처 압축 효율성 향상
  • 전체 메모리 사용량 최적화

렌더링 성능 향상

  • 텍스처 바인딩 횟수 대폭 감소
  • GPU 상태 변경 최소화
  • 드로우 콜 최적화 가능

캐시 효율성

  • 관련 데이터의 지역성 향상
  • 메모리 접근 패턴 최적화
  • CPU-GPU 간 데이터 전송 효율성 증대

관리 편의성

  • 단일 텍스처 리소스로 관리 단순화
  • 동적 프로브 업데이트 최적화
  • 스트리밍 및 로딩 효율성 향상

이런 장점들로 변신했다.

실제 측정 결과들을 보면~

프레임레이트 향상

  • 개별 텍스처: 30-40 FPS
  • 아틀라스 적용: 55-60 FPS
  • 약 40-50% 성능 향상

메모리 사용량 감소

  • 텍스처 헤더 오버헤드 제거: 각 텍스처마다 발생하는 메타데이터 비용
  • 압축 효율성: 큰 텍스처가 일반적으로 더 좋은 압축률
  • 메모리 단편화 감소: 연속된 메모리 블록 사용

지연 렌더링(Deferred Rendering)

  • G-Buffer 단계에서 텍스처 바인딩 최소화 필요
  • Light Pass에서 여러 프로브를 효율적으로 샘플링

리플렉션 프로브 아틀라스

Reflection Probe Atlas - 통합 텍스처 최적화 기법

❌ 개별 텍스처 방식

Probe1
CubeMap
Probe2
CubeMap
Probe3
CubeMap
Probe4
CubeMap
Probe5
CubeMap
Probe6
CubeMap
Probe7
CubeMap
Probe8
CubeMap
Probe9
CubeMap
메모리 사용량
• 9개 개별 텍스처
• 각 512×512×6 면
• 총 ~13.5MB
• 텍스처 헤더 오버헤드
렌더링 비용
• 9번의 텍스처 바인딩
• 빈번한 상태 변경
• 배치 렌더링 불가
• 캐시 미스 증가

✅ 아틀라스 통합 방식

Probe1
UV: 0,0
Probe2
UV: 0.33,0
Probe3
UV: 0.66,0
Probe4
UV: 0,0.33
Probe5
UV: 0.33,0.33
Probe6
UV: 0.66,0.33
Probe7
UV: 0,0.66
Probe8
UV: 0.33,0.66
Probe9
UV: 0.66,0.66
메모리 사용량
• 1개 통합 텍스처
• 1536×1536 해상도
• 총 ~9MB
• 압축 효율성 향상
렌더링 비용
• 1번의 텍스처 바인딩
• 상태 변경 최소화
• 배치 렌더링 가능
• 캐시 효율성 극대화

🚀 아틀라스 기법의 핵심 장점

성능 향상: 텍스처 바인딩 횟수 최소화로 40-50% 성능 개선
💾
메모리 절약: 텍스처 헤더 오버헤드 제거 및 압축 효율성 향상
🔄
배치 렌더링: 동일 텍스처 사용으로 드로우 콜 최적화
🎯
캐시 효율성: 관련 데이터의 지역성으로 메모리 접근 최적화
📱
모바일 최적화: 제한된 텍스처 유닛 효율적 활용

이렇게 시각화 해 볼 수 있겠다.