読者です 読者をやめる 読者になる 読者になる

@Muro_CGさんの講演を元に、Unityアセットの表現力を高める勉強をしました

今月、Unityのカンファレンス「Unite 2017 Tokyo」が開催され、Unityのライティング、Post Processing Stack、Shaderに関する技術的な講演がいくつかありました。

XVI社の講演では前半は@GoromanさんによるVRのプレゼンスを高める方法(P.19-59)、後半は@Muro_CGさんによるUnityで表現力を高める方法(P.60-P.81)が解説されました。

www.slideshare.net

講演の概要はこちらで解説されています。

panora.tokyo


今回は、XVI社講演の後半を元に整理したものです。


まず、今回試した背景です。スライドの引用ですが、Unityのモデルを使うときは、まさにこういう風に思っていました。

f:id:Takyu:20170521104728j:plain

f:id:Takyu:20170521104735j:plain

f:id:Takyu:20170521104742j:plain


しかし、同じアセットでも調整次第でこのように変わるそうです。

f:id:Takyu:20170521180944j:plain


前からこういうことがしたかったので、講演内容を見直したり、@Muro_CGさんに直接伺ったりしてやり方を学びました。

(お時間いただき、改めてありがとうございます。>@Muro_CG さん)


以下、アセットの表現力を高める方法を、私なりに解釈して整理しました。


なお、下記の環境で検証しました。

Mac OS (10.12.4)
・Unity 5.6.0p1


==============================
注意:以下の解説は私の解釈を元にしていますので、@Muro_CGさんのやり方と異なる場合もあります。ご了承ください。
==============================


=================

目次

1. 検証用のアセットを購入

2. Unityプロジェクトの下準備

3. イメージを固める

4. ライティングの調整

5. Post Processing Stackの調整

6. Tips

7. 終わりに

=================

続きを読む

UnityでBotが作れるアセット「Chatbot」を試してみました

最近、色々なところでコンピュータと人が自然言語で対話する仕組みを採用しました、のようなニュースを見ます。

japan.cnet.com

www.nri.com

こうやって、技術が進歩してくると、ゲームの世界でもキャラクターと自然に話ができるようになるのかな、と夢が膨らみます。

例えば、ゲームやアニメでは主人公にくっついているキャラがいて、そのキャラと話しかけるシーンがよくあります。

すでに連載終了してますが、ブリーチの斬魄刀とか、リボーンのボックスとか、もっと古いところだと、フルメタルパニックのアーバレストとか、、(知らない人にはわかりづらくてすいません、)

ゲーム面だと、AIはこういう方向に使えるような気がしています。AIのパートナーと一緒に会話しながらミッションをクリアするようなVRゲーム、こういうものがそのうち出るかもしれないですね。自分でも作ってみたいですし。


ということで、そういう対話ができる機能を作るにはどうするか、と思ってUnityのアセットで探してみたところ、このようなアセットを見つけました。

f:id:Takyu:20170304220448j:plain


これは、会話のパターンを多数組み込み、質問に合致する回答を返したり、質問の中に含まれるキーワードから、それっぽい回答を類推して返すという機能を実現できるアセットです。


以下、Chatbotの概要や、botを構成するAIMLの概要などを整理してみました。

=========

目次

1. Chatbotの概要

2. AIMLについて

3. AIML構文の代表的なタグ

4. AIMLの読み込み優先順位について

5. その他Tips

6. 終わりに

=========

続きを読む

Holographic Academyの解説「Hologram 240- Sharing holograms」(Chapter3まで)

少し空いてしまいましたが、次は240の内容を整理しました。

これまでの内容はこちらです。

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp


今回は、HoloLensの最大の特徴とも言える、Sharingについて解説します。

Sharingとは、下記のようにHoloLensで見た情報を別のHoloLensでも共有する仕組みのことです。

