MRが楽しい

MRやVRについて学習したことを書き残す

HoloLensアプリの品質基準について その2

本日は HoloLens の技術調査枠です。
前回記事の続きになります。
bluebirdofoz.hatenablog.com

空間オーディオの使用

概要

3Dサウンドをシミュレートすることにより、複合現実体験の聴覚コンポーネントを提供します。
空間的なサウンドは、複合現実感アプリケーションにおけるイマージョン、アクセシビリティ、UXデザインの強力なツールです。

品質基準

・サウンドが論理的に空間化されており、UXはサウンドを使用してオブジェクトの発見やユーザーのフィードバックを支援すること
・サウンドが自然にオブジェクトに関連し、シナリオ全体で正規化されていること

測定方法

・関連するサウンドは対象のホログラムから放射されていることを確認する。
・ユーザーのホログラフィックフレーム外へのフィードバックや意識を助けるために、UX全体でサウンドを使用する必要がある。

推奨事項

・オブジェクト検出とユーザーインターフェイスを支援するために、空間オーディオを使用する
・合成音や不自然な音よりも、実在の音が適している

ホログラフィックフレーム(FOV)境界

概要

FOV境界の影響を緩和するには、コンテンツの規模とコンテキスト、空間オーディオの使用、ガイダンスシステム、およびユーザーの立ち位置を考慮した設計が必要です。
これらが正しい場合、ユーザーはFOVの境界に邪魔されることなく快適なアプリ体験を感じることができます。

品質基準

・ユーザーがアプリのコンテンツを見失わないこと
・境界外のオブジェクトに、表示ガイダンスが提供されること

測定方法

・ホログラムが、境界で切り取られて失われていないことを確認する
・ホログラムを見るために、定期的かつ反復的な上下運動が必要とならないことを確認する

推奨事項

・FOVに合った小さなオブジェクトで体験を開始して、視覚的手がかりでより大きなオブジェクトに誘導する
・空間オーディオとアテンションディレクタを使用して、ユーザーがFOVの外にあるコンテンツを見つけられるようにする
・可能な限り、FOVを垂直にクリップするホログラムは避ける

ユーザーの立ち位置への反応

概要

ホログラムは、「実際の」オブジェクトとほぼ同じ方法でユーザーの立ち位置に反応する必要があります。
ユーザーの位置に正しく適応するアプリケーションを設計することで、より信頼できる体験ができ、使いやすくなります。

品質基準

・コンテンツおよびUIは、ユーザの立ち位置に適応して、予想される移動の範囲内でコンテンツと自然に対話できるようにすること

測定方法

・すべての測量動作が、シナリオの合理的な範囲内で行われることを確認する
・UI要素の場合、ユーザーの移動に関係なく、関連するコントロールを使用できることを確認する

推奨事項

・ユーザが移動する場合には、テキストおよびメニューシステムに billboarding を使用する
・ユーザーの前方に何があるのか見せながら、表示する必要のあるコンテンツには、tag-along を使用する
・Billboarding and tag-along
 https://developer.microsoft.com/en-us/windows/mixed-reality/billboarding_and_tag-along

入力インタラクションの明瞭性

概要

入力の相互作用の明確さは、アプリケーションのユーザビリティにとって重要です。
これは入力の一貫性、近づきやすさ、相互作用の方法の発見可能性を含みます。

品質基準

・入力インタラクションの方法は、Windows Mixed Realityのガイダンスと一致していること
・すべてのカスタム入力は、標準入力と重複してはいないこと
・Interaction fundamentals
 https://developer.microsoft.com/en-us/windows/mixed-reality/interaction_fundamentals

測定方法

・アプリが標準の入力方法を使用していることを確認する
・カスタム入力がある場合は以下の方法で案内する
 - ファーストラン体験
 - 入門画面
 - ツールチップ
 - ハンドコーチ
 - ヘルプセクション
 - ボイスオーバー

インタラクティブオブジェクト

概要

ボタンは、2D抽象世界でイベントを引き起こすために長い間使われてきたメタファーです。
3次元複合現実世界では、この抽象化の世界に限定される必要はありません。
相互作用可能なオブジェクトは、テーブル上のコーヒーカップから空中に浮かんだ風船のようなものとして表現できます。
形式にかかわらず、相互作用可能なオブジェクトは、視覚的および音声的手がかりを介してユーザによってはっきりと認識可能であるべきです。

品質基準

・形式にかかわらず、対話可能オブジェクトは、アイドル状態、ターゲット状態、および選択状態の3つの状態にわたってビジュアルおよびオーディオキューを介して認識可能であること

