Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
48
Help us understand the problem. What is going on with this article?
@arumani

Unity ARKit Pluginのチュートリアル日本語訳

More than 3 years have passed since last update.

この文章は何か

Unity ARKit Plugin(レポジトリ)のプロジェクト直下にあるTUTORIAL.txtの日本語訳です。
現時点(2017/06/07)では、プラグインについての説明はこの文章くらいしか存在しないようなので読んでみました。

注意点

  • そのままの翻訳ではなく、意訳やソースを見ての補足が混じっている点ご了承下さい。
  • 文中のリンクはレポジトリへの該当ファイル/該当業のURLを貼りましたが、バージョンが変わるとURLが変わると思いますので、より新しいバージョンがリリースされていた場合はそちらを参照下さい。

本文

  1. ARKitの概要についてはここを読む。このUnityプラグインは、ARKitのネイティブインタフェースに対応するAPIを提供する。

  2. PluginのUnityプロジェクトに含まれるサンプルシーンを見るとアプリの作り方がわかる。UnityARSessionNativeInterface.csNativeInterface フォルダが最も低レベルなAPI。以下で詳細を説明する。

  3. UnityARSessionNativeInterface.GetARSessionNativeInterface() でネイティブのsessionインタフェースを取得する(以下、 m_session と記載)。UnityARCameraManager.cs も参照。

  4. m_session.RunWithConfig(config) でARSessionを設定する。configは用途に応じて ARKitWorldTrackingSessionConfiguration (6DOF) または ARKitSessionConfiguration (3DOF)を指定する。また、開始済みのsessionを m_session.RunWithConfigAndOption(config, option) のoption指定でリセットする事もできる。UnityARCameraManager.cs も参照。

  5. update毎にm_session.GetCameraPose()を呼ぶ事で、カメラのpositionとrotationを取得する事ができる。以下のように、Unityシーン内の座標系に変換するユーティリティ関数もある。UnityARCameraManager.cs も参照。

    camera.transform.localPosition = UnityARMatrixOps.GetPosition(matrix);
    camera.transform.localRotation = UnityARMatrixOps.GetRotation (matrix);

  6. update毎にm_session.GetCameraProjection ()を呼ぶことでカメラの射影パラメータ(projection parameters)を取得する事ができるので、camera.projectionMatrix をUnityカメラに設定する

  7. シーンのMain CameraにUnityARVideoコンポーネントを追加し、inspectorでClear MaterialフィールドにYUVMaterialを設定する。UnityARVideo.csの該当部分

  8. ここまで来れば、シーンに3Dオブジェクトを置いて端末を移動させてそれを周りから眺める事ができるようになる。

  9. HitTest API(このあたり)を使うと、シーン内でインタラクションを実現できる。ヒットした結果の種別のソース説明にある。この情報を使ってobjectをどこに置くか決める。UnityARHitTestExample.csも参照。

  10. 平面検出イベントを受け取るには、ARAnchorAddedEventARAnchorUpdatedEventARAnchorRemovedEvent をフックする。これらのdelegateは全てARAnchorUpdated(ARPlaneAnchor anchorData)の形式をとる。この平面に応じてGameObjectを描画する事もできるし、単に基準(anchor)として用いても良い。UnityARAnchorManager.csも参照

  11. ポイントクラウド情報を含むARKitのフレーム更新を受け取りたい場合、ARFrameUpdatedEventをフックする。これはARFrameUpdate(UnityARCamera unityarcamera)の形式をとる。このunityarcamera.pointCloudDataからポイントクラウド情報が取得できる。 PointCloudParticleExample.cs も参照。

  12. 上記のARFrameUpdatedEventはカメラの位置/回転/射影行列(projection matrix。手順5,6の代わりとなる)の更新にも利用できるが、その場合UnityのupdateタイミングではなくARKitのupdateタイミングで行われる事に注意する。また、正しい座標系での結果を得るためにユーティリティ関数を使う必要があるかもしれない。

  13. 周囲の明るさ推測機能を使うには、update毎にm_session.GetARAmbientIntensity()を呼び出す。UnityARAmbient.csも参照。

48
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
cyberagent
サイバーエージェントは「21世紀を代表する会社を創る」をビジョンに掲げ、インターネットテレビ局「AbemaTV」の運営や国内トップシェアを誇るインターネット広告事業を展開しています。インターネット産業の変化に合わせ新規事業を生み出しながら事業拡大を続けています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
48
Help us understand the problem. What is going on with this article?