Sharingの動作確認を行うにあたり、HoloLens Meetup Vol2で発表されたグラニの鈴木さん(@xin9le)にご協力をいただきました。ありがとうございます。


=======

目次

0 準備

1 Chapter 1 - Holo World

2 Chapter 2 - Interaction

3 Chapter 3 - Shared Coordinates

4 Tips

終わりに

=======

[補足]

全チャプターを解説する予定でしたが、現状のSharingは成功率が著しく低いため、今回は断念しました。

いずれHoloToolkitそのものが改善されるか、自分でオリジナルの仕組みを作るか、までは残りのチャプター解説は保留とします。ご了承ください。


0 準備

これまで通り、Windows 10のPCとHoloLensが必要です。
また、Windows 10 PCの中には、Visual Studio Update3とUnity5.5以上がインストールされていることが必要です。

私の場合は、下記の環境で動作確認しました。


・Windows10 Pro on Parallel Desktop 12.1.3 (MacOSX 10.12.3) / Windows 10 Pro

Visual Studio Update3

・Unity5.5.1f1


まずは、「Holograms 240」を開き、下記の files をクリックしてプロジェクトをダウンロードします。

f:id:Takyu:20170309003831j:plain


適当な場所に置いて解凍したらUnityで開き、SharedHologramsという名前をつけます。

1 Chapter 1 - Holo World

ここではSharingの機能は使いません。これまでと同様にサンプルプロジェクトから指示されたPrefabを使って、HoloLens実機にdeployするところまでを解説しています。

特に新しいことはないので解説は省略します。

アプリを起動すると、何やら音楽が聴こえます。これはHoloLensの初期位置(0,0,0)にEnergy Hubがあるためです。

ちょっと動いてみると、このようにEnergy HubのCGが見えます。

f:id:Takyu:20170320000139j:plain

2 Chapter 2 - Interaction

ここでもSharingの機能は使いません。Chapter1と同様に手順に沿って進めるだけなので、解説は省略します。

GazeManagerを追加しているので、Energy Hubが自分の視線方向の動きに合わせて動きます。

また、Gesture Managerを追加しているので、AirTapするとEnergy Hubが展開し、あとは Chapter1と同じことになります。


3 Chapter 3 - Shared Coordinates

Chapter3から初めてSharingの話が出てきます。

Sharingとは、HoloLensとは別のPCをサーバとして立てて、このサーバが各HoloLensの持つ空間座標情報を管理することです。

ここでは、Energy Hubオブジェクト(Hologralm230でも出てきた)を複数のHoloLens越しに見る、というSharingの最もシンプルな例を体験できます。

まず、Hologram Collectionに指示に従ってスクリプトを追加、修正します。


次に、Sharing PrefabをHierarchy Viewにドラッグします。

f:id:Takyu:20170404122709p:plain

続いて、Sharing のInspectorにサーバのIPアドレス、使用するポート番号を入力します。

テストするだけならば、現在Unityを動かしているPCのIPアドレスです。ポート番号は20602を指定します。

f:id:Takyu:20170404122738p:plain


UnityのメニューからSharingのサービスを起動します。

f:id:Takyu:20170404122748p:plain

起動すると、このようにコマンドプロンプトが出ます。

f:id:Takyu:20170404122757p:plain

これでSharing Serviceの準備は完了です。次はHoloLens用のアプリをビルドしてデプロイします。

HoloLens側でアプリを起動すると、Chapter2と同じように自分の視点に合わせてEnergyHubが動きます。

このとき、HoloLens側ではAnchorの登録処理が行われており1分前後かかります。終わるまではAirTapが効きません。

本来ならば1分程度でAirTapが効いてEnergyHubを好きな位置に配置できます。この状態で2台目のHoloLensで同じアプリを実行すると、30-60秒程度で同じ位置のEnergyHubを見ることができます。


しかし、私の環境で20回以上試しましたがいずれもAnchor登録が完了せず、EnergyHubの固定ができませんでした。

