ARDK 2.2.0 リリースノート 2022-08-11

新着情報

  • [実験的機能] ARDKでは、フィードバックループを高速化するための 実験的機能 を提供しています。この実験的機能は、テストやフィードバックでお使いいただけますが、開発の初期段階にあるため、変更される可能性があるほか、最終的な設計やAPIが反映されない場合がありますのでご注意ください。実験的機能は、サポート対象外のため、本番環境には使用しないでください。ご興味がありましたら、是非この実験的機能をお試しの上、フィードバックをお寄せください。実験的機能に関するフィードバックは、Lightshipの開発者コミュニティに投稿してください。

  • [コンテクスト・アウェアネス] セマンティック セグメンテーションチャンネルとして、「人物」が利用できるようになりました。人物セグメンテーションは、身体の部位や髪、着用している服などを含めて、人物を検出します。

  • [コンテクスト・アウェアネス - 実験的] 手のひら検出を使用したハンドトラッキングの実験的実装を追加しました。セッションの設定で、ARセッションと手のひら検出を有効にすると、手のひらが検出された場合、検出されなかった場合、手のひらが動いた場合に、イベントを受け取ります。カメラフィードの手のひらの位置を2D座標空間で特定するための矩形が表示されます。

  • [開発者ツール - 実験的] バーチャルスタジオにプレイバックモードが追加されました。プレイバックモードでは、実際のARデータを使用してUnityエディタ内でARアプリケーションを実行することができます。実行するには、データセットを「プレイバック(再生)」します。ARDK 2.2には、カメラのポーズやフレーム画像、位置データ(オプション)が含まれています。実行時には、データセットのフレームを使用してARDKのコンテクスト・アウェアネスアルゴリズムが実行され、カメラや深度、セマンティック、メッシングのデータがアプリケーションに表示されます。プレイバックモードでは、VPSローカライゼーション(Wayspot Anchorの作成と復元を含む)もサポートされています。プレイバックデータセットをキャプチャするには、ARDK使用例に追加されている VirtualStudio/Playback/PlaybackDatasetCapture シーンを使用できます。

  • [共有AR] メッセージのトランスポートタイプ ReliableUnorderedUnreliableUnordered でサーバーを中継する際に、TCPやUDPが使用されるようになりました。その結果、帯域幅使用量が改善し(50〜90%減少)、レイテンシー分散が低減したほか、1KBを超えるメッセージを送信する際のパケット破棄率に対応できるようになりました。

アップグレードガイド

ARDK 2.2にアップグレードする場合は、次の情報をご参照ください。

セマンティックチャンネル「人物」を追加

変更点

ARDKのセマンティックセグメンテーションに、新しいセマンティックチャンネル「人物」が追加されました。人物セグメンテーションでは、身体の部位や髪、着用している服などを含め、人物を検出することができます。

アプリケーションに影響があるかどうかを判断する

アプリケーションで、チャンネル名ではなくインデックスでセマンティックチャンネルを参照している場合は、アプリケーションを更新する必要があります。

この変更点のためにアプリケーションを移行する

インデックス5以上のセマンティックチャンネルを参照するコードがある場合は、新しいチャンネルインデックスを考慮して更新する必要があります。たとえば、「葉」チャンネルを参照するチャンネルインデックス6にアクセスするコードがある場合、インデックス6は「葉」ではなく、「人物」であるため、チャンネルインデックス7にアクセスするようにこのコードを更新する必要があります。

各セマンティックチャンネルのインデックスは今後変更される可能性がありますが、名前は変更されないため、インデックスではなくチャンネル名でセマンティックを参照することを強くお勧めします。

たとえば、次のような関数があるとします。この関数では、チャンネルのインデックスを使用して、指定されたセマンティックチャンネルが指定の位置に存在するかどうかを確認します。

// Check if a given semantic channel exists at a position
bool CheckIfChannelAtPosition(int xPosition, int yPosition, int indexToCheck)
{
    // For example, indexToCheck could be 7
    return _semanticManager.SemanticBufferProcessor.DoesChannelExistAt(xPosition,yPosition,indexToCheck);
}

