MRが楽しい

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

MRTK2017.4.3でサーバクライアント型のSharingのサーバプログラムが取得できない問題の対処

本日は MRTK の調査枠です。
サーバクライアント型のSharingで、通常の手順でサーバプログラムが取得できない問題を検出したので記事にします。

本記事は2019/5/23現在、MRTK 2017 の最新バージョン 2017.4.3.0-Refresh で確認しています。

発生事象

[Enable Sharing Services]のプロジェクト設定で SharingServices.exe が取得できませんでした。
通常の手順では、サーバプログラムの SharingServices.exe は以下の手順で取得します。

1.メニューから Configure -> Apply Mixed Reality Project Settings を開く。
f:id:bluebirdofoz:20190524092237j:plain

2.[Apply Mixed Reality Project Settings]ダイアログで[Enable Sharing Services]にチェックして[Apply]をクリックする。
f:id:bluebirdofoz:20190524092249j:plain

3.サーバプログラムを未ダウンロードの場合 GitHub から必要プログラムをダウンロードする旨のダイアログが表示されるので、[Yes]をクリックしてダウンロードする。

You're missing the Sharing Service Executable in your project.
Would you like to download the missing files from GitHub?
Alternatively, you can download it yourself or specify a target IP to connect at runtime on the Sharing Stage.

f:id:bluebirdofoz:20190524092303j:plain

この手順で GitHub からプロジェクトフォルダに External フォルダがダウンロードされるはずです。
しかし、私の環境だと手順を実行しても External フォルダがダウンロードされず、サーバプログラムが取得できませんでした。
私の確認した環境では以下の HTTP error メッセージが表示されます。
f:id:bluebirdofoz:20190524092324j:plain

対処

External フォルダは MRTK の GitHub から直接ダウンロード可能です。
以下のリリースページで利用中のバージョンの MRTK を確認し、[Source code (zip)]をダウンロードします。
github.com
f:id:bluebirdofoz:20190524092344j:plain

ダウンロードした MixedRealityToolkit-Unity-XXXX.X.X.X.zip を展開します。
f:id:bluebirdofoz:20190524092358j:plain

直下に External フォルダがあるので、これをプロジェクトフォルダにコピーします。
f:id:bluebirdofoz:20190524092407j:plain

これでサーバプログラムがダウンロードできました。
以下のどちらかの手順でサーバプログラムの SharingServices.exe を実行可能です。

Unity プロジェクトのメニューから Mixed Reality Toolkit -> Sharing Service -> Launch Sharing Service を実行する。
f:id:bluebirdofoz:20190524092418j:plain

PowerShell またはコマンドプロンプトで External\HoloToolkit\Sharing\Server フォルダを開き、以下のコマンドを実行する。
・.\SharingService.exe -local
f:id:bluebirdofoz:20190524092430j:plain

MRTK2017.4.3でサーバクライアント型のSharingが繋がらない問題の対処

本日は MRTK の調査枠です。
MRTK2017.4.3 でサーバクライアント型の Sharing が繋がらない問題について確認したので記事にします。
本記事は2019/5/23現在、MRTK 2017 の最新バージョン 2017.4.3.0-Refresh で確認しています。

発生事象

MRTK2017.4.3 のサーバクライアント型の Sharing 機能を行ってもサーバ側プログラムの SharingService.exe にコネクションできません。
以下は Examples の HoloToolkit-Examples/Sharing/SharingService/Scene/SharingTest.unity のサンプルでの実行結果です。
f:id:bluebirdofoz:20190523090258j:plain

IPアドレスを指定して[Connect]を行っても黄色アイコンが点灯したままでサーバプログラムにコネクションできません。
サーバ側のコマンドラインでもセッションが追加されず、全く反応がありません。
f:id:bluebirdofoz:20190523090327j:plain

原因

スクリプトバックエンドに[IL2CPP]を指定していた事が原因でした。
f:id:bluebirdofoz:20190523090403j:plain

MRTK2017.4.3 のサーバクライアント型シェアリングは IL2CPP に対応していません。
github.com

対応法

サーバクライアント型の Sharing 機能を利用する場合はスクリプトバックエンドに[.Net]を指定します。
f:id:bluebirdofoz:20190523090455j:plain

[.Net]を指定して SharingTest.unity のサンプルを利用した実行結果です。
f:id:bluebirdofoz:20190523090504j:plain

コネクションが正常に行われ、緑アイコンが転倒しました。
サーバ側のコマンドラインでもセッションが追加された事が確認できます。
f:id:bluebirdofoz:20190523090518j:plain

