Unity 검색

Quest의 빌드 시간 및 반복 작업 속도 개선

Man wearing VR headset
Man wearing VR headset
다루는 주제
공유

Meta 팀과 함께 빌드와 반복 작업에 소요되는 시간을 줄일 수 있는 VR 게임 개발 툴과 기술을 살펴봤습니다.

반복 작업 속도를 줄이는 Unity 베스트 프랙티스

유니티와 협력하는 Quest 개발자 팀은 최신 버전 Unity가 Quest를 대상으로 한 빌드 과정에서 성능과 반복 작업 속도에 어떤 영향을 주는지 알고 싶었습니다. 유니티와의 협업을 통해 팀은 LTS와 테크 스트림을 비롯해 다양한 에디터 버전을 테스트하여 성능을 비교했습니다. 성능 비교 결과는 Oculus 개발자 블로그에서 볼 수 있으며, Oculus 개발자 기술 자료에서 더 자세한 내용을 확인할 수 있습니다.

이 포스팅은 Unity 에디터의 개선점을 소개하고, Quest 개발자가 VR 경험을 구축하는 데 걸리는 시간을 줄일 수 있도록 안내합니다. 이번 변경 사항으로 인해 프로젝트를 일부 수정해야 할 수 있습니다. 테스트 프로젝트에 대한 자세한 내용과 이 기술 자료에 포함된 데이터는 Oculus 개발자 기술 자료 부록을 참조하시기 바랍니다.

최신 Unity 버전 유지

유니티는 매년 Unity 버전의 빌드 시간을 놀라울 정도로 많이 줄여 왔습니다. 예를 들어 Quest 팀은 테스트 프로젝트 중에 다음과 같은 수치를 확인했습니다.

  • Unity 2019에서 2020으로 업그레이드 시 반복 작업 시간 33~42% 감소
  • Unity 2020에서 2021로 업그레이드 시 반복 작업 시간 8~16% 감소

따라서 유니티는 더 빠른 빌드 시간과 더 높은 안정성을 위해 최신 LTS 버전을 권장하고 있습니다. 여기에서 최신 LTS로 업그레이드하는 방법을 알아보세요.

 

Oculus Link

Oculus Link를 사용하면 프로젝트의 반복 작업을 빠르게 진행할 수 있습니다. 헤드셋을 컴퓨터에 연결하고 에디터 내에서 씬을 시작하면 기기의 입력과 동시에 헤드셋에서 결과를 바로 확인할 수 있습니다. 이 방법은 코드의 논리 변경이나 에셋 포지셔닝, 에셋 업데이트 등 변경 사항이 기기에 종속되지 않는 경우에 유용합니다. 셰이더와 렌더링, 기기 특유의 로직 등 기기에 종속된 요소에 대한 반복 작업에는 상대적으로 유용성이 떨어집니다.

Quest에서 Oculus Link 사용하기

스크립트 전용 패치

개발자가 코드를 변경했을 때 생성된 APK에 패치를 적용하는 옵션을 추가했습니다. 이러한 유형의 빌드는 변경 사항을 빌드할 때 걸리는 시간을 대폭 줄여줍니다. 패치 빌드 방법에 대한 자세한 내용은 앱 패치 기술 자료에서 확인할 수 있습니다.

다음 항목을 반드시 고려하세요.

  • 우선 전체 빌드를 만들어야 합니다.
    • 후속 빌드에서 패치를 사용할 수 있게 됩니다.
  • IL2CPP를 사용하는 경우, Player settings로 이동하여 Strip Engine Code 옵션이 선택 해제(비활성화)되어 있는지 확인해야 합니다.
    • 이는 반복 작업을 위한 조치입니다. 제작 시 이 작업을 어떻게 처리할지 결정하세요.

테스트 프로젝트 결과, APK에 에셋이 있는 프로젝트는 변경된 코드만 새로 빌드하면 되므로 빌드 시간을 45% 단축할 수 있다는 사실을 확인했습니다.

 

Unity x Quest data table

어드레서블

어드레서블 에셋 시스템은 에셋 제작 과정을 코드 제작 과정과 분리합니다. 따라서 변경 사항에만 집중하여 빌드에 소요되는 시간을 줄일 수 있습니다.

에셋 번들을 기반으로 구축된 어드레서블 에셋 시스템은 전반적인 에셋 관리를 단순화합니다. 이 시스템은 에셋 그룹화를 간소화하고 번들에 종속성이 포함되게 합니다.

어드레서블이 에셋을 원격으로 로드할 수 있으므로 개발 머신에 로컬 에셋 서버를 설정하고 에셋을 기기에 직접 제공할 수 있습니다. 다시 말해 에셋을 수정한 후 어드레서블을 빌드하고 기기의 앱을 다시 시작하면 됩니다. 기기에 앱을 다시 배포할 필요가 없습니다.

다음은 Unity LTS 2020.1.15f1 기본 프로젝트와 어드레서블 프로젝트를 비교한 결과입니다.

Unity x Quest data table 2

코드 빌드에서 에셋을 분리하면 APK 빌드 속도가 50% 이상 빨라집니다. APK를 다시 빌드할 필요 없이 에셋만 수정하는 경우 속도가 약 75% 빨라집니다.