この関数ではチャンネルのインデックスを使用していますが、チャンネル名を使用するとします。そのためには、関数を次のように更新します。

// Check if a given semantic channel exists at a position
bool CheckIfChannelAtPosition(int xPosition, int yPosition, string channelToCheck)
{
    // For example, channelToCheck could be "foliage"
    return _semanticManager.SemanticBufferProcessor.DoesChannelExistAt(xPosition,yPosition,channelToCheck);
}

更新後のIWaySpotAnchorを使用してアンカーイベントを追跡する

新着情報

VPSの IWayspotAnchor インターフェイスに、新しい StatusCode プロパティと StatusCodeUpdated イベントが追加されました。 StatusCodeUpdated イベントをサブスクライブすると、VPSによってWayspot Anchorが正常に作成または復元された際に通知されます。 WayspotAnchorService.CreateWayspotAnchors() がアップデートされ、ステータスが PendingIWayspotAnchors のリストが即座に返るようになりました。

変更点

IWayspotAnchor.TrackingStateUpdated イベントが削除され、新しい IWayspotAnchor.TransformUpdated イベントに代わりました。新しいイベントをサブスクライブするか、新しい IWayspotAnchor.Position プロパティや Rotation プロパティを使用してアンカーの位置や向きの変化をトラッキングします。

アプリケーションに影響があるかどうかを判断する

アプリケーションで現在 IWayspotAnchor.TrackingStateUpdated イベントを使用している場合は、新しい IWayspotAnchor.TransformUpdated イベントに置き換えることができます。

この変更点のためにアプリケーションを移行する

You can also use or extend the new WayspotAnchorTracker extension class to handle TransformUpdated events automatically. The following example uses WayspotAnchorTracker to instantiate a prefab (_anchorPrefab) and associate it with a created or restored Wayspot anchor via WayspotAnchorTracker.AttachAnchor(), like so:

using Niantic.ARDK.Extensions;

private GameObject CreateWayspotAnchorGameObject(IWayspotAnchor anchor, Vector3 position, Quaternion rotation, bool startActive)
{
    var go = Instantiate(_anchorPrefab, position, rotation);

    var tracker = go.GetComponent<WayspotAnchorTracker>();
    if (tracker == null)
    {
    Debug.Log("Anchor prefab was missing WayspotAnchorTracker, so one will be added.");
    tracker = go.AddComponent<WayspotAnchorTracker>();
    }

    tracker.gameObject.SetActive(startActive);
    tracker.AttachAnchor(anchor);
    // ...Add to a local cache of WayspotAnchorTrackers if needed...

    return go;
}

Once a Wayspot anchor is attached to a WayspotAnchorTracker, the WayspotAnchorTracker will automatically handle IWayspotAnchor.TransformUpdated events and update the game object position and orientation accordingly.

上記のイベントの処理例については、 ユーザーマニュアル と、ARDK使用例のWayspotAnchorsシーンを参照してください。

トランスポートタイプの変更点

変更点

ARDKバージョン2.2のリリースに伴い、Lightshipで使用している トランスポートタイプ を変更しました。

これまで、Lightship ARDKでは、 低レベルネットワークAPI を統合する際に次の4種類の トランスポートタイプ を提供してきました。

  • ReliableOrdered [廃止予定]

  • ReliableUnordered

  • UnreliableOrdered [廃止予定]

  • UnreliableUnordered

上記のとおり、これらのトランスポートタイプのうち2つを廃止し、 ReliableUnorderedUnreliableUnordered で利用できるオプションを簡素化する予定です。これらのトランスポートオプションは、当面は問題なくご使用いただけますが、将来のLightshipのバージョンでご使用いただけなくなります。この変更に伴い、 ReliableOrderedUnreliableOrdered のトランスポートオプションの使用は停止し、 ReliableUnorderedUnreliableUnordered に切り替え、使用帯域やレイテンシーを低減することをお勧めします。