HoloLensでMR Lighting ToolsとMRTKのシーンを組み合わせて試す

本日は HoloLens の技術調査枠です。
MR Lighting ToolsとMRTKのシーンを組み合わせてみます。

前回記事の続きです。
bluebirdofoz.hatenablog.com

前回記事ではMR Lighting Tools付属のデモシーンを使ってその機能を確認しました。
今回はMRTKを用いて作成した既存のシーンにMR Lighting Toolsを追加する手順を記事にします。
f:id:bluebirdofoz:20190522094521j:plain

プロジェクトとシーンの準備

以下の記事を元にHoloLens(WindowsMR)プロジェクトを作成します。
bluebirdofoz.hatenablog.com

2019/5/22現在、MRTK 2017 の最新バージョンは 2017.4.3.0 です。
MR Lighting Toolsを利用するため、Unity 2018.3 以上の環境でシーンを作成します。
f:id:bluebirdofoz:20190522094541j:plain

シーンの準備

変化が分かりやすいように、シーンに配置した Shpere オブジェクトに MixedRealityToolkit/Standard シェーダを設定します。
Assets フォルダで右クリックから Create -> Material を選択して新規マテリアルを作成します。
f:id:bluebirdofoz:20190522094551j:plain

作成した新規マテリアルのInspectorビューを開きます。
[Shader]のプルダウンから MixedRealityToolkit -> Standard を選択します。
マテリアルを Shpere オブジェクトにドラッグして反映します。
f:id:bluebirdofoz:20190522094603j:plain

マテリアルの[Metallic]と[Smoothness]の設定値を高く設定し、マテリアルの反射率を上げます。
[Game]ウィンドウで Shpere オブジェクトが背景を反射していることを確認します。
f:id:bluebirdofoz:20190522094615j:plain

MR Lighting Toolsの設定

MR Lighting Toolsの設定を行います。
初めに MRLightingTools0.1.1.unitypackage をプロジェクトにインポートします。
f:id:bluebirdofoz:20190522094624j:plain

メニューに MixedRealityToolkit -> LightingTools の項目が追加されます。
MixedRealityToolkit -> LightingTools -> Create Light Capture Object を実行します。
f:id:bluebirdofoz:20190522094632j:plain

Hierarchy に LightCapture が追加されます。
これで MR Lighting Tools がシーンに追加されました。
f:id:bluebirdofoz:20190522094643j:plain

MR Lighting Toolsの利用には以下の3つの Capability が必要です。

PicturesLibrary:ピクチャフォルダのアクセス権限
WebCam:カメラのアクセス権限
SpatialPerception:空間マッピングのアクセス権限

メニューから Edit -> ProjectSettings から ProjectSettins ダイアログを開きます。
[Publishing Settings]の項目を開き、[Capabilities]の項目で追加が必要な Capability を設定します。
f:id:bluebirdofoz:20190522094654j:plain

合わせて BuildSettings で表示される警告メッセージを解消するため、[OtherSettings]の[ScriptingBackend]を[IL2CPP]に変更します。
f:id:bluebirdofoz:20190522094706j:plain

これで設定は完了です。
後は HoloLens 向けにプロジェクトをビルドしてインストールします。
UnityプロジェクトのビルドとHoloLensへのインストール手順については以下を参照してください。
bluebirdofoz.hatenablog.com

HoloLens上での実行

HoloLens でインストールしたアプリケーションを起動します。
アプリが現実空間全体のキャプチャを行う必要があるため、最初に空間を見渡したり歩き回ったりして空間認識を更新します。
配置された Sphere オブジェクトに現実空間の映像が映り込めば成功です。
f:id:bluebirdofoz:20190522094728j:plain

HoloLensでMR Lighting Toolsのデモシーンを試す

本日は HoloLens の技術調査枠です。
MR Lighting Tools を HoloLens で試してみます。
f:id:bluebirdofoz:20190521081817j:plain

MR Lighting Tools は現実の環境光を推定してシーンのオブジェクトに反映するツールです。
現実空間の光が仮想空間のオブジェクトに作用するため、表示オブジェクトがより現実空間にマッチします。
unitylist.com

今回は MR Lighting Tools のデモシーンを利用して MR Lighting Tools の機能を体験してみます。
本記事は 2019/05/21 現在、最新のバージョン 0.1.1 での実施手順になります。

必要環境

