Game/Unity

[유니티] VR setting with Google Cardboard (2)

nowkoes 2023. 11. 4. 15:50

VR 빌드 세팅

 

출처: docs.unity3d.com

 

 Edit -> Project Setting을 들어가 Player로 이동하자. 그리고 Resolution and Presentation을 클릭해 해상도를 설정하자. 먼저 Optimized Frame Pacing 기능을 끄자. 해당 기능은 프레임 속도의 편차를 줄이기 위해 프레임을 균등하게 분배해 부드러운 게임 플레이를 구현하는 기능이다. 하지만 VR에서는 이 기능이 오히려 성능 저하를 일으킬 수 있으므로 비활성화하는 것이 좋다. 이는 VR이 낮은 지연 시간과 빠른 반응 속도가 중요하다는 점에서 기인한다. 

 

 또한 기본 방향을 가로 왼쪽 또는 가로 오른쪽으로 설정하면 되는데, 일반적으로 VR 헤드셋은 두 눈으로 볼 때 자연스러운 가로 화면을 제공하기 때문이다. 

 

출처: docs.unity3d.com

 

 이제 Others Settings로 이동하여 API와 아키텍처 등을 조정하자. Minimum API Level을 API level 24로 조정하고, Target API Level을 31로 조정하자. 그리고 스크립팅 백엔드로 IL2CPP로 설정하는데, 이는 .NET 중간 언어를 변환하여 앱의 성능을 향상하고, 다양한 플랫폼에 걸쳐 호환성을 제공하기 위함이다. 또한, 보다 나은 보안과 코드 최적화를 제공한다.

 

출처: docs.unity3d.com

 

 다음은 아키텍처를 ARM64과 ARMv7을 설정하자. 이 둘은 대부분의 스마트폰 CPU 아키텍처기 때문에, 웬만한 휴대폰에서 잘 동작하게끔 해 준다. 또한 데이터를 서버에 전송할 필요가 있을 수 있으므로 인터넷 연결 기능을 Require로 설정하자.

 

 

 

 마지막으로 Publishing Settings로 들어가서 Custom Main Gradle Template과 Custom Gradle Properties Template을 설정하자. 해당 기능들을 체크하고, Assets/Plugins/Android/mainTemplate.gradle에 dependencies 항목에 다음 코드를 추가하자.

implementation 'androidx.appcompat:appcompat:1.4.2'
implementation 'com.google.android.gms:play-services-vision:20.1.3'
implementation 'com.google.android.material:material:1.6.1'
implementation 'com.google.protobuf:protobuf-javalite:3.19.4'

 

 첫 번째 줄은 안드로이드 앱의 하위 호환성을 지원하고, 새로운 안드로이드 디자인 요소와 테마를 구형 버전과의 호환성을 유지하기 위해 필요하고, 두 번째 줄은 구글의 모바일 서비스 중 비전 관련 기능을 앱에서 사용할 수 있게 하기 위해 필요하다. 세 번째 줄은 구글의 Material 디자인 구성 요소를 안드로이드 앱에서 사용해 줄 수 있게 해 주고, 마지막 줄은 프로토콜 버퍼 라이트 버전으로, 효율적인 데이터 직렬화를 위해 필요하다. 즉, 안드로이드 플랫폼과 구글 서비스와의 호환성을 유지해 주는 라이브러리다.

 

android.enableJetifier=true
android.useAndroidX=true

 

 다음으로 gradleTemplate.properties를 열고 다음 코드를 추가하자. 첫 번째 설정은 AndroidX로의 마이그레이션(한 환경, 시스템, 버전 또는 형식에서 다른 환경, 시스템, 버전 또는 형식으로 데이터나 애플리케이션을 옮기는 과정)이 필요한 라이브러리들이 AndroidX 호환 라이브러리로 자동 변환되도록 하기 위해 필요하다. 즉, 구 버전의 Support 라이브러리를 사용하는 종속성이 있을 경우, 이를 AndroidX와 호환되게 해준다. 마지막 설정은 프로젝트에서 AndroidX를 사용하기 위해 필요하다. 

 

 

 그 후 마지막으로 XR Plug-in Management에서 Cardboard XR Plugin을 체크해 주고 빌드하면 된다. 


※ 오른쪽 화면이 분할되거나 출력이 이상한 경우

 

 처음 빌드했을 때, 위의 사진과 같이 오른쪽 화면이 분할돼서 나왔었다. 빌드 후 발생한 화면 분할 문제는 그래픽 렌더링과 관련이 있을 가능성이 높다. 이러한 문제는 그래픽 API, 드라이버, 렌더링 파이프라인 설정 또는 셰이더 코드와 같은 여러 요소로 인해 발생할 수 있다.

 

Graphic API Text Controller 스크립트 일부


 만약 유니티에서 빌드된 앱이 Vulkan을 사용하면서 화면 분할과 같은 그래픽 문제가 발생한다면, 다음 단계를 통해 문제를 해결할 수 있다.

 

 

 프로젝트 세팅에서 Vulkan Settings 항목의 렌더링 중 디스플레이 회전 적용 체크박스를 해제한다. 이 기능은 GPU에서 화면의 방향을 조정하여 렌더링 하는 기능이다. 일반적으로 모바일 기기에서는 디스플레이의 물리적 방향이 고정되어 있지 않고, 장치의 방향에 따라 화면이 회전한다. 이 설정이 활성화되면, GPU는 렌더링 된 콘텐츠를 화면의 현재 방향에 맞게 회전시키는 작업을 수행한다.

 

 하지만 화면 회전 처리를 GPU에 맡기면 렌더링 파이프라인의 복잡성과 오버헤드가 증가한다. 또한 일부 장치 또는 게임 엔진에서는 이 기능이 제대로 작동하지 않아, 화면이 올바르게 회전하지 않거나 예상치 못한 그래픽 문제가 발생할 수 있다. 따라서 GPU의 작업 부하를 줄여주어 렌더링 성능을 최적화하기 위해 해제하였다.

 

 

 그리고 만약 Unity 2021.2 이상이면 텍스처 압축 형식을 ASTC에서 ETC2로 바꾼다. ASTC 방식이 ETC2 보다 더 고급 압축 옵션을 제공하고, 높은 압축률과 품질을 가질 수 있지만 모든 안드로이드 장치가 ASTC를 지원하는 것은 아니다. 따라서, ASTC의 이점을 활용할 수 있는 최신 장치를 타겟으로 하지 않는다면, 더 넓은 호환성을 제공하는 ETC2를 선택하는 것이 좋다. 

 

실행 결과

반응형