에셋은 또한 공유된 머티리얼, 프리팹, 그리고 이들이 사용하는 메시를 기반으로 네 개의 그룹으로 분리됩니다. 그룹이 작을수록 다시 빌드하는 데 시간이 적게 걸립니다. 또한 여러 그룹에서 종속성이 중복되지 않도록 하는 것이 중요합니다. Material1에 종속된 Scene1과 Scene2를 예로 들어 보겠습니다. Scene1은 Group1에 있고 Scene2는 Group2에 있습니다. Material1이 그룹에 명시적으로 포함되지 않은 경우, 두 그룹에 모두 포함됩니다. 이 경우 Material1을 업데이트할 때 Group1과 Group2도 함께 업데이트해야 합니다. 두 개의 Material1 인스턴스가 존재할 수 있으며, 메모리 추가 또는 배칭 방지로 인해 런타임 시 잠재적인 문제가 발생할 수 있습니다. 어드레서블 분석 툴을 사용하여 Material1을 검증할 수 있도록 공유 그룹에 두는 것이 좋습니다. 자세한 내용은 여기에서 확인할 수 있습니다.

엣지 케이스

셰이더

테스트를 통해 여러 씬에 동일한 셰이더를 사용하는 경우 셰이더를 수정하면 빌드 시간이 늘어날 수 있다는 사실을 확인했습니다. 어드레서블 시스템은 필요한 배리언트를 확인하기 위해 셰이더에 종속된 각 씬을 로드 및 언로드합니다. 1,000개 이상의 씬이 있는 프로젝트에서는 이로 인해 빌드 시간이 길어집니다.

따라서 번들이 해당 씬의 머티리얼을 명시적으로 포함하도록 변경되었습니다. 즉, 머티리얼을 사용하는 특정 씬을 기반으로 그룹에 머티리얼을 추가했습니다. 그 결과로 어드레서블 시스템에서 머티리얼을 확인할 때 각 씬을 열고 멈추지 않아도 됩니다.

Non-Recursive Dependency Calculations를 사용하려면 Addressable settings를 변경해야 합니다. Addressable Asset Settings 파일에서 설정하거나, Windows > Asset Management > Addressables > Settings로 이동하여 설정할 수 있습니다.

테스트 결과는 다음과 같습니다.

Unity x Quest data table 3

어드레서블 설정 방법

  1. 어드레서블 그룹을 설정합니다.
    • 로컬 그룹과 원격 그룹을 설정합니다.
  2. 카탈로그를 원격으로 변경합니다. 
    • 타임스탬프를 사용하지 않도록 카탈로그 버전을 설정합니다. 빌드가 만들어지면 항상 같은 카탈로그 파일 이름이 로드됩니다. 파일 이름은 APK에 저장됩니다. 카탈로그 설정 섹션을 참고하시기 바랍니다.
  3. 로컬 호스팅과 개발 반복 작업을 위한 프로파일을 생성합니다.
    • 로컬 그룹의 빌드 및 로드 경로를 원격 그룹과 동일하도록 설정합니다.
  4. 어드레서블을 빌드합니다.
  5. 클라이언트를 빌드하고 배포합니다.
  6. 어드레서블의 모든 에셋과 씬, 셰이더를 변경하더라도 어드레서블만 다시 빌드하면 됩니다.
    • 기기에서 앱을 다시 시작하면 최신 변경 사항이 적용됩니다.
    • 앱에서 일부 리로드 기능을 설정할 수 있지만, 이를 위해서는 추가적인 로직을 구현해야 합니다. 런타임 시 콘텐츠 업데이트를 참조하시기 바랍니다.

OVR QSP(Quick Scene Preview)

현재 프로젝트가 어드레서블을 사용하도록 변환하는 데 너무 많은 시간이 걸린다면 더 빠른 솔루션을 사용할 수 있습니다. Meta 팀은 프로젝트를 번들로 나누고 기기에 직접 푸시할 수 있는 OVR Quick Scene Preview라는 툴을 개발했습니다.

아래 도표를 통해 Unity 2020 LTS와의 결합 시에 이 툴이 구현하는 기능을 데이터 포인트로 확인할 수 있습니다.

Unity x Quest data table 4

클린 빌드를 제외한 모든 영역에서 53% 이상 개선되었습니다. 초기 빌드를 만드는 데에는 더 많은 시간이 들지만, 후속 빌드에서 상당한 시간을 단축할 수 있습니다.

더 자세한 내용

에디터 성능과 반복 작업 시간 측면에서의 개선은 계속해서 이루어지고 있습니다. 개선 사항을 직접 테스트해 보시기 바랍니다. 프로젝트 중간에 업그레이드하는 과정이 복잡할 수 있기 때문에 최신 LTS를 도입하는 것과 성능 확보 사이의 균형을 신중하게 고려해야 합니다. Unity Hub를 사용하면 여러 Unity 버전에서 프로젝트를 테스트하여 업그레이드와 관련된 내용을 확인할 수 있습니다. 자세한 내용은 Unity 워크플로 속도 향상에 관한 블로그 포스팅을 확인하시기 바랍니다.

다루는 주제