部屋の空間モデルを取りやすいように、ゆっくりと部屋を歩いてみたり、5分程度待ってみたこともあったのですが、一度も成功しませんでした。

冒頭で紹介させていただいたグラニの鈴木さんとも話をしましたが、鈴木さんも同様の成功率の低さで詰まり、結果的にオリジナルのSharingの仕組みを作ることに至ったそうです。

詳細は下記のスライド、およびブログをご確認ください。

■スライド
docs.com


■ブログ
blog.xin9le.net


4 Tips

4-1. Sharingサービスを起動すると、アドレスが複数表示される

Serviceを起動したPCが複数のIPアドレスを持っている場合に発生します。コントロールパネルで見るとこうなっています。

f:id:Takyu:20170404122900p:plain

この状態でSharingサービスを起動すると、こうなります。

f:id:Takyu:20170404122914p:plain


動作確認を行った2017年3月時点では、複数のIPアドレスが表示された場合、一番上のアドレスで接続しないとHoloLensが接続できませんでした。

上記の例では、172.16.80.1と同一セグメントのネットワークにHoloLensが接続されている必要があります。

この順番をずらす方法はわかりませんでした。
別のネットワークでHoloLensと共有したい場合、上記の例だと192.168.0.4と同期したい場合は、172.16.80.1のネットワークを無効化する必要があります。手順は下記の通りです。

画面右下でネットワークアイコンを右クリックして、ネットワークと共有センターを開く。
f:id:Takyu:20170404122940p:plain


「アダプターの設定の変更」を選択する。
f:id:Takyu:20170404123027p:plain

右クリックでプロパティを選び、「無効にする」を選択する。
f:id:Takyu:20170404123101p:plain

Hyper-Vが仮想IPアドレスを持つため、HoloLensエミュレータの環境構築をしたPCでは必ず発生します。

4-2. Sharingを実行してもHoloLensのjoinが確認できない

HoloLensがSharingServiceに接続する(joinする)と、このようにログが表示されます。

f:id:Takyu:20170404123751p:plain

ただし、ネットワークが繋がっていないか、ファイアーウォールでブロックされているとログは表示されません。

ファイアーウォールが原因の場合、無効化すれば当然解決しますが、セキュリティ的にはあまりよくないので、Sharingのサービスを許可する設定を追加します。

まず、ネットワークと共有センターを開きます。
f:id:Takyu:20170404122940p:plain

次に、コントロールパネルからファイアーウォールの設定画面を開きます。
f:id:Takyu:20170404123241p:plain


詳細設定をクリックします。
f:id:Takyu:20170404123315p:plain

f:id:Takyu:20170404123329p:plain
受信の規制をクリックすると、許可しているサービスとしていないサービスが表示されます。

f:id:Takyu:20170404123359p:plain

ここで、SharingService.exeを右クリックしてプロパティを表示させます。

f:id:Takyu:20170404123412p:plain
「接続をブロックする」になっているので、それ以外の設定に変更します。

終わりに

同一の世界座標を共有し、Inside-Out Trackingだけで複数人で同一CGを共有するSharingは、現時点では再現が簡単ではありませんでした。

引き続き処理の流れを追って整理する予定でしたが、4/4時点でHolographic Academyのページにアクセスしたら、中身がなくなっていました。

Sharing解説の続きは、新しいAcademyが出てきてから再開にしたいと思います。


(2017/4/4追記) AcademyのURLが変更されていましたので、後日もう少し処理を追ってみたいと思います。

アメリカのカンファレンスに行くときのためのTips一覧

2014年のOculus Connect1に行って以来、アメリカで開催されるカンファレンスに行く機会が増えて来ました。

あれから3年経ち、カンファレンスに行かれる方が周りで増えてきたので、備忘録を兼ねてアメリカのカンファレンスに参加するときのTipsを残しておきたいと思います。