MR Lighting Tools を利用するには Unity 2018.3 以上の環境が必要です。
f:id:bluebirdofoz:20190521081828j:plain

デモプロジェクトの利用手順

デモプロジェクトを HoLolens で利用する手順について記します。
以下の GitHub ページから MRLightingTools0.1.1.unitypackage を取得します。
github.com
f:id:bluebirdofoz:20190521081849j:plain

ダウンロードした MRLightingTools0.1.1.unitypackage をプロジェクトにインポートします。
f:id:bluebirdofoz:20190521081915j:plain

インポートが完了したら MixedRealityToolkit.LightingTools/Examples 配下の LightingTools_Demo.unity のシーンを開きます。
f:id:bluebirdofoz:20190521081925j:plain

本サンプルシーンは Spatial Mapping Collider を利用します。
パッケージマネージャから WMR package を取得する必要があります。
メニューから Window -> Package Manager を開きます。
f:id:bluebirdofoz:20190521081935j:plain

パッケージマネージャから Windows Mixed Reality を選択し、[Install]を実行します。
f:id:bluebirdofoz:20190521081944j:plain

インストールが完了すると、Packages に Windows Mixed Reality が追加されます。
f:id:bluebirdofoz:20190521081952j:plain

次にプラットフォームの設定を行います。
メニューから File -> Build Settings を開き、Build Settings ダイアログを開きます。
以下の通り、各項目を設定します。

Platform:Universal Windows Platform
TargetDevice:HoloLens
Architecture:x86
BuildType:D3D

設定を行ったら[Switch Platform]をクリックして変更を保存します。
f:id:bluebirdofoz:20190521082002j:plain

続けてその他、各種プロジェクト設定を行います。
メニューから Edit -> Project Settings を開き、Project Settings ダイアログを開きます。
[Publishing Settings]の項目を開き、[Capabilities]の項目を確認します。
以下の4つの権限をチェックして許可します。

PicturesLibrary:ピクチャフォルダのアクセス権限
WebCam:カメラのアクセス権限
Microphone:マイクのアクセス権限
SpatialPerception:空間マッピングのアクセス権限

f:id:bluebirdofoz:20190521082016j:plain
f:id:bluebirdofoz:20190521082026j:plain

更に[XR Settings]の項目を開き、[Virtual Reality Supported]のチェックをONにします。
[Virtual Reality SDKs]の項目に[Windows Mixed Reality]が追加されることを確認します。
f:id:bluebirdofoz:20190521082036j:plain

以上でプロジェクトの設定は完了です。
改めて Build Settings ダイアログを開き、[Build]を実行します。
f:id:bluebirdofoz:20190521082047j:plain

出力された VisualStudio の sln ファイルを開き、インストール先に HoloLens を指定してインストールを行います。
f:id:bluebirdofoz:20190521082059j:plain

HoloLensでの動作確認

HoloLens でインストールしたアプリケーションを起動します。
アプリが現実空間全体のキャプチャを行う必要があるため、最初に空間を見渡したり歩き回ったりして空間認識を更新します。
すると配置されたオブジェクトに現実空間の映像が映り込み、オブジェクトが現実の照明環境に近いライティングで表示されます。
f:id:bluebirdofoz:20190521082108j:plain

デモプロジェクトには音声認識の機能も実装されています。
[circle]と発音して球体オブジェクトを表示すると、映り込みがより分かりやすいです。
f:id:bluebirdofoz:20190521082119j:plain

CLIPSTUDIOでテクスチャ素材をタイリングして拡大する

本日は CLIPSTUDIO の調査枠です。
CLIPSTUDIOでテクスチャ素材をタイリングして拡大する手順を記事にします。

画像の拡大

例えば、以下のようなテクスチャ素材を用意します。
f:id:bluebirdofoz:20190520091044j:plain

メニューから 編集 -> 変形 -> 拡大/縮小/回転 を利用して拡大した場合、元々の解像度が低いため、ボヤけてしまします。
f:id:bluebirdofoz:20190520091056j:plain
テクスチャの解像度を下げずに素材のサイズを変更するため、画像を繰り返して配置するタイリングを利用します。

タイリングの利用

タイリングを利用するには、最初にタイリングを行うレイヤーを画像素材レイヤーに変更する必要があります。
素材となるレイヤーを選択した状態で、メニューから レイヤー -> レイヤーの変換 をクリックします。
f:id:bluebirdofoz:20190520091106j:plain