測定方法

インタラクティブオブジェクトは「相互作用可能なもの」として認識可能であることを確認する

推奨事項

・操作には、視覚的フィードバックと音声フィードバックを使用する
・グループ化されたインタラクティブオブジェクト(メニューバーやリストなど)は、適切なターゲティングのための空間が必要となる
・ボイスコマンドをサポートするボタンとメニューは、コマンドキーワードのテキストラベルを提供する

HoloLensアプリの品質基準について その1

本日は HoloLens の技術調査枠です。
Microsoft の公式ページには WindowsMR アプリの品質基準に関するページがあります。
・App quality criteria
 https://developer.microsoft.com/en-us/windows/mixed-reality/app_quality_criteria

HoloLens アプリ特有の注意点が記載されているので、アプリ作成時に一度は目を通すと参考になります。
全部で10種類の品質基準が示されています。

フレームレート

概要

フレームレートは、ホログラムの安定性とユーザーの快適さの指標です。
フレームレートが推奨目標を下回ると、ホログラムが不安定になり、体験の信憑性の低下と目の疲れを引き起こします。

品質基準

・HoloLens の場合、一貫して 60fps を満たすこと。

測定方法

・DevicePortal で「システムパフォーマンス」で確認する。
bluebirdofoz.hatenablog.com
・アプリケーションに、開発キットのフレームレート診断カウンタを追加する。
bluebirdofoz.hatenablog.com

ホログラムの安定性

概要

安定したホログラムはアプリの使いやすさと信憑性を高め、より快適な体験をユーザーに提供します。
ホログラムの安定性にはフレームレートの他、以下の要因が関連します。
・安定化平面(stabilization plane)の使用
・空間アンカーまでの距離
・トラッキング

品質基準

・ホログラムが一貫して、安定して見えること。

測定方法

・頭を左右に動かし、低いフレームレートまたは安定面の不適切な位置合わせが原因でホログラムが予期せぬ動きをしないか確認する。
・ホログラムや環境の周りを移動し、ホログラムが宙を泳いだり跳ねたりしないか確認する。
 このタイプの動きは、環境を追跡できない、または空間的アンカーまでの距離が原因である可能性がある。
・大型または複数のホログラムがある場合、様々な深度でホログラムの動作を観察しながら、頭の位置を左右に移動させる。
Hologram stability
 https://developer.microsoft.com/ja-jp/windows/mixed-reality/hologram_stability

現実表面上のホログラムの位置

概要

ホログラムと現実世界のオブジェクトとのずれは、ホログラムと現実世界の非一体化を示してしまいます。
一般的な表面配置は、空間マップを使用することができます。
しかし、より正確な配置はマーカーおよび較正のいくつかの使用を必要とします。

品質基準

・ホログラムは、センチメートルからインチの範囲誤差で現実表面に整列すること。

測定方法

・空間マップ上に配置されたホログラムが、現実表面の上または下に浮遊して見えないか確認する。
・正確な配置を必要とするホログラムは、何らかの形の正確なマーカーと較正システムを持たせる。

快適なビューゾーン

概要

アプリケーションは様々な深度にコンテンツやホログラムを配置することによって、ユーザーの視点が収束する場所を制御します。
コンテンツの深さが不適切な場合は、視覚的な不快感や疲労の原因となります。

品質基準

・コンテンツをユーザから 2m の位置に配置すること。
・ホログラムを2mに配置することができない場合、ホログラムの配置ゾーンがユーザから 1.25m〜5m であること。
・動きのないホログラムをより詳細に観察する場合でも、コンテンツを 50cm より近づけないこと。

測定方法

・コンテンツがユーザから通常 2m の位置にあること、または、1.25m〜5m の範囲を超えないことを確認する。
・例外を除いて、HoloLensクリッピングレンダリング距離は、コンテンツのフェードアウトが 1m から始まる 0.85cm に設定する。
・静止したコンテンツであっても、50cm以内の距離に近づかない。

深度切換え

概要

ユーザが遠近焦点物体を頻繁にまたは迅速に切り替える要求は、眼球運動または疲労および一般的な不快感を招きます。
深度切り替えの問題は、快適性問題の視界に関わらず、ホログラムおよび実世界コンテンツを含みます。

品質基準

・ユーザーが不自然に再フォーカスすることのない、限定された、または自然な深度切り替えしか行わないこと。

測定方法

・深度切り替えの問題により、ユーザーが焦点の深度を突然変更する必要性がないことを確認する。