(注)
なお、ここに記載されている情報は、当時体験した内容(2014年9月以降の情報)に基づいていますが、あらゆる場所で通じることを保証するものではありません。

また、今後航空会社や渡航先のアメリカのルールが変わった場合、今回記載されている内容が通じない可能性もあります。

あらかじめご了承ください。

=====
変更履歴

2017/3/28

  [3-1] 入国審査 に、サンノゼ空港でAPCが使えなかったことを追記
[5-1] チェックイン に、チェックイン時のトラブル例を追記
[7-2] フードコート、カフェに行く に、持ち帰りたい場合の対応例を追記
=====

=====

目次

[1] 行く前の準備

[1-1] パスポートの取得
[1-2] ESTAの申請
[1-3] 航空券、ホテルの予約、カンファレンスの登録
[1-4] 自動化ゲートの申請
[1-5] 持ち物の準備

[2] 出国前の空港手続き

[2-1] チェックイン
[2-2] 荷物を預ける
[2-3] 保安検査場
[2-4] 出国審査

[3] 入国後の空港手続き

[3-1] 入国審査
補足:入国審査を短縮する方法 (APC)

[4] ホテルまで移動する

[5] ホテル

[5-1] チェックイン
[5-2] 部屋の設備
[5-3] 精算

[6] カンファレンス

[6-2] 参加する

[7] 生活関係

[7-1] レストランに行く
[7-2] フードコート、カフェに行く
[7-3] 物品を購入する

[8] 帰国する

[8-1] 空港までの移動

[8-2] チェックイン

[8-3] 保安検査場

[8-4] 日本に着いた後の入国手続き

終わりに

=====

続きを読む

apkをadb installしても終わらないときの対処方法

小ネタで対症療法ですが、備忘録として残しておきます。


Android StudioやUnityでビルドしたapkファイルは、PCとAndroid端末をUSBケーブルで接続し、コマンドプロンプトやターミナルで

$ adb install <アプリケーション名>.apk

とすると、インストールすることができます。
例えば、Macの場合、うまくいけばこのようなログになります。
(-rは上書きインストール)

PCname:AppDirectory Username$ adb install -r sample.apk 
[100%] /data/local/tmp/sample.apk
	pkg: /data/local/tmp/sample.apk
Success
PCname:AppDirectory Username$


しかし、このように%が100になった後、止まってしまうことがあります。

PCname:AppDirectory Username$ adb install -r sample.apk 
[100%] /data/local/tmp/sample.apk

そもそもの原因は不明ですが、adbを再起動すると直りました。

PCname:AppDirectory Username$ adb kill-server
PCname:AppDirectory Username$ adb start-server
PCname:AppDirectory Username$ adb install -r sample.apk 
[100%] /data/local/tmp/sample.apk
	pkg: /data/local/tmp/sample.apk
Success
PCname:AppDirectory Username$


起きるときと起きない時があるのが悩ましいところです。

MacのVisual Studio CodeとUnityを連携させる方法(5)

前回、Unity5.5とVisual Studio Codeの連携方法を記載しました。

これにより、下記のように、コード補完(Inputと入力したら、GetKeyのようにUnity固有のAPIが入力候補として表示される)ができるようになっています。

f:id:Takyu:20170226002912j:plain

今回は、Visual Studio Codeでデバッグ機能を使う方法を解説します。

===

手順

(1) debug用のプラグインをインストール

(2) 設定ファイルを開いて、対象機器のデバッグ機能が有効になっていることを確認

(3) Visual Studio CodeをデバッグモードでUnityと接続

(4) Unityでシーン実行

補足

終わりに

===

試した環境

Mac 10.12.3
・Unity5.5.1 f1
Visual Studio Code 1.9

(1) debug用のプラグインをインストール

Visual Studio Codeを開いてから、cmd + p のキーを同時に押すと、上段に入力ウインドウが出てきます。

ここで、

ext install unity