レイヤーの変換ダイアログが表示されます。
[種類:]を[画像素材レイヤー]に変更し、[OK]ボタンをクリックします。
f:id:bluebirdofoz:20190520091114j:plain

これでレイヤーが画像素材レイヤーに変更されました。
レイヤーを選択した状態で[操作]ツールを開き、[オブジェクト]サブツールを選択します。
ツールプロパティから[タイリング]のチェックを入れてタイリングを有効にします。
f:id:bluebirdofoz:20190520091123j:plain

画像がタイリングされました。
しかし、デフォルト設定のタイリングでは上下左右のテクスチャの繋がりが切れてしまっています。
f:id:bluebirdofoz:20190520091131j:plain

タイリングの設定を[折り返し]に変更します。
これで上下左右が繋がった形でタイリングされ、テクスチャ素材の解像度をそのままにサイズを拡大できました。
f:id:bluebirdofoz:20190520091141j:plain

法線マップの解像度を下げずに、画像サイズを拡大したい。
または画像サイズをそのままに法線マップの密度を上げたい場合などにも活用できます。
f:id:bluebirdofoz:20190520091150j:plain

MRTK のサンプルマテリアルをMaterialGalleryで確認する

本日は MRTK の調査枠です。
MRTK で提供されるサンプルマテリアルを確認します。

MRTK で提供されるマテリアルはHoloLens上で60fpsで動作するように最適化されています。
HoloLensで様々な表現を行いたい時に活用します。

サンプルシーンの確認

MRTK に含まれるマテリアルは Examples のサンプルシーンで確認できます。
Examples のサンプルシーンの利用方法は以下を参照下さい。
bluebirdofoz.hatenablog.com

Assets/HoloToolkit-Examples/StandardShader/Scenes 配下の MaterialGallery.unity を開きます。
f:id:bluebirdofoz:20190519134507j:plain

マテリアルの種類と効果

サンプルシーンで確認できるマテリアルはプログラム的なシェーディングと標準的なシェーディングを合わせた 22 種類です。
これらのマテリアルは MixedRealityToolkit/Standard マテリアルのステータスを調整することで様々な効果のサンプルを表示しています。
それぞれの名称は使用例の名称であり、マテリアル名ではありません。

プログラム的なシェーディング

以下の9種類のマテリアルはプログラム的なシェーディングの使用例です。
マテリアルのステータスを調整することで境界線の大きさや円の半径など様々な表示パラメータを調整できます。

Rounded Crners

オブジェクトの境界線の表示をカットします。
設定されたアニメーションにより、ステータスの[Unit Radius]を変更して時間経過で境界線の形が変形します。
f:id:bluebirdofoz:20190519134524j:plain

Rounded Corners Non-Uniform Scale

Rounded Crnersと同様です。長方形のパネルオブジェクトの境界線をカットしています。
アニメーションによる変形は行いません。
f:id:bluebirdofoz:20190519134532j:plain

Circular Crners

オブジェクトの面の部分を丸く表示します。
f:id:bluebirdofoz:20190519134541j:plain

Rounded Corners Opaque

境界線の表示をカットし、更に面の部分の表示についても中央部分の表示範囲を設定できます。
f:id:bluebirdofoz:20190519134550j:plain

Border Cube

境界線のみ色合いを変更したり、ライトによる色の変化を調整できます。
f:id:bluebirdofoz:20190519134559j:plain

Opaque Border

境界線のみ表示します。ワイヤーフレームのような見た目になります。
f:id:bluebirdofoz:20190519134607j:plain

Wax

境界線がより強調されて光を反射します。金属光沢のような見た目になります。
f:id:bluebirdofoz:20190519134617j:plain

Inner Glow

境界線の光彩を設定します。基本色と色を変えることで境界線が強調されるような見た目になります。
f:id:bluebirdofoz:20190519134625j:plain

Environment Color

見る方向によって色合いが変わります。X/Y/Z軸それぞれから見た場合のカラーを設定できます。
f:id:bluebirdofoz:20190519134634j:plain

標準的なシェーディング

以下の13種類のマテリアルは標準的なシェーディングとしての使用例です。
MixedRealityToolkit/Standard マテリアルで標準的なシェーディング手法の表現を利用する際のサンプルになります。

Unit

基本色を表示する最もシンプルな使用例です。
f:id:bluebirdofoz:20190519134647j:plain

Default Lit

ディレクショナルライトによるシンプルなハイライト(艶)表現を設定した使用例です。
f:id:bluebirdofoz:20190519134656j:plain

Semi Smooth