長くなったので今回はここまで。続きます。
bluebirdofoz.hatenablog.com

Unityに取り込むBlenderのオブジェクトのマテリアルを分割する方法

本日は Blender, Unity の技術調査枠です。
Blender で作成したオブジェクトを Unity に取り込む際、マテリアルを分割する方法をまとめます。

以前作成したタブレットオブジェクトを元に進めます。
f:id:bluebirdofoz:20180227082715j:plain

編集モードでUV展開を行います。ここでマテリアルを分割したいメッシュ毎にUV展開を行います。
f:id:bluebirdofoz:20180227082722j:plain

2つに分割する際は反転(Ctrl+Iキー)を利用すると、選択メッシュが簡単に切り替えられるので便利です。
f:id:bluebirdofoz:20180227082734j:plain

それぞれのUV配置をエクスポートします。
f:id:bluebirdofoz:20180227082756j:plain

UV配置を元に、画像処理ソフトで別々にテクスチャを作成します。
・画面用テクスチャ
f:id:bluebirdofoz:20180227082807j:plain
・本体用テクスチャ
f:id:bluebirdofoz:20180227082819j:plain

Blender に戻り、二つのマテリアルを作成し、それぞれのテクスチャを設定します。
f:id:bluebirdofoz:20180227082829j:plain

UV展開を切り分けたメッシュに、それぞれ適切なマテリアルを割り当てます。
f:id:bluebirdofoz:20180227082846j:plain

後はFBXファイル形式でエクスポートを行い、Unity に取り込みます。
以下のように、マテリアルが分割して読み込まれました。適切なテクスチャを設定すれば完了です。
f:id:bluebirdofoz:20180227082854j:plain

注意点として、Blender 上でマテリアルを分割していても、参照するテクスチャの名前が同じだと Unity 上でマテリアルは分割されません。
以下の記事で触れているので合わせて読んでみてください。
bluebirdofoz.hatenablog.com

Blender標準テクニック[ローポリキャラクター制作で学ぶ3DCG]を試す その53(インバースキネマティクス)

本日は書籍「Blender標準テクニック[ローポリキャラクター制作で学ぶ3DCG]」の実施枠です。

今回は「インバースキネマティクス(IK)」を行います。
f:id:bluebirdofoz:20180226002712j:plain

ボーンの動きの伝播には2つの種類があり、今まで取り扱っていたのは「フォワードキネマティクス(FK)」となります。

フォワードキネマティクス(FK)

ボーンの影響が親から子へ伝播していく仕組みを指します。
例えば、肩の関節を回転させるとすると、それに付随して子の上腕・前腕・手が全て回転しますし。
逆に足先を動かしても、その回転は親の太腿に影響を及ぼしません。
正確な動きの調整を行うには全てのボーンの回転角度などを手動で設定していく必要があります。

インバースキネマティクス(IK)

ボーンの影響が子から親へ伝播する仕組みを指します。
例えば、手の位置を決めるだけで肩と肘の角度を自動的に設定してくれます。
間接の曲がる角度や方向を制限することができ、腕が脚がありえない角度や方向に曲がることを回避できます。


この辺り、書籍でもかなり密度が高いので一つ一つ作業を実施していきます。今回は足のIK作成です。
まず、足のすね側のボーンのテール、つま先前のボーンのテールから、真っ直ぐ下向きのボーンを追加します。
f:id:bluebirdofoz:20180226002725j:plain
これらは「ターゲット」ボーンとして利用されます。

次に膝の正面に(X方向の位置を一致)どこのボーンからの押出でもよいので、ボーンを追加作成します。
f:id:bluebirdofoz:20180226002750j:plain
これは「ポールターゲット」ボーンとして利用します。

次につま先側の「ターゲット」ボーンと「ポールターゲット」ポーンの親ボーンを、かかと側の「ターゲット」ボーンとします。
接続は切っておく必要があります。
f:id:bluebirdofoz:20180226002804j:plain

最後にかかと側の「ターゲット」ボーンを削除します。
f:id:bluebirdofoz:20180226002834j:plain


これでボーンの準備は完了です。実際に IK を設定していきます。つま先側の「ターゲット」ボーンからです。
まず、ポーズモードに切り替えます。
つま先側の「ターゲット」ボーンを選択し、次に足の甲のボーンを選択します。
この状態で Shift+I キーで「IKのターゲット選択」メニューを表示し、「アクティブボーン」を選択します。
f:id:bluebirdofoz:20180226002846j:plain