と入力すると、以下のようにDebugger for Unityが表示されるので、インストールを選択します。

f:id:Takyu:20170228223302p:plain

(2) 設定ファイルを開いて、対象機器のデバッグ機能が有効になっていることを確認

まず、下記の①、②の順にアイコンをクリックします。

f:id:Takyu:20170301001747p:plain

続いて、Unity Debuggerを選択します。

f:id:Takyu:20170301002554p:plain

すると、このようにlaunch.jsonファイルが開き、デバッグ対象のプラットフォームを選択できるようになります。

f:id:Takyu:20170301002608j:plain

(3) Visual Studio CodeをデバッグモードでUnityと接続

次に、Visual Studio Code側の三角の再生マークをクリックします。

すると、下部にAttached to Unity processというログが出ます。

f:id:Takyu:20170304103441j:plain

これで準備完了です。

あとは、一般的なデバッガと同じように、任意の場所でブレークポイントを貼っておけば、その場所まで処理が進んだ時に処理が止まります。

(4) Unityでシーン実行

通常通り、Unity側の三角の再生マークをクリックすると、Visual Studio Code側でもデバッグ画面が立ち上がります。

下記は、Input_textというstringにuGUIから"hello"と入力した直後で処理を止めています。

f:id:Takyu:20170304104027j:plain

右側のソースコードでは、Input_textの宣言時に何も値が入っていません。しかし、ブレークポイントを貼る前で、

Input_Text ="hello";

というコードを書いておきました。そのため、デバッガには"hello"が入っています。

また、他の変数もそれぞれ処理が進んだ状態の値が入っています。


上端にはstep実行や一時停止用の操作パネルもあります。これも一般的なデバッガと同じ使い方です。

補足

試しながら困ったことを書いておきます。

[1] デバッガーの接続対象にUnity Debuggerが出てこない

あるプロジェクトではできるのに、別のプロジェクトで試そうとすると、以下のようにUnity Debuggerが出てこないときがありました。

f:id:Takyu:20170304104608p:plain

このときは、(1)で開設した、debug用のプラグインを再インストールし、Visual Studio Codeを再起動するとできるようになりました。

別バージョンのUnityで開いたプロジェクトを5.5で開き直したからなのか、Unityプロジェクトを作るたびにUnity Debuggerをインストールする手順が必要なのか、詳細は不明です。

[2] v1.9時点では、ソースコード上の変数をマウスオーバーしても、値を見ることはできない

今後改善されるかもしれませんが、現時点では、debug ウインドウの「変数」というウインドウをスクロールしながら該当する変数を探していくしかなさそうです。

終わりに

個人的には、VSCodeはMonoより軽い感じがするほか、参照されている変数や関数を見られる機能があって、コードを書く時に重宝しています。


今回のデバッグではまだ少し使いやすさの点で課題がありそうですが、Visual Studio Codeは更新頻度が早いので、改善も早い気がします。

また何かVisual Studio Codeで便利な機能があったら紹介しようと思います。

MacのVisual Studio CodeとUnityを連携させる方法(4)

Mac上のUnityでVisual Studio Codeを使う方法について、これまで何度か紹介してきました。

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp

これまでの方法では、Unityでプロジェクトを作るたびにPluginsフォルダを生成し、VSCode.csを入れる必要がありました。

しかし、Unity5.5から、Visual Studio Codeとの連携が標準になったようです。

blogs.unity3d.com

f:id:Takyu:20170225233705p:plain

そこで、試してみたところ、連携まではすぐにできました。しかし、コード補完が効いてくれなかったので、少し手間取りました。

そこで、対処方法を含めて、コード補完をさせるまでの手順を整理しました。


(補足)
今回、設定が必要だったのは、私が最近Macを買い換えたことで色々なツールが入っていない状態だったためです。
ある程度ツールが入っている方であれば、今回の対処方法が不要な場合もあると思います。

試した環境