Default Litに鏡面反射の効果を重ね合わせたものです。
f:id:bluebirdofoz:20190519134705j:plain

Smooth Metallic

Semi Smoothにメタリック光沢を設定したものです。
これにより、光の反射だけでなくSkyBoxの背景も反射しています。
smoothness(滑らかさ)を高くするとよりハッキリと、低くするとボヤけた反射になります。
f:id:bluebirdofoz:20190519134718j:plain

Normal Map

Default Litに法線マップを追加したものです。
f:id:bluebirdofoz:20190519134735j:plain

Normal Map Transparent

Normal Mapに透明色を重ねたものです。
f:id:bluebirdofoz:20190519134748j:plain

Albedo Alpha Smoothness

アルファ値が設定されたテクスチャを設定し、アルファ値をメタリック光沢として利用したものです。
f:id:bluebirdofoz:20190519134759j:plain
テクスチャのアルファ値はテクスチャのInspectorビューで[表示切り替え]ボタンをクリックすることで確認できます。
f:id:bluebirdofoz:20190519134811j:plain

Cull Off Alpha Test

裏面表示(Cull Off)を設定したものです。
更にレンダーモードを[TransparentCutout]に設定することでテクスチャのアルファ値部分を非表示に設定しています。
f:id:bluebirdofoz:20190519134822j:plain

Rim Lit

物体の輪郭部分が光るリムライト効果を設定したものです。
また、レンダーモードを[Addtive]に設定し、[黒色]を乗算しているため、基本色が透明になっています。
f:id:bluebirdofoz:20190519134830j:plain

Refractive

Semi SmoothとRim Litを組み合わせたものです。基本色には半透明色が設定されています。
f:id:bluebirdofoz:20190519134838j:plain

Near Plane Fade Environment Color

近距離のフェードアウト効果を設定したものです。
ステータスの設定からフェードアウト効果の発生開始距離を設定できます。
f:id:bluebirdofoz:20190519134848j:plain

Clipping Plane

物体の描画を任意の位置で分断する Clipping Plane の効果を設定したものです。
Clipping Plane スクリプトをアタッチされた子オブジェクトの位置に合わせてオブジェクトが切り取り表示されます。
f:id:bluebirdofoz:20190519134920j:plain

Clipping Plane Soft

物体の描画を任意の位置で分断する Clipping Plane の効果を設定したものです。
Clipping Plane と比較すると境界線がなだらかな階調的に変化します。
f:id:bluebirdofoz:20190519134936j:plain

サンプルシーンのライト効果

シーンのカーソルには HoverLight コンポーネントが設定されています。
これにより、マテリアルオブジェクトに視点を合わせると、カーソルの位置にライトの効果がシミュレーションされます。
f:id:bluebirdofoz:20190519134948j:plain

Blenderで利用可能なpythonスクリプトを作る その9(法線の再計算)

本日は Blender の技術調査枠です。
Blenderで利用可能なpythonスクリプトを作ります。

法線の再計算を実行

指定オブジェクトに法線の再計算を実行します。

・cleanup_mesh_object.py

# オブジェクトに法線の再計算を実行する
# 引数   arg_objectname:指定オブジェクト名
# 戻り値
def normals_make_consistent(arg_objectname='Default'):
   # 他のオブジェクトに操作を適用しないよう全てのオブジェクトを走査する
   for ob in bpy.context.scene.objects:

     # 非選択状態に設定する
     ob.select=False

   # 指定オブジェクトを取得する
   selectob = bpy.data.objects[arg_objectname]

   # 変更オブジェクトをアクティブに変更する
   bpy.context.scene.objects.active = selectob

   # 編集モードに移行する
   bpy.ops.object.mode_set(mode='EDIT', toggle=False)

   # 頂点を全選択した状態とする
   bpy.ops.mesh.select_all(action='SELECT')

   # 面と頂点の法線をメッシュの外側(inside=False)に向ける
   bpy.ops.mesh.normals_make_consistent(inside=False)

   # オブジェクトモードに移行する
   bpy.ops.object.mode_set(mode='OBJECT', toggle=False)

   return

f:id:bluebirdofoz:20190518225810j:plain

法線の再計算は閉じられたメッシュの外側に法線を向けます。
正しく法線を設定する場合は、重複頂点の結合や面の穴埋めを予め実施する必要があります。
前回記事のクリーンアップ操作の関数を組み合わせると、これらの操作を一括で実行できます。
bluebirdofoz.hatenablog.com