すると、足の甲のボーンに「ボーンコンストレイント」が設定されます。
「ボーンコンストレイント」画面を開いて、「チェーンの長さ」を 1 に設定します。
f:id:bluebirdofoz:20180226002912j:plain

この状態で試しに「ターゲット」ボーンを動かしてみると、足の甲のボーンが動くことが確認できます。
f:id:bluebirdofoz:20180226002923j:plain

次はかかと側の「ターゲット」ボーンを設定します。
ポーズモードでかかと側の「ターゲット」ボーンを選択し、次にすね側のボーンを選択します。
この状態で Shift+I キーで「IKのターゲット選択」メニューを表示し、「アクティブボーン」を選択します。
f:id:bluebirdofoz:20180226002933j:plain

こちらでは「ボーンコンストレイント」画面で、「チェーンの長さ」を 2 に設定します。
チェーンの長さは影響を受けるボーンの数を示しています。
この設定ではすねのボーンに加えて、その親のもものボーンも影響受けるようになります。
f:id:bluebirdofoz:20180226002941j:plain

更に膝のを制限するため、先ほどの「ポールターゲット」ポーンを利用します。
「ボーンコンストレイント」画面で、「ポールターゲット」の欄にアーマチュアオブジェクト名と「ボーン」欄に作成した「ポールターゲット」ポーンを指定します。
f:id:bluebirdofoz:20180226002949j:plain

これでかかと側の「ターゲット」ボーンを動かしてみます。
f:id:bluebirdofoz:20180226002959j:plain
連動して、すねとももが動きましたが、関節が変な方向に曲がってしまいました。

書籍には、関節の曲がる方向の制御方法は書かれていないようでした。
調べた結果ですが、これに関する最も手っ取り早い解決方法は、膝部分を曲がってほしい方向に少し押し出しておくことです。
f:id:bluebirdofoz:20180226003028j:plain

かかと側の「ターゲット」ボーンを動かすと、関節が曲がってほしい方向に曲がるようになりました。
f:id:bluebirdofoz:20180226003020j:plain

IK の設定は自動でミラーはしないので、右足側も同じ設定を行います。
注意点として、右足ではポールターゲット設定するとき、「ポールの角度」を 180 度に設定する必要があります。
これはポールの方向はIKの設定したボーンのX軸方向で決定されているためです。
f:id:bluebirdofoz:20180226003041j:plain

膝を曲げると、足がスカートを突き抜けることが分かったので、ウェイトペイントで突き抜けを回避しておきます。
f:id:bluebirdofoz:20180226003052j:plain

とりあえずはこれでOKかな。
f:id:bluebirdofoz:20180226003100j:plain
上手くスカートの裾を動かしたい場合、やはりボーンを仕込んで制御する必要があるようです。

hololensアプリでXML設定ファイルの操作を行う その4(ドキュメントフォルダへのアクセス)

本日は HoloLens の技術調査枠です。
以前、HoloLens での設定ファイル読み書きでカメラロールへのアクセスを行いました。。
bluebirdofoz.hatenablog.com

今回はカメラロールではなく、ドキュメントフォルダへアクセスしてみます。
まず前回作成したスクリプトディレクトリ参照をKnownFolders.DocumentsLibraryに切り替えます。
・AppSettingManager.cs

/// <summary>
/// アプリ設定ディレクトリパス
/// 実行環境によって参照ディレクトリを変更する
/// </summary>
private string SettingFileDirectoryPath()
{
    string directorypath = "";
#if WINDOWS_UWP
    // HoloLens上での動作の場合、LocalAppData/AppName/LocalStateフォルダを参照する
    // directorypath = Windows.Storage.ApplicationData.Current.LocalFolder.Path;
    // ↓
    // HoloLens上での動作の場合、カメラロールを参照する
    // directorypath = Windows.Storage.KnownFolders.CameraRoll.Path;
    // ↓
    // HoloLens上での動作の場合、ドキュメントフォルダを参照する
    directorypath = Windows.Storage.KnownFolders.DocumentsLibrary.Path;
#else
    // Unity上での動作の場合、Assets/StreamingAssetsフォルダを参照する
    directorypath = UnityEngine.Application.streamingAssetsPath;
#endif
    return directorypath;
}

ドキュメントフォルダを参照するには権限の設定が必要ですが、Capabilities からは設定できません。
そのままビルドを行い、ソリューションファイルを VisualStudio で開きます。
そこで Package.appxmanifest をコード表示で開き、直接編集します。
f:id:bluebirdofoz:20180226002318j:plain

