Android AR, ARCore, SceneView에 대하여

·2023년 6월 27일
2

해당 글은 ARCore에 대해서 공부하면서 노션에서 작성한 것을 그대로 복사하여 가져온 것입니다. AndroidStudio 내에서 AR를 구현하는 것에 대한 한글 최신 자료가 없어서 이곳저곳에 떠돌아다니며 나름대로 정리한 내용으로 저처럼 이미 deprecated된 2020년 쯤의 sceneform자료와 Android AR를 검색하면 나오는 seceneform 1.5.0 이하 버전 구글 공식문서에 속아 힘들어 할 미래의 AR 초보분들을 위해서 최신정보(2023.06.27 기준)가 검색이 되도록 기록을 남깁니다.

1. obj & fbx & glb & gltf

📍개요

네 가지의 파일 확장자는 3D 모델 파일의 확장자이다. 더 자세한 3D 모델 확장자가 존재하지만, ARCore에서 자주 언급되는 네 가지만을 소개한다. (확장자들에 대한 상세 정보)

📍설명

  1. obj : 그래픽의 기본적인 정보인 UV 데이터, 버텍스, 노말 등만 저장
    1. 가장 처음으로 만들어진 확장자
    2. 애니메이션 동작 저장 불가능
    3. 복잡하고 잡스러운 정보를 저장하지 않아 fbx보다 가볍고 깔끔함
  2. fbx : obj에 비해 다양한 정보를 함께 저장
    1. 애니메이션 동작 저장 가능
  3. glb : 3D 모델 정보를 바이너리의 형태로 저장
    1. 하나의 파일로 출력

    2. 기타 API를 사용하여 응용 프로그램의 런타임 처리를 최소화

      ex) WebGL

    3. 최적화가 이루어져 가벼움

      1. 웹 분야에서 자주 사용
  4. gltf : 3D 모델 정보를 JSON 형식으로 저장
    1. 여러 개의 파일 출력 → 결과물 = 파일 그룹

    2. 기타 API를 사용하여 응용 프로그램의 런타임 처리를 최소화

      ex) WebGL

    3. 최적화가 이루어져 가벼움

      1. 웹 분야에서 자주 사용

📍ARCore 접근 방식에 따른 주 사용 확장자 분류

ARCore


  • obj
  • fbx

SceneView 라이브러리


  • glb
  • gltf

2. ARCore

📍개요

AR용 Google Play Service으로 구글에서 개발한 AR 소프트웨어 개발 키트이다. AR과 관련된 API를 제공하며 최근에 지리 정보 API(Geospatial API)도 추가되었다. 다른 여타 구글 API와 마찬가지로 Google Cloud를 통해 API를 관리할 수 있다.

ARCore 및 지원되는 개발 환경 개요  |  Google for Developers

📍지원기기

ARCore를 이용하기 위해선 OpenGL ES가 필요하고 Android7.0(에뮬레이터 8.1이상)이상이 필요하다. 따라서 API 수준은 필수로 ARCore를 사용한다면 24이상, 선택적인 ARCore라면 19이상으로 제한을 둬야 한다.

반드시 테스트하기 전에 공식 문서로 가서 테스트 기기가 지원하는지 확인해야 한다. 안 그러면 테스트 자체가 불가능할 수 있다. ARCore도 비교적 고사양 스마트폰을 필요로 해서 지원하는 기기가 일반적인 API보다 훨씬 적다. ARCore를 지원해도 AR 관련 API 중 특정 하드웨어 장치가 필요한 (특히 depth API) API가 존재한다.

📍예제

