MRが楽しい

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

公式チュートリアル「MR and Azure 305 7章」を試してみる

本日はチュートリアルの実施枠です。
Academyの「MR and Azure 305: Functions and storage」の実施内容をまとめます。
docs.microsoft.com
前回記事の続きです。
bluebirdofoz.hatenablog.com
今回は「Chapter 7」です。

Chapter 7:Create the AzureServices class

最初に作成するスクリプトは AzureServices クラスです。
AzureServicesのクラスの役割は以下になります。
・Azure アカウントの資格情報を格納しています。
・Azure アプリケーション機能を呼び出す。

本章ではこのクラスを作成していきます。

1.Script フォルダを作成します。
Asset フォルダで右クリックし、Create > Folder を選択します。
f:id:bluebirdofoz:20181008225701j:plain

2-3.作成した Script フォルダを開き、フォルダ内で右クリックして、Creapte -> C# Script を選択します。
Script の名称は AzureServices に設定します。
f:id:bluebirdofoz:20181008225708j:plain

4.新しいスクリプトをダブルクリックしてVisual Studioで開きます。

5-9.以下の通り、スクリプトを編集します。
・AzureServices.cs

// 名前空間の追加
using System;
using System.Collections;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.File;
using System.IO;
using System.Net;

public class AzureServices : MonoBehaviour {
    // インスペクタフィールドの追加
    /// <summary>
    /// Provides Singleton-like behavior to this class.
    /// このクラスをシングルトンと同じように動作させます
    /// </summary>
    public static AzureServices instance;

    /// <summary>
    /// Reference Target for AzureStatusText Text Mesh object
    /// AzureStatusText Text Meshオブジェクトの参照先
    /// </summary>
    public TextMesh azureStatusText;

    // メンバ変数の追加
    /// <summary>
    /// Holds the Azure Function endpoint - Insert your Azure Function Connection String here.
    /// Azure Function のエンドポイントを保持します 
    /// 第2章で作成した Azure Function のエンドポイントをここに挿入します。
    /// Connection String here.
    /// </summary>
    private string azureFunctionEndpoint = "--Insert here you AzureFunction Endpoint--";

    /// <summary>
    /// Holds the Storage Connection String - Insert your Azure Storage Connection String here.
    /// Azure Storage のエンドポイントを保持します
    /// 第1章で作成した Azure Storage のエンドポイントをここに挿入します。
    /// </summary>
    private string storageConnectionString = "--Insert here you AzureStorage Connection String--";

    /// <summary>
    /// Name of the Cloud Share - Hosts directories.
    /// 共有クラウドの名前 - ホストディレクトリ
    /// </summary>
    private const string fileShare = "fileshare";

    /// <summary>
    /// Name of a Directory within the Share
    /// 共有内のディレクトリ名
    /// </summary>
    private const string storageDirectory = "storagedirectory";

    /// <summary>
    /// The Cloud File
    /// クラウドファイル
    /// </summary>
    private CloudFile shapeIndexCloudFile;

    /// <summary>
    /// The Linked Storage Account
    /// リンクされたストレージアカウント
    /// </summary>
    private CloudStorageAccount storageAccount;

    /// <summary>
    /// The Cloud Client
    /// クラウドクライアント
    /// </summary>
    private CloudFileClient fileClient;

    /// <summary>
    /// The Cloud Share - Hosts Directories
    /// クラウド共有 - ホストディレクトリ
    /// </summary>
    private CloudFileShare share;

    /// <summary>
    /// The Directory in the share that will host the Cloud file
    /// クラウドファイルをホストする共有内のディレクトリ
    /// </summary>
    private CloudFileDirectory dir;


    /// <summary>
    /// Called on initialization
    /// 初期化処理
    /// </summary>
    private void Awake()
    {
        instance = this;
    }

    /// <summary>
    /// Runs at initialization right after Awake method
    /// StartメソッドはAwakeメソッドの直後の初期化時に実行されます
    /// </summary>
    private void Start()
    {
        // Set the Status text to loading, whilst attempting connection to Azure.
        // Azureへの接続を試みている間、ステータステキストを[Loading...]に設定します。
        azureStatusText.text = "Loading...";
    }

    /// <summary>
    /// Call to the Azure Function App to request a Shape.
    /// Azure Function の App を呼び出して図形を要求します。
    /// </summary>
    public async void CallAzureFunctionForNextShape()
    {

    }
}