Mac 10.12.3
・Unity5.5.1 f1
Visual Studio Code 1.9

手順

Unity PreferenceのExternal Toolsを選択し、Visual Studio Code.appを指定します。

f:id:Takyu:20170225234412p:plain

原則、手順はこれだけです。

適当なUnityプロジェクト、C#スクリプトを作り、何か入力してみます。

すると、下記のInut.GetKeyDownのように、Unity特有のAPIが候補として表示されます。

f:id:Takyu:20170226002912j:plain


もし環境が整っていない場合、このようにUnity特有のAPIが候補に出てきません。

f:id:Takyu:20170226003045p:plain
(例えば、Inputが出てこない)


このような場合、以下のエラー対応方法を参照ください。

エラー対応方法

(1)C#のコードに色がつかない

こうなっている場合です。

f:id:Takyu:20170226095511p:plain

C#のextentionが入っていないためです。

Visual Studio Codeを開き、cmd + pを同時に押してから、

ext install sharp

と入力し、C#アイコンをクリックし、C#の機能をインストールします。

f:id:Takyu:20170226002706p:plain

これでC#の記述に色がつきます。

f:id:Takyu:20170226095539p:plain

(2)The .NET CLI Tools cannot be located が出る

f:id:Takyu:20170225234851p:plain

以下のページの手順に沿って、.NET Core SDKをインストールします。

準備

Xcodeがインストールされていない場合、下記よりMac App Storeを開いてインストールします。
(次のbrewコマンド使用に必要のため)

Xcode

Xcode

  • Apple
  • 開発ツール
  • 無料


次に、ターミナルを開き、brewと入力します。

brew : command not found 

と出たら、下記をターミナルにコピペすることで、brewをインストールできます。
(brewのバージョンが表示された場合は、下記のインストール作業は不要です)

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Xcodeを一度も開いていない場合、インストールに失敗し、Xcodeのライセンスに同意するように通知されます。

f:id:Takyu:20170226000130j:plain

この場合、

sudo xcodebuild -license

を実行し、指示に従って進めます。

f:id:Takyu:20170226000559j:plain

f:id:Takyu:20170226000816j:plain

これでbrewがインストールできました。


brewがインストールできていたら、次は下記を入力して、opensslをインストールします。

$ brew update
$ brew install openssl
$ mkdir -p /usr/local/lib
$ ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
$ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/


ここまでの手順により、.NET CLI Toolsをインストールする準備ができました。

このHPから、Download .NET Core SDKを取得し、インストールします。

.NET - Powerful Open Source Development

f:id:Takyu:20170226001222j:plain

f:id:Takyu:20170226001547j:plain

f:id:Takyu:20170226001630j:plain


これで、冒頭のエラーは消えます。

(3) The reference assemblies for framework ".NETFramework,Version=v3.5" were not found.が出る


Unity上のC#スクリプトVisual Studio Codeで開いたが、何かエラーが出ている気がする、、という時は、出力ウインドウを見ると手がかりが得られることがあります。

出力ウインドウは、表示 -> 出力と指定することで、下部に表示されます。

f:id:Takyu:20170226002107j:plain


私の場合、ここに100行くらいのinfo、warning、failログが表示されていました。

その中に、


[fail]: OmniSharp.MSBuild.ProjectFile.ProjectFileInfo
The reference assemblies for framework ".NETFramework,Version=v3.5" were not found.

というログがありました。

これはmonoが入っていないことが原因のため、ターミナルで

$ brew install mono

を入力して、monoをインストールします。


これは下記の記事を見ることで解決できました。ありがとうございます。
偶然ですが、ほぼ同じ環境でした。

kb.imakewebsites.ca


終わりに

UnityとVisual Studio Codeの連携方法は今まで何度か変わってきました。
今後も変わる可能性がありますが、Unityで標準対応になったことから、大きな変化はないと思われます。

あとは、デバッグ機能が動くことを確認してみたいと思います。