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을 제공하는 데 중요한 HDR 정보를 제공하므로 권장됩니다. 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 ..