Jetpack XR 라이브러리의 alpha04 출시부터 최적의 성능과 시각적 품질을 위해 공간 환경 애셋을 제공하는 방식에 중요한 업데이트가 있습니다. 이러한 변경사항은 호환성에 영향을 미치며 공간 환경을 설정하는 기존 앱을 업데이트해야 합니다.
공간 환경을 제공하려면 다음 두 가지 주요 구성요소가 필요합니다.
- 환경의 지오메트리 (예: 지면, 주변 객체) 및 사용자가 보는 기본 시각적 스카이박스 텍스처의 .glb 또는 .gltf 파일입니다.
- cmgen 도구를 사용하여 HDR EXR 이미지에서 생성된 이미지 기반 조명 (IBL) 정보가 포함된 별도의 ZIP 파일입니다. ZIP 파일은 객체의 반사와 같은 조명 계산에 사용되며 시각적 스카이박스 텍스처 자체에는 사용되지 않습니다.
이 접근 방식을 사용하는 이유
업데이트된 애셋 구조는 다음과 같은 이점을 제공합니다.
- 더 작은 파일 크기: 시각적 디스플레이와 조명 정보에 모두 단일 고해상도 HDR 스카이박스 파일을 사용하는 등 이전 방법과 비교할 때 이 접근 방식은 파일 크기를 줄입니다.
- 성능 개선: 시각적 스카이박스 텍스처 (glb에 내장됨)를 IBL 데이터 (ZIP 파일에 있음)와 분리하면 각 구성요소를 독립적으로 최적화할 수 있습니다. 이렇게 하면 텍스처 메모리 읽기 대역폭이 낮아지고 전력 소비가 낮아집니다.
- 최적화된 조명: 조명 맵에만 낮은 해상도 스카이박스 리소스를 사용하면 객체의 조명 시각적 결과에 큰 영향을 주지 않으면서 성능에 도움이 됩니다.
앱에 공간 환경을 추가하는 방법을 자세히 알아보려면 앱에 환경 추가 가이드를 참고하세요.
glb 최적화

glb는 사용자 주변의 지오메트리를 나타내며 스카이박스의 시각적 텍스처를 포함합니다. 지오메트리의 경우 파일 크기를 80MB 이하로 유지해야 합니다.
이를 위해 고품질을 유지하면서 환경을 더 효율적으로 만들 수 있는 방법이 여러 가지 있습니다. 예를 들어 메쉬의 밀도는 사용자 근처에서 가장 높아야 하며, 사용자로부터 멀리 떨어진 메쉬의 밀도는 낮출 수 있습니다.
- 뷰 거리: Android XR의 환경 뷰 거리는 사용자 지점에서 200m이며 스카이박스 텍스처는 이 제약 조건을 준수해야 합니다. 이 거리에서는 시차가 구별할 수 없게 되므로 최적의 환경을 제공합니다.
사용자 높이: 지형은 다를 수 있지만 앱에서 더 큰 UI 요소와 잘리는 것을 방지하기 위해 사용자를 높이 약 1.5m의 언덕에 배치합니다.
폴리곤 수: 높은 폴리곤 수는 불필요한 전력 소비로 이어질 수 있으므로 glb 파일의 폴리곤 수에 주의하세요. 각 지오메트리 패치는 정점 10,000개를 초과해서는 안 됩니다.
KTX 압축: glb가 밉맵과 ktx2 텍스처를 사용하도록 하여 glb 파일의 GPU 성능을 최적화합니다.
IBL을 최적화하는 데 필요한 사항
cmgen 명령줄 유틸리티를 다운로드합니다.
- 최신 버전은 Filament 저장소에서 확인할 수 있습니다.
- 플랫폼용 사전 빌드된 cmgen 버전이 포함된 .tgz를 찾아 추출합니다.
- 미리 빌드된 도구는 추출된 .tgz 파일의 /bin 디렉터리에 있습니다.
IBL용 .zip 파일을 생성하기 위해 준비할 애셋:
- 스카이박스 텍스처와 일치하는 저해상도 EXR
- 스카이박스 텍스처 입력은 EXR 파일이어야 합니다. cmgen은 다른 형식을 지원하지만 EXR은 고품질 IBL을 제공하는 데 중요한 높은 동적 범위 정보를 제공하므로 EXR이 권장됩니다. PNG와 같은 다른 형식을 사용하면 조명이 덜 정확해집니다.
- 소스 이미지 (EXR)의 비율은 2:1이어야 하고 크기는 2의 거듭제곱이어야 합니다. 1024x512 픽셀의 EXR을 사용합니다. 참고: 1024x512는 해상도가 너무 낮은 것처럼 보일 수 있지만 성능에는 도움이 됩니다. IBL의 경우 사용자에게 표시되는 시각적 결과는 훨씬 높은 IBL 해상도 애셋과 매우 유사합니다.
- 단색 검은색 PNG
- 이 애셋의 비율도 2:1이어야 합니다. 100x50픽셀 크기를 사용합니다.
- 이는 IBL을 보완하는 최적화된 텍스처 역할을 합니다. 사용자는 이 부분을 보지 않으므로 실적 최적화에 중점을 둡니다.

다음은 cmgen을 사용하여 IBL용 .zip 파일을 만드는 예시를 보여줍니다. 이 예에서는 my_360_skybox_1024_x_512.exr 및 black_skybox.png라는 입력 파일을 사용하고 my_ibl.zip이라는 .zip 파일을 만듭니다.
# Produce black cubemaps for the texture of the IBL asset.
./cmgen --format=rgb32f --size=128 --extract=./skybox_ibl ./black_skybox.png
# Produce lighting cubemaps and a Spherical Harmonics from EXR
./cmgen --format=rgb32f --size=128 --deploy=./skybox_ibl --ibl-ld=. --ibl-samples=1024 --extract-blur=0.0 --sh-irradiance --sh-shader --sh-output=./skybox_ibl/sh.txt ./my_360_skybox_1024_x_512.exr
# Copy all of the black cubemaps into the other folder.
cp -rf ./skybox_ibl/black_skybox/* ./skybox_ibl/my_360_skybox_1024_x_512
# Rename the directory to reflect that these are old assets.
mv ./skybox_ibl/black_skybox ./skybox_ibl/black_skybox_old
# Rename the directory to reflect that these are your cubemap assets.
mv ./skybox_ibl/my_360_skybox_1024_x_512 ./skybox_ibl/black_skybox
# Change into the child directory.
cd ./skybox_ibl
# Zip all of the cubemap and the Spherical Harmonics assets together.
zip -q my_ibl.zip black_skybox/*
# Return to the directory you started in.
cd ..