Unity 에디터는 타겟 플랫폼과 라이팅 창의 압축 설정에 따라 압축과 인코딩 방식이 다른 라이트맵을 저장합니다.
Unity 프로젝트에서는 두 가지 기법을 사용하여 베이크된 광원 강도를 필요한 경우 LDR(low dynamic range) 텍스처로 인코딩할 수 있습니다.
RGBM 인코딩: RGB M 인코딩은 컬러를 RGB 채널에 저장하고 멀티플라이어(M)를 알파 채널에 저장합니다. RGBM 라이트맵의 범위는 선형 공간에서 0–34.49(52.2), 감마 공간에서 0–5입니다.
dLDR(Double Low Dynamic Range) 인코딩: dLDR 인코딩은 [0, 2]에서 [0, 1] 범위를 간단하게 매핑하는 방식으로 모바일 플랫폼에서 사용됩니다. 2보다 큰 베이크된 광원 강도는 고정됩니다. 디코딩 값은 감마 공간을 사용하는 경우 라이트맵 텍스처의 값에 2를 곱하거나, 선형 공간을 사용하는 경우 4.59482(22.2)를 곱하여 계산됩니다. 일부 플랫폼은 하드웨어 압축으로 인해 RGBM을 사용할 때 시각적인 결함이 발생하므로 라이트맵을 dLDR로 저장합니다.
선형 색 공간을 사용할 때 라이트맵 텍스처는 sRGB로 표시되고, (샘플링 및 디코딩 후에) 셰이더에서 사용되는 최종 값은 선형 색 공간에 놓입니다. 감마 색 공간을 사용하면 최종 값이 감마 색 공간에 놓입니다.
참고: 인코딩을 사용하면 라이트맵에 저장되는 값(GPU 텍스처 메모리)은 항상 감마 색 공간에 놓입니다.
UnityCG.cginc 셰이더 include 파일의 Decode Lightmap 셰이더 기능은 셰이더의 라이트맵 텍스처에서 값을 읽어온 후 라이트맵 값의 디코딩을 처리합니다.
Windows, Mac, Linux, iOS, tvOS 및 Android에서 HDR 라이트맵을 사용할 수 있습니다. 해당 플랫폼용 라이트맵의 인코딩/압축을 제어하려면 Edit > Project Settings > Player > Other Settings > Lightmap Encoding으로 이동합니다.
High Quality 를 선택하면__ HDR__하이 다이내믹 레인지
See in Glossary 라이트맵 지원이 활성화되고, Normal Quality 를 선택하면 RGBM 인코딩 사용으로 전환됩니다. Low Quality 는 모바일 플랫폼에서 dLDR 인코딩으로 전환되며, 다른 플랫폼에서는 Normal Quality 와 동등합니다.
Lighting 창에서 라이트맵 Compression 을 활성화하면 라이트맵이 데스크톱 및 콘솔 플랫폼에서 BC6H 압축 포맷을 사용하여 압축됩니다. 모바일 플랫폼의 경우 Unity는 아래 표에 따라 HDR 포맷을 선택합니다.
HDR 라이트맵은 인코딩 방식을 사용하여 라이트맵 값을 인코딩하지 않으므로 지원 범위는 0부터 65504까지의 범위를 가지는 16비트 부동 소수점 텍스처 포맷에 의해서만 제한됩니다.
BC6H 포맷은 DXT5 + RGBM 포맷 인코딩보다 품질이 우수하고 RGBM 인코딩에 수반되는 컬러 줄무늬 결함이 발생하지 않습니다.
샘플 HDR 라이트맵이 필요한 셰이더는 샘플링된 값을 디코드할 필요가 없으므로 ALU 명령이 몇 개 더 적어집니다.
BC6H 포맷의 GPU 메모리 요구 사항은 DXT5와 같습니다.
다음은 인코딩 방식과 각 방식의 텍스처 압축 포맷을 타겟 플랫폼별로 나열한 목록입니다.
| 타겟 플랫폼 | 인코딩 | 압축 - 크기(픽셀당 비트 수) |
|---|---|---|
| 스탠드얼론(PC, Mac, Linux) | RGBM / HDR | DXT5 / BC6H - 8 bpp |
| WebGL 2.0 | RGBM/RGBM/HDR | DXT5 - 8bpp |
| iOS ASTC (1) | dLDR / RGBM / HDR | ASTC - 3.56 bpp / ASTC - 3.56 bpp / RGB9E5 - 32 bpp |
| iOS PVRTC | dLDR / RGBM / HDR | PVRTC RGB - 4 bpp / ETC2 RGBA - 8 bpp / RGB9E5 - 32 bpp |
| tvOS | dLDR / RGBM / HDR | ASTC - 3.56 bpp / ASTC - 3.56 bpp / RGB9E5 - 32 bpp |
| Android ASTC (2) | dLDR / RGBM / HDR | ASTC - 3.56 bpp / ASTC - 3.56 bpp / ASTC HDR - 3.56 bpp |
| Android ETC2 | dLDR / RGBM / HDR | ETC2 RGB - 4 bpp / ETC2 RGBA - 8 bpp / ASTC HDR - 3.56 bpp |
| Android ETC | dLDR / RGBM / HDR | ETC1 RGB - 4 bpp / ETC2 RGBA - 8 bpp / ASTC HDR - 3.56 bpp |
[1] iOS 의 라이트맵에 사용되는 텍스처 압축 포맷은 플레이어 설정의 Texture compression format 설정에 따라 다릅니다.
[2] Android 의 라이트맵에 사용되는 텍스처 압축 포맷은 플레이어 설정 및 빌드 설정에 따라 다릅니다. 이러한 설정이 상호작용하는 방법에 대한 자세한 내용은 텍스처 압축 설정을 참조하십시오.
GI 시스템에 대한 입력은 출력과 다른 범위와 인코딩을 갖습니다. 표면 알베도는 감마 공간에서 8비트 무부호 정수 RGB이며, 이미션은 선형 공간에서 16비트 부동 소수점 RGB입니다. 메타 패스를 사용하는 커스텀 입력 제공에 대한 내용은 라이트매핑 및 셰이더 기술 자료를 참조하십시오.
복사 조도 출력 텍스처는 그래픽 하드웨어가 지원하는 경우 RGB9E5 공유 지수 부동 소수점 포맷, 또는 5 범위의 RGBM을 폴백으로 사용하여 저장됩니다. RGB9E5 라이트맵의 범위는 [0, 65408]입니다. RGB9E5 포맷에 대한 자세한 내용은 Khronos.org: EXT_texture_shared_exponent를 참조하십시오.
참고 항목: