Android XR로 구동되는 삼성 갤럭시 XR이 출시되었습니다. 이 블로그 게시물은 Android XR Spotlight Week의 일부로, Android XR용 앱을 학습, 빌드, 준비하는 데 도움이 되는 리소스(블로그 게시물, 동영상, 샘플 코드 등)를 제공합니다.
이번 주에 Google 및 Qualcomm과 협력하여 제작된 삼성 갤럭시 XR이 출시되었습니다. 개발자에게는 흥미로운 시기이며, XR 앱에서 최고의 성능을 얻을 수 있도록 지원하고자 합니다.
XR이 아닌 기기에서 게임과 앱의 성능이 좋지 않으면 사용자에게 불편을 줄 수 있지만 XR의 세계에서는 성능이 선택사항이 아니라 앱의 성공에 필수적입니다. XR에서 프레임 속도 타겟을 놓치면 멀미와 같은 훨씬 심각한 문제가 발생할 수 있습니다.
이 가이드에서는 Android XR 개발을 위해 이해해야 하는 필수 성능 최적화를 설명합니다. 가장 큰 성능 향상을 제공하는 기능, 사용 시기, 프레임 속도 목표를 달성하는 데 도움이 되는 기능의 작동 방식을 알아봅니다.
목표는 다음과 같습니다.
- 최소: 72fps (Play 품질 가이드라인의 일부)
- 선택사항: 프레임당 11ms 예산으로 90fps
높은 프레임 속도를 유지하는 것이 중요한 이유에 관한 자세한 내용은 성능 가이드라인을 참고하세요.
XR 관련 성능 기능
먼저 시선 추적 렌더링과 Vulkan 서브샘플링이라는 두 가지 XR 전용 성능 기능을 살펴보겠습니다.
시선 추적 렌더링
시선 추적 렌더링은 두 가지 모드가 있는 최적화입니다. 첫 번째는 화면 중앙을 더 높은 해상도로 렌더링하고 멀리 볼수록 해상도를 점진적으로 낮추는 정적 모드입니다.
두 번째는 시선 추적 모드로, 보고 있는 영역을 세부적으로 렌더링하는 동시에 주변에 표시되는 품질을 낮춥니다. 기본적으로 인간의 시각이 작동하는 방식을 모방합니다. 즉, 초점을 맞추는 특정 영역에서만 세부사항을 볼 수 있습니다.
포비에이티드 렌더링은 사용자가 인식하는 이미지 품질을 저하시키지 않으면서 GPU 워크로드를 크게 줄입니다. 시선 추적 렌더링의 장점은 사용자가 주변 시야에서 품질 저하를 느끼지 못하지만 GPU는 성능이 향상되었다는 것을 확실히 알 수 있다는 것입니다.
정교한 3D 유물이 있는 박물관 환경을 구축한다고 가정해 보겠습니다. 시선 추적 렌더링이 없으면 '시야'의 모든 항목을 렌더링하려고 할 때 90fps를 유지하기가 어렵습니다. 시선 추적 렌더링을 사용하면 사용자가 보고 있는 곳에 고폴리 세부정보를 유지할 수 있지만 배경 환경은 낮은 품질로 렌더링됩니다. 사용자는 차이를 느끼지 못하지만 장면에 더 많은 세부정보를 추가할 수 있습니다.
Vulkan 서브샘플링
Vulkan 서브샘플링은 시선 추적 렌더링의 가장 친한 친구입니다. 시선 추적 렌더링은 다양한 품질 수준에서 렌더링할 항목을 결정하는 반면, Vulkan 서브샘플링은 프래그먼트 밀도 맵을 사용하여 다양한 품질 수준을 효율적으로 렌더링하는 방법을 처리합니다.
Vulkan 서브샘플링은 시선 추적 렌더링과 결합하면 0.5ms의 성능을 추가로 제공합니다. 또한 주변 시야의 들쭉날쭉한 가장자리를 부드럽게 처리하여 전체 이미지가 더 깔끔해 보입니다.
예를 들어 사용자가 계기판과 컨트롤에 집중하는 비행 시뮬레이터 게임에서 시선 추적 렌더링을 Vulkan 서브샘플링과 결합하면 세부 컨트롤이 선명하게 렌더링되지만 주변 조종석 구조는 더 적은 리소스를 사용합니다. 0.5ms는 크지 않은 것처럼 들리지만, 추가 양방향 요소를 위한 여유 공간이 있느냐 아니면 격렬한 순간에 프레임이 누락되느냐의 차이를 만듭니다.
복잡한 장면을 위한 GPU 기능
시선 추적 렌더링 및 Vulkan 서브샘플링 외에도 스마트 인스턴싱 및 컬링을 통해 불필요한 부담을 줄이는 GPU 기능이 있습니다. 이러한 기법은 반복되는 지오메트리나 상당한 폐색이 있는 복잡한 장면에서 특히 효과적입니다.
GPU 상주 드로어
GPU 상주 드로어는 GPU 인스턴싱을 자동으로 사용하여 그리기 호출을 줄이고 CPU 처리 시간을 확보합니다. 따라서 CPU가 GPU에 각 객체를 개별적으로 알려주는 대신 GPU가 유사한 객체를 일괄 처리합니다.
이 기능은 숲의 나무, 사무실 건물의 가구, 환경 전체에 흩어져 있는 소품과 같이 반복되는 메시가 있는 대규모 장면에서 가장 효과적입니다.
동일한 기본 메시를 사용하여 나무 200그루가 있는 숲 장면을 상상해 보세요. GPU 상주 드로어가 없으면 GPU를 사용하는 드로어 호출이 200개이므로 CPU가 확보됩니다. 이 기능을 사용 설정하면 GPU가 이러한 트리를 지능적으로 인스턴스화하여 그리기 호출을 5~10개로 줄입니다. 이렇게 하면 GPU를 대폭 절약할 수 있으며, 절약한 GPU를 게임플레이 로직이나 물리 계산에 투자할 수 있습니다.
GPU 오클루전 컬링
GPU 오클루전 컬링은 CPU 대신 GPU를 사용하여 숨겨진 객체를 식별하고 렌더링을 건너뜁니다. 다른 객체 뒤에 가려진 (숨겨진) 부분을 자동으로 감지하므로 사용자가 볼 수 없는 부분에 GPU를 낭비하지 않습니다.
이 기능은 객실이 여러 개 있거나, 밀도가 높은 환경 또는 벽, 바닥, 물체가 시야를 자연스럽게 차단하는 건축 장면이 있는 실내 공간에서 특히 유용합니다.
예를 들어 여러 방이 있는 집 환경을 구축한다고 가정해 보겠습니다. 사용자가 거실에 있는데 벽 뒤에 완전히 숨겨진 주방을 완전히 상세하게 렌더링하여 GPU 주기를 낭비할 필요가 없습니다. GPU 오클루전 컬링은 숨겨진 객체의 렌더링을 자동으로 건너뛰므로 실제로 표시되는 항목에 더 많은 성능 예산을 할당할 수 있습니다.
실적 모니터링
이러한 기능을 사용하는 것만으로는 충분하지 않습니다. 또한 최적화의 영향을 정량화하고 변경사항이 실제로 작동하는지 확인할 수 있도록 최적화를 측정해야 합니다.
Performance Metrics API
성능 측정항목 API는 앱의 메모리 사용량, CPU 성능, GPU 성능을 실시간으로 모니터링합니다. 컴포지터 및 런타임 레이어의 포괄적인 데이터를 제공하므로 애플리케이션에서 정확히 어떤 일이 일어나는지 확인할 수 있습니다.
변경하기 전에 기준을 설정하고, 최적화를 적용하고, 영향을 측정하고, 반복합니다. 이 데이터 기반 접근 방식을 사용하면 추측이 아닌 실제로 실적을 개선하고 있다는 것을 알 수 있습니다.
시선 추적 렌더링을 사용 설정하기 전에는 GPU 프레임 시간이 13ms일 수 있으며 이는 11ms 예산을 초과합니다. 시선 추적 렌더링을 사용 설정하고 다시 측정하면 9ms로 떨어지는 것을 확인할 수 있습니다. 이를 통해 4ms의 여유 공간을 확보하여 장면의 세부정보를 추가하거나, 다른 곳에서 시각적 품질을 개선하거나, 더 광범위한 콘텐츠에서 더 원활한 성능을 보장할 수 있습니다.
이러한 측정항목이 없으면 눈을 가리고 최적화하는 것과 같습니다. 성능 측정항목 API는 특정 사용 사례에 실제로 도움이 되는 사항에 관한 진실을 알려줍니다.
프레임 디버거
프레임 디버거는 장면이 프레임별로 렌더링되는 방식을 정확하게 파악할 수 있는 Unity의 내장 도구입니다. 그리기 호출의 시퀀스를 보여주고 이를 단계별로 실행하여 최적화가 올바르게 작동하는지 확인할 수 있습니다.
SRP Batcher가 작동하는지 확인하고 싶으신가요? 프레임 디버거에서 'RenderLoopNewBatcher' 항목을 찾습니다. GPU 상주 드로어가 올바르게 일괄 처리되는지 확인 '하이브리드 배치 그룹' 항목을 찾습니다. 이러한 시각적 확인을 통해 최적화 설정이 실제로 적용되고 있는지 확인할 수 있습니다.
장면의 처음 50개 그리기 호출을 단계별로 실행합니다. 유사한 객체가 일괄 처리되지 않고 개별적으로 그려지는 경우 인스턴스화 또는 일괄 처리가 올바르게 작동하지 않는 것입니다. 프레임 디버거를 사용하면 이러한 문제가 즉시 표시되므로 문제를 해결할 수 있습니다.
추가 최적화
위에서 설명한 최적화 외에도 전체 성능 가이드에서는 몇 가지 추가 최적화도 다룹니다. 간단히 요약하면 다음과 같습니다.
- URP 설정: 모바일 XR의 HDR 및 후처리를 사용 중지합니다. 이러한 기능은 모바일 하드웨어의 성능 비용에 비해 시각적 영향이 최소화되므로, 시각적 차이는 거의 감지할 수 없지만 측정 가능한 성능 향상을 얻을 수 있습니다.
- SRP 일괄 처리기: 동일한 셰이더 변형을 사용하는 재질이 많은 장면의 CPU 오버헤드를 줄입니다. 그리기 호출 간 렌더링 상태 변경을 최소화하면 렌더링에 소요되는 CPU 시간을 크게 줄일 수 있습니다.
- 디스플레이 재생 빈도: 장면 복잡성에 따라 72fps와 90fps 사이에서 동적으로 조정됩니다. 복잡한 시퀀스에서는 안정성을 유지하기 위해 프레임 속도를 낮추고, 간단한 순간에는 매우 부드러운 상호작용을 위해 프레임 속도를 높입니다.
- 깊이/불투명 텍스처: 셰이더 효과에 특별히 필요한 경우가 아니면 사용 중지합니다. 대부분의 애플리케이션에 이점을 제공하지 않고 성능을 낭비하는 불필요한 GPU 복사 작업을 유발합니다.
- URP 렌더링 스케일: 이 설정을 사용하면 성능 향상을 위해 낮은 해상도로 렌더링하거나 시각적 품질 향상을 위해 렌더링을 업스케일할 수 있습니다.
이러한 최적화 및 기타 최적화에 관한 단계별 안내는 Android XR용 Unity 성능 가이드를 참고하세요.
결론
XR 앱의 성능은 단순한 기술적 체크박스가 아닙니다. 편안하고 몰입도 높은 환경과 사용자가 불편함이나 불쾌감을 느끼는 환경의 차이입니다. 지금까지 살펴본 최적화는 최신 XR 기기에서 중요한 프레임 속도 타겟을 달성하기 위한 툴킷입니다.
로드맵은 다음과 같습니다.
- 시선 추적 렌더링 및 Vulkan 서브샘플링으로 시작하세요. 이러한 XR 관련 기능은 즉각적이고 눈에 띄는 GPU 절감을 제공합니다.
- 반복되는 지오메트리 또는 실내 공간이 있는 복잡한 장면이 있는 경우 GPU 상주 드로어와 오클루전 컬링을 추가합니다.
- 성능 측정항목 API로 모든 것을 모니터링하여 변경사항이 실제로 도움이 되는지 확인하세요.
- 추가 성능 헤드룸을 위해 URP 최적화 추가 살펴보기
지속적으로 측정하고 반복하는 것이 중요합니다. 모든 최적화가 모든 프로젝트에 동일한 이점을 제공하는 것은 아니므로 성능 측정항목 API를 사용하여 특정 사용 사례에 실제로 도움이 되는 항목을 명확하게 파악하세요.
다음 단계: 기술 확장
자세히 알아볼 준비가 되셨나요? 다음 리소스를 확인하세요.
계속 읽기
-
제품 소식
모든 개발자의 AI 워크플로와 요구사항은 고유하며, AI가 개발에 어떤 도움을 줄지 선택할 수 있는 것이 중요합니다. 1월에는 Android 스튜디오에서 AI 기능을 구동하는 데 로컬 또는 원격 AI 모델을 선택할 수 있는 기능이 도입되었습니다.
Matthew Warner • 전문 길이: 2분
-
제품 소식
이제 Android 스튜디오 Panda 3가 안정화되어 프로덕션에서 사용할 수 있습니다. 이번 출시를 통해 AI 기반 워크플로를 더욱 세부적으로 제어하고 맞춤설정할 수 있어 고품질 Android 앱을 그 어느 때보다 쉽게 빌드할 수 있습니다.
Matt Dyor • 3분 읽기
-
제품 소식
Google은 가장 강력한 AI 모델을 주머니 속 Android 기기에 직접 제공하기 위해 최선을 다하고 있습니다. 오늘 최신 최첨단 개방형 모델인 Gemma 4의 출시를 발표하게 되어 매우 기쁩니다.
Caren Chang, David Chou • 3분 읽기
소식 받아 보기
Android 개발 관련 최신 정보를 이메일로 받아 보세요.