アプリケーションに影響があるかどうかを判断する

今後、廃止される2つのトランスポートタイプはLightshipから削除される予定です。お使いのアプリケーションで networking message のトランスポートに ReliableOrdered または UnreliableOrdered を使用している場合は、使用しているトランスポート方式を ReliableUnordered または UnreliableUnordered に切り替えることをお勧めします。

この変更点のためにアプリケーションを移行する

切り替えは簡単です。廃止予定の ReliableOrderedUnreliableOrdered オプションではなく、 ReliableUnorderedUnreliableUnordered のトランスポートタイプを使用するようにアプリケーションを更新してください。

たとえば、次の関数があるとします。この関数では、1つのピアに1つのネットワークメッセージを送信します。

// A message sent to a single peer in the session
void SendToASinglePeer(IMultipeerNetworking networking, IPeer peer, byte[] data)
{
  networking.SendDataToPeer(tag: 0, data: data, peer: peer, transportType: TransportType.ReliableOrdered);
}

この関数では、廃止予定である ReliableOrdered TransportType が使用されているのが分かります。この場合、1行のコードを変更するだけで更新できます。次のようになります。

// A message sent to a single peer in the session
void SendToASinglePeer(IMultipeerNetworking networking, IPeer peer, byte[] data)
{
  networking.SendDataToPeer(tag: 0, data: data, peer: peer, transportType: TransportType.ReliableUnordered);
}

ReliableUnorderedUnreliableUnordered のどちらを使用すべきか分からない場合は、信頼性の高いメッセージは信頼性の低いメッセージよりもはるかにオーバーヘッドが大きくなる点に注意してください。一般的に、信頼性の高いメッセージは、スコアの記録やアセットのスポーンなどのゲームステート情報や、すべてのデバイス間で同期されないと共有体験が低下するような内容を伝達する場合に適しています。ゲームステート情報を伝達する必要がない場合は、 UnreliableUnordered トランスポートタイプを使用することをお勧めします。

メッセージを受信して処理する順序がアプリケーションで重要な場合は、送信するメッセージの順序内に、そのメッセージの位置を示す情報の一部をメッセージに含めることを検討してください。たとえば、各メッセージに SequenceNumber プロパティを含めることで、メッセージを受信したときにそのプロパティをチェックし、正しい順序でメッセージを処理することができます。

アプリケーションのバージョンをユーザーに更新してもらう

適切なトランスポートタイプを使用するようにアプリケーションをアップデートしたら、アプリケーションの最新バージョンにアップデートするようにユーザーに求めます。新しいバージョンのアプリケーションをApp StoreまたはGoogle Playにプッシュしたら、ユーザーはアップデートを自動インストールできます。アプリケーションを自動アップデートするように設定していないユーザーには、手動でアップデートバージョンをインストールして、最新版のアプリケーションを入手するように促します。

改善点

  • [開発者プラットフォーム] ARDKで使用するARCoreのバージョンを1.32.0に更新

  • [VPS] IWayspotAnchor インターフェイスに新しいプロパティとイベントが追加され、アンカーが解決された場合や、VPSによってアンカーの位置や向きが更新された場合に追跡できるようになりました。詳細については、 アップグレードガイド を参照してください。

  • [VPS] WayspotAnchorService.LocalizationUpdatedEvent をサブスクライブして、VPSセッションのローカライズのステータスが変更されたときにイベントを取得できるようになりました。

  • [VPS] VPSセッションがローカライズされる前にアンカーを復元できるようになりましたが、復元されたアンカーでは、セッションがローカライズされるまで位置や向きを解決することはできません。

  • [VPS] 連続ローカライゼーション中のアンカー追跡を最適化。

  • [VPS] モックVPSのカバレッジエリアが、位置と半径でフィルタリングできるようになりました。