f:id:bluebirdofoz:20181008225727j:plain
※ エディター上で以下のエラーが表示されることがあります。
(「Feature 'async function' is not available in C# 4. Please use language version 5 or greater」)
これらはエディター上のみのエラーメッセージのため、無視して問題ありません。
以下の記事を参考にしてください。
bluebirdofoz.hatenablog.com

azureFunctionEndpoint を、第2章で作成した Azure Function のエンドポイントで置き換えます。
storageConnectionString を、第1章で作成した Azure Storage の接続用文字列で置き換えます。
f:id:bluebirdofoz:20181008225738j:plain

10.Visual Studio で変更を保存して Unity に戻ります。
f:id:bluebirdofoz:20181008225746j:plain

11.Hierarchy パネルの MixedRealityCameraParent を開くと、直下に MixedRealityCamera オブジェクトがあります。
AzureServices スクリプトをこの MixedRealityCamera オブジェクトにドラッグして追加します。
f:id:bluebirdofoz:20181008225754j:plain

12.Hierarchy パネルの GazeButton を開きます。
直下にある AzureStatusText オブジェクトを AzureServices スクリプトの AzureStatusText 変数に設定します。
f:id:bluebirdofoz:20181008225804j:plain

Chapter 7 はここまでです。
次回は Chapter 8 を実施します。
bluebirdofoz.hatenablog.com

公式チュートリアル「MR and Azure 305 6章」を試してみる

本日はチュートリアルの実施枠です。
Academyの「MR and Azure 305: Functions and storage」の実施内容をまとめます。
docs.microsoft.com
前回記事の続きです。
bluebirdofoz.hatenablog.com
今回は「Chapter 6」です。

Chapter 6:Import Azure Storage for Unity

本章では Azure Storage for Unity(Azure 用 SDK を活用しています)を使用します。
docs.microsoft.com

現在 Unity ではインポート後にプラグインを再設定する必要があるという既知の問題があります。
バグが解決された後、セクションの 4-7 の手順は不要になります。

SDKをインポートするには以下のリンクから unitypackage をダウンロードしてください。
・azure-storage-unity-8.6.0.unitypackage
 https://aka.ms/azstorage-unitysdk

1.メニューから Assets -> Import Package -> Custom Package を開きます。
ダウンロードした azure-storage-unity-X.X.X.unitypackage ファイルを選びます。
f:id:bluebirdofoz:20181007211707j:plain

2-3.Import Unity Package ダイアログが開きます。
Plugins -> Storage を選択します。他のものはこのコースに不要なので全てオフにします。
選択したら[Import]ボタンをクリックします。
f:id:bluebirdofoz:20181007211715j:plain

4.Assets フォルダ内の Plugins -> Storage フォルダを開きます。
以下のプラグインを選択します。
Microsoft.Data.Edm
Microsoft.Data.OData
Microsoft.WindowsAzure.Storage
・System.Spatial
f:id:bluebirdofoz:20181007211722j:plain

5.AnyPlatform のチェックを外します。
それ以外のチェックが行われるのでそこから WSA Player のチェックを外します。
[Apply]ボタンをクリックします。
f:id:bluebirdofoz:20181007211731j:plain

※ これらのプラグインは Unity Editorでのみ使用するようにチェックしました。
プロジェクトが Unity からエクスポートされた後の WSA フォルダに同じプラグインの異なるバージョンが存在するためです。

6.次に Storage フォルダの Microsoft.Data.Services.Client のみを選択します。
f:id:bluebirdofoz:20181007211742j:plain

7.[Don't Process]のチェックを行い、[Apply]ボタンをクリックします。
f:id:bluebirdofoz:20181007211752j:plain

8.最後に Storage フォルダの Newtonsoft.Json のみを選択します。
f:id:bluebirdofoz:20181007211758j:plain

9.こちらは全てチェックを外して[Apply]ボタンをクリックします。
f:id:bluebirdofoz:20181007211807j:plain

10.Plugins -> Storage -> WSA 配下にも Newtonsoft.Json がありまs。
同じく全てチェックを外して[Apply]ボタンをクリックします。
f:id:bluebirdofoz:20181007211817j:plain

※ これは Newtonsoft.Json が MRTK に既にインポートされており重複を防ぐためです。

Chapter 6 はここまでです。
次回は Chapter 7 を実施します。
bluebirdofoz.hatenablog.com

公式チュートリアル「MR and Azure 305 3~5章」を試してみる

本日はチュートリアルの実施枠です。
Academyの「MR and Azure 305: Functions and storage」の実施内容をまとめます。
docs.microsoft.com
前回記事の続きです。
bluebirdofoz.hatenablog.com
今回は「Chapter 3 ~ Chapter 5」です。

Chapter 3:Set up the Unity project

Chapter 4:Main Camera setup

チュートリアルページではプロジェクトの基本的な設定項目について全て手動で行っています。
これらの設定項目は MRTK を利用すれば自動で設定可能です。
本記事では Chapter 3 と Chapter 5 を chapter 4 より先に、MRTK を利用して設定します。

以下の手順ページの「HoloLens(WindowsMR) プロジェクトの基本設定」までを実施したプロジェクトを作成します。
bluebirdofoz.hatenablog.com
f:id:bluebirdofoz:20181006231741j:plain

InternetClient の利用が必要なため、capabilites の設定を行います。
メニューから Mixed Reality Toolkit -> Configure -> Apply UWP Capability Settings を開きます。
f:id:bluebirdofoz:20181006231752j:plain

「Apply UWP Capability Settings」ダイアログが開くので、「InternetClient」にチェックを入れて「Apply」を実行します。
f:id:bluebirdofoz:20181006231800j:plain

Scripting Runtime Version を Experimental(.NET 4.6相当)にする必要があります。
メニューから Edit -> Project Settings -> Player を開きます。
f:id:bluebirdofoz:20181006231810j:plain

Inspector パネルから Other Settings を開き、Scripting Runtime Version の設定を Experimental(.NET 4.6 Equivalent) に変更します。
f:id:bluebirdofoz:20181006231818j:plain

Chapter 5:Setting up the Unity scene

1.Hierarchy パネルの空の領域を右クリックし、3D Object -> Plane を追加します。
f:id:bluebirdofoz:20181006231824j:plain

2.追加した Plane オブジェクトの Transform コンポーネントを以下の通り変更します。

Position X:0   Y:-1  Z:4
Rotation X:0   Y:0   Z:0
Scale    X:10  Y:1   Z:10

f:id:bluebirdofoz:20181006231832j:plain

3.Hierarchy パネルの空の領域を右クリックし、3D Object -> Cube を追加します。
f:id:bluebirdofoz:20181006231840j:plain
以下の通り設定を行います。
a.キューブの名前を GazeButton に変更します。
b.Transform コンポーネントを以下の通り変更します。

Position X:0   Y:1  Z:10

f:id:bluebirdofoz:20181006231850j:plain

c.[Tag]ドロップダウンをクリックし、[Add Tag]をクリックします。
f:id:bluebirdofoz:20181006231901j:plain

d.[Tags & Layers]ペインが開きます。
[+](プラス)ボタンを選択し、[New Tag Name]フィールドに GazeButton と入力し、[Save]を押します。
f:id:bluebirdofoz:20181006231911j:plain

e.再び GazeButton オブジェクトの[Tag]ドロップダウンをクリックし、新しく作成した GazeButton タグを割り当てます。
f:id:bluebirdofoz:20181006231920j:plain

4.Hierarchy パネルの GazeButton オブジェクトを右クリックし、Create Empty を追加します。
これは GazeButton オブジェクトの子オブジェクトとして追加されます。
f:id:bluebirdofoz:20181006231928j:plain

5.作成したオブジェクトに以下の通り設定を行います。
a.名前を ShapeSpawnPoint に変更します。
b.Transform コンポーネントを以下の通り変更します。

Position X:0   Y:-1  Z:0

f:id:bluebirdofoz:20181006231937j:plain

6.次に、3D Text オブジェクトを作成して、Azure サービスのステータスに関するフィードバックを提供します。
Hierarchy パネルの GazeButton を再度右クリックし、3D Object -> 3D Text を子として追加します。
f:id:bluebirdofoz:20181006231945j:plain

7.3D Textオブジェクトの名前を AzureStatusText に変更します。
8.AzureStatusText オブジェクトの Transform コンポーネントを次のように設定します。

Position X:0   Y:0   Z:-0.6
Rotation X:0   Y:0   Z:0
Scale    X:0.1 Y:0.1 Z:0.1

f:id:bluebirdofoz:20181006231953j:plain

9.Text Meshコンポーネントを次のように変更します。

Anchor:Middle center
Alignment:Center
FontSize:12
Color:FF0000FF

f:id:bluebirdofoz:20181006232003j:plain

10-11.最終的に Hierarchy パネルの構造とシーンは以下のようになります。
f:id:bluebirdofoz:20181006232018j:plain

Chapter 3 ~ 5 はここまでです。
次回は Chapter 6 を実施します。
bluebirdofoz.hatenablog.com

公式チュートリアル「MR and Azure 305 2章」を試してみる

本日はチュートリアルの実施枠です。
Academyの「MR and Azure 305: Functions and storage」の実施内容をまとめます。
docs.microsoft.com
前回記事の続きです。
bluebirdofoz.hatenablog.com
今回は「Chapter 2」です。

Chapter 2:Setting up an Azure Function

Azure サービスに Azure Functions を記述します。

Azure Functions を使用してコード内の機能を実行することができます。
Azure アカウントにアクセスするための認証情報を持つアプリケーションがこの機能にアクセスできます。

1.Azure ポータルから左上隅の[リソースの作成]をクリックし、[Function App]を検索します。Enterを実行します。
 [Function App]が見つかるので、これを選択します。
f:id:bluebirdofoz:20181005230214j:plain

2.新しいページに Function App の説明が表示されます。
 このページの左下にある[作成]ボタンをクリックして、このサービスとの関連付けを作成します。
f:id:bluebirdofoz:20181005230222j:plain

3.作成をクリックしたら新しいページが表示されます。以下の各種情報を設定します。

  [アプリ名]:このサービスインスタンスに設定する名前を挿入します。
  [サブスクリプション]:利用するサブスクリプションを選択します。
  [リソースグループ]:既存のリソースグループを選択するか、新しいリソースグループを作成します。
    リソースグループは Azure アセットの収集を監視し、アクセスを制御し、課金を管理し、管理する方法を提供します。
    単一のプロジェクト(これらのラボなど)に関連する全てのサービスを共通のリソースグループに保つことをお勧めします。
  [OS]:[Windows]を選択します。
  [ホスティングプラン]:[従量課金プラン]を選択します。
  [場所]:リソースグループの場所を決定します。アプリケーションが実行される地域を選択するのが理想的です。
  [Storage]:[Use existing]を選択し、ドロップダウンから1章で作成した Storage を選択します。
  [Application Insights]:この演習では[オフ]を選択します。
  各種情報を設定したら[作成]を選択します。

f:id:bluebirdofoz:20181005230229j:plain

5.[作成]をクリックした後、サービスが作成されるまで待つ必要があります。これには数分かかることがあります。
6.サービスインスタンスが作成されると、通知がポータルに表示されます。
7.通知をクリックすると、新しいサービスインスタンスが表示されます。[リソースに移動]を選択します。
f:id:bluebirdofoz:20181005230237j:plain

8.新しい Function App インスタンスの[概要]ページが表示されます。
f:id:bluebirdofoz:20181005230244j:plain

9.Functions App ダッシュボードのパネル左側の[関数]にカーソルを重ねます。
[+](プラス)ボタンが表示されるので、これをクリックします。
f:id:bluebirdofoz:20181005230253j:plain

10.新規作成パネルが開くので、以下の通り設定します。
[1.シナリオを選択します]で[Webhook + API]を選択します。
[2.言語を選択します]で[CSharp]を選択します。
設定を完了したら[この関数を作成する]ボタンをクリックします。
f:id:bluebirdofoz:20181005230303j:plain

11.コードページ(run.csx)に移動します。
移動しない場合は左側のパネル内の関数リストを確認し、作成した関数をクリックしてください。
f:id:bluebirdofoz:20181005230310j:plain

12.以下のコードを関数にコピーします。この関数は呼び出されると 0 と 2 の間のランダムな整数を返します。

    using System.Net;
    using System.Threading.Tasks;

    public static int Run(CustomObject req, TraceWriter log)
    {
        Random rnd = new Random();
        int randomInt = rnd.Next(0, 3);
        return randomInt;
    }

    public class CustomObject
    {
        public String name {get; set;}
    }

13.[保存]ボタンをクリックします。その後、[関数の URL の取得]をクリックします。
f:id:bluebirdofoz:20181005230320j:plain

14-15.プロジェクトの後半で必要になるので 表示されるエンドポイントを書き留めます。
f:id:bluebirdofoz:20181005230327j:plain

Chapter 2 はここまでです。
次回は Chapter 3 を実施します。
bluebirdofoz.hatenablog.com

公式チュートリアル「MR and Azure 305 1章」を試してみる

本日はチュートリアルの実施枠です。
Academyの「MR and Azure 305: Functions and storage」の実施内容をまとめます。
docs.microsoft.com
docs.microsoft.com
今回は「概要 ~ Chapter 1」です。

元記事は Immersive 向けの手順がメインですが、本記事では HoloLens 向けの手順をメインにまとめます。

概要

このコースでは、Azure Functions を作成して使用する方法と、Azure Storage でデータを混合現実アプリケーションに格納する方法を学習します。

Azure Functions はMicrosoftのサービスで、開発者は Azure 上でコードの関数を実行することができます。
これにより、ローカルアプリケーションではなくクラウドに作業を委任することができます。
Azure Functions は、C#、F#、Node.js、JavaPHPなどのいくつかの開発言語をサポートしています。
詳細は Azure Functions のページを参照してください。
docs.microsoft.com

Azure Storage は Microsoftクラウドサービスで、開発者は可用性、安全性、耐久性、スケーラビリティ、冗長性を備えた環境にデータを保存できます。
Microsoft がメンテナンスを実施し、重大な問題を処理します。
詳細は Azure Storage の記事を参照してください。
docs.microsoft.com

このコースを修了すると、次のことができる複合現実アプリケーションが実現します:

1.ユーザーがシーンを注視で操作できる。
2.ユーザーが3Dボタンを注視したときにオブジェクトのスポーンをトリガーする。
3.スポーンされたオブジェクトは、Azure Functions によって選択される。
4.各オブジェクトが生成されると、アプリケーションはオブジェクトタイプを Azure Storage にあるファイルに格納します。
5.2回目の読み込み時にファイルのデータが取得され、アプリケーションの以前のインスタンスからのスポーン動作を再生する。

アプリケーションでは、結果をデザインとどのように統合するかはあなた次第です。
このコースは Azure サービスと Unity プロジェクトを統合する方法を学ぶためのものです
複合現実感アプリケーションを強化するために、このコースから得た知識を活用して下さい。

バイスのサポート

このコースは主に Windows Mixed Reality immersive(VR)ヘッドセットに焦点を当てています。
ここで学んだことは Microsoft HoloLens にも適用できます。
コースに沿って進むと HoloLens をサポートするために必要となる可能性のある変更に関する注記が表示されます。

※ 前述の通り本記事では HoloLens を対象に手順を進めていきます。

前提条件

このコースには、次のハードウェアとソフトウェアをお勧めします。
Windows Mixed Reality と互換性のある開発用PC
・開発者モードを有効にした Windows 10 Fall Creators Update(またはそれ以降)
・最新のWindows 10 SDK
・Unity 2017.4
Visual Studio 2017
・開発者モードを有効にした Windows Mixed Reality immersive(VR)ヘッドセットまたは Microsoft HoloLens
・Azure リソースを作成する Azure アカウント
・Azure セットアップと Face API 取得のためのインターネットアクセス

始める前に

このチュートリアルで言及したプロジェクトをルートまたはルートに近いフォルダに作成することを強く推奨します
これは、このプロジェクトを構築する際に問題が発生するのを避けるためです。
長いフォルダパスはビルド時に問題を引き起こす可能性があります。

Chapter 1:The Azure Portal

Azure Storage サービスを使用するには、Azure ポータルでストレージアカウントを作成および設定する必要があります。

1.Azure Portalにログインします。
(Azureログインについては以下記事でまとめています。)
bluebirdofoz.hatenablog.com

2.ログインしたら、左上隅の[リソースの作成]をクリックし、[storage accounts]を検索します。Enterを実行します。
 [ストレージアカウント]が見つかるので、これを選択します。
f:id:bluebirdofoz:20181004003143j:plain

3.新しいページに Storage accounts の説明が表示されます。
 このページの左下にある[作成]ボタンをクリックして、このサービスとの関連付けを作成します。
f:id:bluebirdofoz:20181004003149j:plain

4.作成をクリックしたら新しいページが表示されます。以下の各種情報を設定します。

  [名前]:このサービスインスタンスに設定する名前を挿入します。
  [デプロイモデル]:[Resource manager]を選択します。
  [アカウントの種類]:[Storage (汎用 v1)]を選択します。
  [場所]:リソースグループの場所を決定します。アプリケーションが実行される地域を選択するのが理想的です。
  [レプリケーション]:[読み取りアクセス冗長ストレージ (RA-GRS)]を選択します。
  [パフォーマンス]:[Standard]を選択します。
  [安全な転送が必須]:[無効]を選択します。
  [サブスクリプション]:利用するサブスクリプションを選択します。
  [リソースグループ]:既存のリソースグループを選択するか、新しいリソースグループを作成します。
    リソースグループは Azure アセットの収集を監視し、アクセスを制御し、課金を管理し、管理する方法を提供します。
    単一のプロジェクト(これらのラボなど)に関連する全てのサービスを共通のリソースグループに保つことをお勧めします。
  [仮想ネットワーク]:[無効]を選択します。
  [Data Lake Sorage Gen2]:[無効]を選択します。

各種情報を設定したら[作成]を選択します。
f:id:bluebirdofoz:20181004003156j:plain

5.[作成]をクリックした後、サービスが作成されるまで待つ必要があります。これには数分かかることがあります。
6.サービスインスタンスが作成されると、通知がポータルに表示されます。
7.通知をクリックすると、新しいサービスインスタンスが表示されます。[リソースに移動]を選択します。
f:id:bluebirdofoz:20181004003203j:plain

8.新しいインスタンスの[概要]ページが表示されます。
f:id:bluebirdofoz:20181004003209j:plain

9.ナビゲーションメニューにある鍵のアイコンの[アクセスキー]タブを開きます。これにより、キーが表示されます。
プロジェクトの後半で必要になるので、表示されたキーのコピーを取ってください。
f:id:bluebirdofoz:20181004003215j:plain

Chapter 1 はここまでです。
次回は Chapter 2 を実施します。
bluebirdofoz.hatenablog.com

Blenderで頂点カラーをテクスチャにベイクする

本日は Blender の技術調査枠です。
Blenderで頂点カラーをテクスチャにベイクする手順についてまとめます。

頂点カラーを利用する3Dモデルの問題

以下のような頂点カラーで色付けされた3Dモデルのポリゴン数を削減したいとします。
f:id:bluebirdofoz:20181003093354j:plain

そのまま[ポリゴン数削減モディファイア]を利用すると、頂点が減ってしまうため、同時に色情報が失われてしまいます。
以下は三角面数を 512 から凡そ半分の 253 まで削減したケースの結果です。見た目が大きく変わるのが分かります。
f:id:bluebirdofoz:20181003093441j:plain

こういった場合に頂点カラーをテクスチャとしてベイクすると、見た目の情報を保ったままポリゴン削減することができます。

頂点カラーをテクスチャにベイクする

下準備として、まずはベイク先のテクスチャを用意します。
3DモデルのUV展開を行い、[新規]ボタンからテクスチャを作成します。
f:id:bluebirdofoz:20181003093454j:plain

ここで出力するテクスチャのサイズを指定します。好みのサイズを指定してください。
f:id:bluebirdofoz:20181003093502j:plain

ベイク先のテクスチャが準備できたらオブジェクトモードに戻り、[レンダー]タブを開きます。
[ベイク]パネルを開き、[ベイクモード]を[頂点カラー]に変更して[ベイク]ボタンをクリックします。
f:id:bluebirdofoz:20181003093510j:plain

頂点カラーがテクスチャにベイクされます。
画像 -> 画像を別名保存 から作成したベイク画像を画像ファイルとして出力します。
f:id:bluebirdofoz:20181003093521j:plain

これで頂点カラーをテクスチャにベイクすることができました。

ベイク画像をテクスチャとして利用する

ベイク画像をテクスチャとして利用するにはマテリアルで設定を行います。
3Dモデルに新規マテリアルを作成し、テクスチャとして出力した画像を指定します。
[マッピング]パネルの[座標]は[UV]とします。
f:id:bluebirdofoz:20181003093528j:plain

この状態で[ポリゴン数削減モディファイア]を適用してみます。
同じく三角面数を 512 から 253 まで削減してみました。
色情報はテクスチャで保持されているため、見た目の情報をほぼ維持したままポリゴンの削減を行えました。
f:id:bluebirdofoz:20181003093537j:plain

より綺麗に色情報を反映するにはUVの切れ目を上手く調整する必要があります。
f:id:bluebirdofoz:20181003093550j:plain

なお、逆に頂点カラーへのベイクを実施する手順については以下記事でまとめています。
bluebirdofoz.hatenablog.com

HoloLensで立体音響を体験する

本日は HoloLens の技術調査枠です。
HoloLens で立体音響を体験するプロジェクトの作成手順をまとめます。

サンプルシーンの作成

サンプル作成のため、HoloLens(WindowsMR)
プロジェクトの基本設定を行ったプロジェクトを用意します。
bluebirdofoz.hatenablog.com
f:id:bluebirdofoz:20181002022712j:plain

立体音響を分かりやすく体験するため、カメラを中心にオブジェクトが周回するシーンを作成します。
Hierarchy パネルの空欄を右クリックし、Create Empty を選択して GameObject を作成します。
f:id:bluebirdofoz:20181002022718j:plain

更に作成した GameObject を右クリックし、 3D Object -> SphereSphere オブジェクトを作成します。
作成した Sphere オブジェクトの Transform を以下の通り設定します。

Position X:0   Y:0   Z:2
Rotation X:0   Y:0   Z:0
scale    X:0.2 Y:0.2 Z:0.2

f:id:bluebirdofoz:20181002022725j:plain

アニメーションの作成手順に従って、GameObject の Rotation の Y 軸を360度回転するアニメーションを作成します。
bluebirdofoz.hatenablog.com
以下のように設定しました。

Samples:60
  キーフレーム位置:0
    Rotation.X:0
    Rotation.Y:0
    Rotation.Z:0
  キーフレーム位置:600
    Rotation.X:0
    Rotation.Y:360
    Rotation.Z:0

f:id:bluebirdofoz:20181002022734j:plain
GameObject が回転することで Sphere オブジェクトがカメラを中心に周回するようになります。

次に Sphere オブジェクトにオーディオを設定します。
Sphere オブジェクトを選択し、[Add Component]から[Audio Source]を検索して追加します。
f:id:bluebirdofoz:20181002022740j:plain

適当なオーディオファイル(wav,mp3など)をプロジェクトにインポートします。
追加された[Audio Source]の[AudioClip]にインポートしたオーディオファイルを反映します。
f:id:bluebirdofoz:20181002022747j:plain

まずはこの状態で[再生]ボタンをクリックして、プロジェクトを再生してみます。
[Audio Source]を持った Sphere オブジェクトがカメラを中心に周回しますが、音は平面的に聞こえ続けてしまいます。
f:id:bluebirdofoz:20181002022754j:plain

立体音響の設定

ここから立体音響を実現するための設定を行います。
メニューから Edit -> Project Settings -> Audio を開きます。
f:id:bluebirdofoz:20181002022801j:plain

Inspector ビューに AudioManager が開くので、[Spatializer Plugin]の設定を[MS HRTF Spatializer]に変更します。
f:id:bluebirdofoz:20181002022806j:plain

再び Sphere オブジェクトを選択し、[Audio Source]の設定を以下のとおり変更します。
1.[spatialize](空間化の有効化)をチェックする。
2.[spatialBlend](3D立体化の計算)を1.0に設定する
f:id:bluebirdofoz:20181002022815j:plain
docs.unity3d.com

2019/05/15追記。
更に[3D Sound Settngs]の項目を開くと、距離による音の減衰や変化についても設定できます。
f:id:bluebirdofoz:20190515094815j:plain

改めて[再生]ボタンをクリックして、プロジェクトを再生してみます。
カメラを中心に周回する Sphere オブジェクトの方向から立体的に音が聞こえるようになります。
f:id:bluebirdofoz:20181002022824j:plain

そのまま HoloLens にインストールすると HoloLens で立体音響を体験できます。
視野外に隠れた Sphere オブジェクトを音を頼りに追う事ができます。
f:id:bluebirdofoz:20181002022832j:plain