以下の Capability の設定を追記します。

<Capabilities>
  <uap:Capability Name="documentsLibrary" />
</Capabilities>

f:id:bluebirdofoz:20180226002327j:plain

次に Package.appxmanifest の「宣言」から「ファイルの種類の関連付け」を追加します。
f:id:bluebirdofoz:20180226002336j:plain

そこで書き込むファイルの拡張を追加します。
今回、出力するのは settings.xml ファイルなので、xml を追加します。
f:id:bluebirdofoz:20180226002344j:plain

以上で権限の設定は完了です。
アプリを hololens にインストールして起動します。
f:id:bluebirdofoz:20180226002351j:plain
……が、出力されず。

調べてみると、hololens では DocumentsLibrary の権限はリードオンリーという記事がありました。
qiita.com
上記の方法はUWPアプリ全般の方法であるが、hololens については書き込めないということ?

hololensアプリでXML設定ファイルの操作を行う その3(カメラロールへのアクセス)

本日は HoloLens の技術調査枠です。
以前、HoloLens での設定ファイル読み書きについて調査を行いました。
bluebirdofoz.hatenablog.com

このとき、書き込み先としてLocalAppData/AppName/LocalStateフォルダを指定していました。
この指定をカメラロールフォルダに切り替えてみます。

前回作成したスクリプトディレクトリ参照をKnownFolders.CameraRollに切り替えます。
・AppSettingManager.cs

/// <summary>
/// アプリ設定ディレクトリパス
/// 実行環境によって参照ディレクトリを変更する
/// </summary>
private string SettingFileDirectoryPath()
{
    string directorypath = "";
#if WINDOWS_UWP
    // HoloLens上での動作の場合、LocalAppData/AppName/LocalStateフォルダを参照する
    // directorypath = Windows.Storage.ApplicationData.Current.LocalFolder.Path;
    // ↓
    // HoloLens上での動作の場合、カメラロールを参照する
    directorypath = Windows.Storage.KnownFolders.CameraRoll.Path;
#else
    // Unity上での動作の場合、Assets/StreamingAssetsフォルダを参照する
    directorypath = UnityEngine.Application.streamingAssetsPath;
#endif
    return directorypath;
}

カメラロールを参照するには権限の設定が必要です。
Edit -> Project Settings -> Player から Publishing Settings の Capabilities を開きます。
PicturesLibrary にチェックを入れておきます。
f:id:bluebirdofoz:20180224232324j:plain

アプリを hololens にインストールして起動すると……。
f:id:bluebirdofoz:20180224232334j:plain
UserFiles/CameraRoll に settings.xml が書き込まれました。

LocalAppData/AppName/LocalState ではなく UserFiles/CameraRoll を利用するメリットとしてはアプリ再インストール時にフォルダが削除されない点があげられます。
再インストール後も設定を継続して持ちたい場合は AppName ディレクトリ配下に情報を保持しない方が良いです。

Unity-Chan の新モデルを試してみた

本日はアセットのお試し枠です。
今日まで気付いていませんでしたが、Unity-Chan ページで 2018/1/31 から4体の新モデルが公開されていました。
unity-chan.com
f:id:bluebirdofoz:20180223001045j:plain

早速、unitypackage をダウンロードして Unity にインポートします。
4体のモデルパッケージを全て取り込むと、以下の状態になりました。Model ディレクトリ以外は共通のようです。
f:id:bluebirdofoz:20180223001124j:plain

Model/(キャラディレクトリ)/Prefabs 配下の prefab ファイルを hierarchy にドラッグしてキャラを配置します。
f:id:bluebirdofoz:20180223001153j:plain

4体を配置してみると、こんな感じ。
f:id:bluebirdofoz:20180223001202j:plain

これらのパッケージにはアニメーションやボイスは入っていません。
必要ならば以下のユニティちゃん3Dモデルデータパッケージをインストールする必要があります。
・ユニティちゃん 3Dモデルデータ
 http://unity-chan.com/download/releaseNote.php?id=UnityChan

4体のモデルには Humanoid リグが設定されているため、ユニティちゃんパッケージのアニメーションが共通利用できます。
f:id:bluebirdofoz:20180223001722j:plain

SD頭身ではない、ユニティちゃん以外のキャラが配布されたのは初めてでしょうか。
利用できるモデルの種類が増えることで、今後作成される Unity アプリの幅も広がりそうです。
f:id:bluebirdofoz:20180223001732j:plain
ただ既存の Unity-Chan とはシェーダや頭身が少し異なる感じです。