USDZ 형식의 3D 모델을 Model I/O로 로드 SceneKit에서 이용

5161 단어 iOSSwiftARKitUnityVR
WWDC18에서 발표된 AR 콘텐츠의 새로운 포맷 "USDZ"입니다만, 같은 WWDC에서의 세션 "Integrating Apps and Content with AR Quick Look"에서는 QLPreviewController・SceneKit에서 이용하기 위한 구현 방법에 대해서는 제시되어 있지 않았습니다 1

그러나 'ARKit 어플리케이션의 구현을 하지 않아도 AR 체험을 제공할 수 있는 포맷'이라는 점이 USDZ의 가장 임팩트가 있는 점이라고 해도 그것을 포함해 '유니버설' 2 이라는 점이 USDZ라는 새로운 포맷의 판매인 것이어서, ARKit에서의 이용 방법(=SceneKit에서의 이용 방법)에 대해서 명시되지 않는 것은 한손 떨어짐감을 느끼고 말았습니다. 「브라우저나 프리뷰로 AR 체험을 제공하기 위한 「전용」포맷」은 아닐 것.

아마도 USDZ는 SceneKit에서의 사용만 보면 USD와 같고, USD 자체는 Model I/O로의 로드가 iOS 10에서 이미 서포트되고 있었으므로, 거기는 자명(새로운 피처는 아니다)라고 해설하지 않는다 그럴 것입니다.

그렇다고는 해도 나와 같이 「로, USDZ라고 ARKit(SceneKit)에서는 어떻게 이용하는 것」라고 구구한 쪽(앞으로 구구하는 분)은 많다고 생각되므로, 여기에 실장을 나타내 둡니다.

구현



.usdz 파일에서 MDLAsset 초기화



읽기에는 Model I/O 프레임워크를 이용합니다. 응용 프로그램 번들에서 .usdz 파일의 URL을 MDLAsset 이니셜 라이저에 전달하여 초기화하기 만하면됩니다.
guard let url = Bundle.main.url(forResource: name, withExtension: "usdz") else { fatalError() }
let mdlAsset = MDLAsset(url: url)

덧붙여서, MDLAsset 가 서포트하고 있는 (로드 가능한) 파일 형식은, MDLAssetcanImportFileExtension(_:) 로부터 조사할 수가 있습니다. 같은 방법의 참조에는 지원하는 파일 형식이 있습니다. 3
  • Alembic
  • .abc

  • Universal Scene Description
  • .usd , .usda , .usdc

  • Universal Scene Description (Mobile)
  • .usdz

  • Polygon
  • .ply

  • Wavefront Object
  • .obj

  • Standard Tessellation Language
  • .stl


  • MDLAsset에서 SCNScene 초기화



    SCNScene 참조를 보면 다음과 같은 이니셜 라이저가 있습니다.
    convenience init(mdlAsset: MDLAsset)
    

    그러나, 이 이니셜라이저는, import ARKit 이나 import SceneKit , import ModelIO 하고 있어도 사용할 수 없습니다. 다음과 같이 SceneKit.ModelIO 를 가져와야 합니다.
    import SceneKit.ModelIO
    

    방금 만든 MDLAsset 객체를 이니셜 라이저에 전달하고 SCNScene를 초기화합니다.
    let scene = SCNScene(mdlAsset: mdlAsset)
    

    그리고는 통상대로( .scn 파일등으로부터 SCNScene 를 초기화한 경우와 같다)의 SceneKit 의 구현이 됩니다.

    샘플 코드



    ARKit-Sampler에 Apple 공식 배포 usdz 파일을 ARKit에서 사용하는 샘플을 추가했습니다.
  • htps : // 기주 b. 코 m / 슈 223 / 아 R 키 t mp ぇ r



  • (본 샘플은 iOS 11에서 작동하고 있습니다)



    "usdz is supported on iOS and macOS, in SceneKit and Model I/O"라고 지원되고 있다는 것만은 사랏이라고 말했지만, 이것만.

    USDZ의 기반이되는 형식 USD는 "Universal Scene Description"의 약자입니다.

    Twitter에서 Gemmbu 님에게 가르쳐 주셨습니다.

    좋은 웹페이지 즐겨찾기