//ARCore 라이브러리
implementation 'com.google.ar:core:1.37.0'
//obj 파일을 읽기 위한 라이브러리
implementation 'de.javagl:obj:0.2.1'
//카메라 권한
<uses-permission android:name="android.permission.CAMERA"/>
  <!-- Limits app visibility in the Google Play Store to ARCore supported devices
       (https://developers.google.com/ar/devices). -->
  <uses-feature android:name="android.hardware.camera.ar" android:required="true"/>
  <uses-feature android:glEsVersion="0x00020000" android:required="true" />
  <uses-feature
      android:name="android.hardware.camera"
      android:required="true" />

<application
...
...
...>
	<activity
		...
		.../>
	//ARCore 사용 명시 및 ARCore 사용이 필수(required)인지 선택(optional)인지 명시 
	<meta-data android:name="com.google.ar.core" android:value="required" />
</application>

ARCore를 기본 제공 라이브러리로 다루는 예제로 Open GL를 다루는 함수를 통해 그래픽 렌더링과 ARCore를 다루면서 발생하는 세션의 라이프사이클을 다룬다. 예제의 코드는 복잡하고 관련 지식이 없다면 파악하기 어렵다는 특징을 가지고 있다.

개요에 북마크되어 있는 공식문서에서 예제와 지원기기에 대한 정보를 알아볼 수 있다.


3. SceneView 라이브러리

📍개요

https://github.com/SceneView/sceneview-android

Open GL없이 ARCore 앱을 쉽게 빌드할 수 있도록 만들어진 3D 프레임워크로 구글이 관리한다. 기본적인 상황에서 ARCore를 다루는 것보다 편의성이 높고 AR를 다루는데 필수적으로 필요한 요소들을 자동으로 import해주며 권한 설정을 해준다는 특징이 있다.

GitHub의 README가 공식 문서라고 봐도 됩니다.

+추가 문서를 찾았습니다.

📍역사

  • Google Sceneform Tools(Beta) : 지원종료
    • 안드로이드 스튜디오 3.1~ 3.4에서 사용하던 플러그인으로 현재는 안드로이드 스튜디오로 해당 플러그인을 설치하면 IDE 버전이 안 맞는다는 오류가 뜨며 다운그레이드를 시켜 플러그인을 적용하면 약간 운영체제 기반(리눅스)의 경우 심각한 에러를 초래할 수 있으므로 조심할 것.
    • 우분투에서 혹여나 제대로 작동시킬 수 없을까하고 시도했다가 제대로 꼬여서 Shell 탐험을 두 시간 했습니다. 혹여나 리눅스를 사용하시는 분이라면 시도하지 마시길 바랍니다.
      • 만약에 혹여나 경고를 무시하고 시도했다가 이전 버전 안드로이드 스튜디오가 실행되지 않는 리눅서를 위한 해결방법(우분투 22.04.2 LTS 기준)
        1. 터미널을 실행시키고 home/사용자명으로 이동합니다.
        2. .AndroidStudioN.N으로 된 옛 버전 안드로이드 스튜디오 디렉토리를 찾아서 이동합니다. (N.N는 버전을 뜻하는 숫자, 3.4버전이면 .AndroidStudio3.4이십니다.)
        3. config 디렉토리안의 plugins 디렉토리로 이동합니다.
        4. google-sceneform-tools(정확한 이름은 기억 안 납니다.)라고 적힌 걸 삭제합니다.
        5. AndroidStudio를 실행하면서 쌓인 에러를 처리합니다. (플러그인을 삭제하기 전에 ./studio.sh를 하고서 나오는 에러문에 해결법이 있습니다.)
        • 아무리 리눅스여도 최신 버전에서는 그럴 일은 거의 없을 거라 생각하지만, 이 부분을 지나서 컴퓨터 운영 자체에 문제가 생길 정도로 꼬였다면 어느 부분이 꼬였냐에 따라서 대처가 달라질 겁니다. 일단 눈 앞의 오류문을 읽고 대처하시되 이것저것해도 안 된다면 중요 파일만 뽑아서 포맷하는 것도 하나의 방법일지도 모릅니다.
      • 운영체제가 다른 이들을 위한 해결법 요약&안드로이드 스튜디오 내에서의 해결법
        • 혹여나 리눅스가 아닌데 시도해서 이전 버전 안드로이드 스튜디오가 막힌 다른 운영체제 분들을 위한 요약
          • 이전 버전 안드로이드 스튜디오가 저장된 디렉토리로 가서 플러그인이 저장된 디렉토리로 이동해 google-sceneform-tools(정확한 이름은 기억 안 납니다.)라고 적힌 걸 삭제
          • 안드로이드 스튜디오가 저장된 위치는 리눅스랑 다를 수 있지만, 대체로 그 안의 디렉토리의 위치는 같습니다.
        • 안드로이드 스튜디오가 막힌 건 아닌데 매번 실행할 때마다 플러그인 에러문이 뜨시는 분들을 위한 해결법
          • 안드로이드 스튜디오 설정에 가셔서 플러그인으로 이동하시고 Google Sceneform Tools(Beta) 삭제
  • Google Sceneform SDK 1.0.0-1.15.0 : 지원종료
    • 오픈 소스 X
    • fbx, obj를 sfa, sfb라는 Sceneform 전용 형식으로 변환 가능
  • Google Sceneform SDK 1.16.0 : 지원종료
    • 이 버전 이후로 오픈소스화
    • 기존의 Sceneform전용 형식말고 gltf를 지원
  • Google Sceneform SDK 1.17.0 : 지원종료
    • 릴리즈가 안 됨 → 구글에서 사용을 금지함
  • Google Sceneform SDK 1.17.1 : 1.15.0 버전과 동일, 지원 종료
    • Sceneform 자체의 업데이트 종료를 선언
  • Google SceneView 1.0.0~1.0.9 : 코틀린에서의 Sceneform replacement
    • 단순 3D 렌더링 버전과 AR 지원 버전으로 나뉨
    • Jetpack Compose를 지원하며 xml 레이아웃(View Activity)에서도 사용 가능
    • 3D Model Viewer인 ModelNode라는 특수 클래스가 존재하여 이를 이용해 3D 모델을 다룰 수 있음
    • AR Model Viewer는 ArModelNode라는 특수 클래스로 다룸
    • Model Viewr 클래스의 loadModelAsync()메소드를 통해 glb, gltf 확장자로 변환된 모델을 불러올 수 있음

📍예제

GitHub - Gebort/FESTU.Navigator: Kotlin AR app for indoor navigation

라이브러리 제작자 예시

Create AR app in Android Studio under 15 minutes | Beginner's Tutorial

AR앱 튜토리얼 (초보자용)


4. assets 디렉토리 추가

안드로이드 스튜디오 코틀린 에셋 파일 (기초 개념)

📍이유

  • assets에 저장된 파일은 읽기만 가능하므로 보안에서 일정 부분 유리하다. (외부나 내부에서 쓰기를 당하지 않음)
  • 기본적으로 파일을 압축해 저장하기 때문에 데이터를 읽을 때 압축하는 과정이 없다.
    • 읽기 속도가 빠르고 CPU 부하가 적음
  • 압축 제외 설정
    android{
    ...
    ...
    aaptOptions{
    	noCompress '확장자명'
    	}
    
    }

    📍추가하는 법

    1. 안드로이드 스튜디오의 Project에서 app을 우클릭하여 new→Folder→Assets Folder 선택
    2. 저장하는 데이터를 분류하기 위한 패키지 생성 후 데이터 분류하여 저장

5. 3D 모델 다운로드

저작권 위반을 피하기 위해선 모든 사이트에서 저작물에 대한 라이센스를 주의해야 한다.

라이센스별로 제한된 사항을 확인하기 힘들 경우 CC0 라이센스(저작권 없는 무료 저작물)를 가진 저작물만 사용하세요.

  1. sketchfab
    1. 다양성 : 높음
    2. 3D 모델, AR, VR등에 쓰이는 모델을 얻을 수 있으며 유료 마켓도 있지만, 무료 마켓도 존재
    3. 단, 각 제품마다 저작권 라이센스가 존재하므로 반드시 라이센스를 읽고 사용할 것
      1. 작품의 다운로드 버튼을 누르면 제작자에 대한 Credit을 복사할 수 있는 버튼이 존재하므로 안전하게 모든 저작물에 대한 Credit을 가져와 저장해놓고 저작권 표시가 필요한 저작물에 표시해줍시다.
  2. Turbosquid
    1. 다양성 : 낮음 (건축물 조경 위주)
    2. 유료, 무료 마켓 존재
    3. 라이센스 주의
  3. Mixamo
    1. 다양성 : 낮음 (사람 및 애니메이션 위주)
    2. 회원가입만 하면 무료
    3. 주로 유니티에서 많이 사용함
      1. 대다수가 fbx 형식만 존재하므로 fbx를 glb나 gltf로 변환해주는 프로그램이 필요할 수 있음
      2. 캐릭터를 직접 업로드해서 애니메이션을 덮는 것이 가능하다고 한다.
    4. 라이센스 주의
  4. renderhub
    1. 다양성 : 높음

    2. 무료자료 수 <<<<<< 유료자료 수

    3. 라이센스 주의 및 패러디, 2차 창작 작품 혹은 기존 저작물의 저작권을 무시한 저작물인지 확인 필요

  5. Free 3D
    1. 다양성 : 측정 및 체감 실패(특유의 분류 때문에 돌아다니다가 도중 포기)
    2. 어떤 형식으로 만들어진 모델인지 혹은 어디서 만들었는지(어떤 그래픽 프로그램 사용)에 따라 분류한다.
    3. 무료 작품 수 >>>>>> 유료 작품 수
  6. CGTrader
    1. 다양성 : 높음
    2. 무료 마켓과 유료 마켓이 공존한다.
    3. 로얄티 프리 : 로열티를 지불하지 않고 사용할 수 있는 저작물
profile
안드로이드 네이티브 앱 개발자를 지망하는 대학생입니다.

0개의 댓글