不具合修正

  • [コンテクスト・アウェアネス] URP使用時にゲームボードタイルのビジュアライゼーションがピンク色に表示される不具合を修正

  • [開発者プラットフォーム] WindowsのUnityで実行した場合の例の2本指スクロールの不具合を修正

  • [開発者プラットフォーム] ARDK使用例のDepthMeshOcclusionシーンが深度シーンと重複していたため削除

  • [開発者プラットフォーム] ARDK使用例のシーンから、欠落しているプレハブリファレンスと破損した古いメッシュを削除。

  • [開発者ツール] レイヤー8スロットに既にカスタムレイヤーがあるプロジェクトにモック環境をインポートした場合に、モック環境プレハブのレイヤーが上書きされ、その環境がレンダリングされない不具合を修正。

  • [開発者ツール] M1またはWindowsでリモートモードを使用する際に、エラーメッセージが表示されるように修正。

  • [VPS] APIキーが設定されていない状態でVPS Coverage APIを使用した場合のエラーコードを追加。

廃止予定

  • [共有AR] UnreliableOrderedReliableOrdered のトランスポートタイプはARDK2.2でも動作しますが、廃止されており、今後のリリースで削除される可能性があります。代わりに UnreliableUnorderedReliableUnordered を使用してください。詳細については、 アップグレードガイド を参照してください。

  • [VPS] IWayspotAnchor.TrackingStateUpdated は削除され、 IWayspotAnchor.TransformUpdated に置き換えられています。 WayspotAnchorService.CreateWayspotAnchors() のコールバックや非同期バージョンは削除され、 WayspotAnchorService.CreateWayspotAnchors() メソッドに置き換えられています。このメソッドでは、 Pending ステータスの IWayspotAnchors リストが即座に返ります。詳細については、 アップグレードガイド を参照してください。

主な変更点

  • [コンテクスト・アウェアネス] インデックス5に「人物」のセマンティックセグメンテーションチャンネルが追加されました。セマンティッククラス「建物」、「葉」、「草」のインデックス値が変更されました。詳細については、 アップグレードガイド を参照してください。

  • [コンテクスト・アウェアネス] MeshObjSaverARDK.Assets.ARDK.Extensions.Meshing 名前空間から Niantic.ARDK.Extensions.Meshing 名前空間へ移動。

  • [VPS] デバッグ専用の IWayspotAnchorsConfiguration プロパティである CloudProcessingForcedClientProcessingForcedConfigURLHealthURLLocalizationURLGraphSyncURLWayspotAnchorCreateURLWayspotAnchorResolveURLRegisterNodeURLLookUpNodeURL を削除。

既知の問題点

  • [コンテクスト・アウェアネス] iOS 16開発者ベータ3では、メッシングがレンダリングされると、ARDK使用例のPlaneAnchorシーンのカメラビューで揺れやジッターが発生します。

  • [Contextual Awareness] Semantic segmentation channel indices in Mock Mode differ from indices when running on device.

  • [Contextual Awareness] Person segmentation can be overconfident and include parts of the image that aren’t person, particularly classes that co-occur with person, like chairs or backpacks.

  • [Contextual Awareness - Experimental] A recent MediaPipe change is preventing hand tracking from working.

  • [開発者プラットフォーム] VoyageサンプルアプリのWalkaboutシーンに、ゲームタスクが完了しない不具合。

  • [Developer Tools] When running in Unity Play mode with Virtual Studio, in some circumstances output is rotated 90 degrees.

  • [VPS] iOS上でARDK使用例のVPSCoverageExampleのサンプルシーンのGPSの「locate me(探す)」ボタンをタップすると、「Motion and Orientation(動きと向き)」ポップアップ画面が表示されます。この問題は、LocationServiceによって、UnityEngine.Input.Compassが自動で有効に設定されることが原因で発生します。

  • [VPS] Some iPhone 8 Plus devices are encountering unexplained issues while localizing. Investigation is in progress.

  • [VPS] Using async versions of CreateWayspotAnchors() in WayspotAnchorService threw an exception due to bug in internal ARDK code