Unity でのフォーカス ポイント
Namespace: UnityEngine.XR.WSA
種類: HolographicSettings
フォーカス ポイントを使用して、現在表示されているホログラムを最適に安定させる方法に関するヒントをHoloLensにご紹介します。
Unity でフォーカス ポイントを設定する場合は、HolographicSettings.SetFocusPointForFrame() を使用してすべてのフレームを設定する必要があります。 フレームにフォーカス ポイントが設定されていない場合は、既定の補正平面が使用されます。
Note
既定では、新しい Unity プロジェクトには [深度バッファー共有を有効にする] オプションが設定されています。 このオプションを使用すると、イマーシブ デスクトップ ヘッドセットまたは Windows 10 April 2018 Update (RS4) 以降を実行している HoloLens のいずれかで実行されている Unity アプリは、フォーカスポイントを指定せずに、深度バッファーを Windows に送信して、ホログラムの安定性を自動的に最適化します。
- イマーシブ デスクトップ ヘッドセットでは、これによりピクセル単位の深度ベースの再投影が有効になります。
- Windows 10 April 2018 Update 以降を実行している HoloLens では、これにより深度バッファーが分析されて、最適な補正平面が自動的に選択されます。
どちらのアプローチでも、各フレームのフォーカスポイントを選択するためのアプリによる明示的な作業なしで、さらに優れた画質が提供されます。 フォーカス ポイントを手動で指定すると、上記の自動動作が無効になり、通常はホログラムの安定性が低下することに注意してください。 通常、手動フォーカスポイントは、Windows 10 April2018Update にまだ更新されていない HoloLens でアプリを実行している場合にのみ指定する必要があります。
例
SetFocusPointForFrame 静的関数で利用可能なオーバーロードによって示唆されるように、フォーカスポイントを設定する方法はたくさんあります。 以下に示すのは、各フレームに提供されたオブジェクトにフォーカスプレーンを設定する簡単な例です。
public GameObject focusedObject;
void Update()
{
// Normally the normal is best set to be the opposite of the main camera's
// forward vector.
// If the content is actually all on a plane (like text), set the normal to
// the normal of the plane and ensure the user does not pass through the
// plane.
var normal = -Camera.main.transform.forward;
var position = focusedObject.transform.position;
UnityEngine.XR.WSA.HolographicSettings.SetFocusPointForFrame(position, normal);
}
Note
上記の単純なコードでは、フォーカスが合ったオブジェクトがユーザーの背後にある場合、ホログラムの安定性を低下させる可能性があります。 通常、フォーカスポイントを手動で指定するのではなく、深度バッファーの共有を有効にする}を設定することをお勧めします。
次の開発チェックポイント
用意されている Unity 開発体験に従っている場合、Mixed Reality プラットフォームの機能と API を探索している段階にいます。 ここから、次のトピックを続けることができます。
または、デバイスまたはエミュレーターへのアプリの配置操作に直接移動します。
いつでも Unity 開発チェックポイントに戻ることができます。