アセット機能 その3 ピンクになるモデルの修正作業
前回使用したSample_Cube.prefabもピンクでした。今回はこれを修正する「アセットの修正作業」を紹介します。
また、これらの作業で必須の アマレコVRサーバーからアセットファイルを使う方法 も紹介します。

1.ピンクになる主な原因
オブジェクトがピンクになる主な原因は次の3つでしょうか
・シェーダーが含まれていない
・シェーダーが含まれているけど 使えない(機種依存で使えない)
・マテリアルの問題
前回のSample_Cube.prefabではマテリアルそのものが含まれていない為 ピンクで表示されてしまいます。
ですので修正作業は以下のようになります。
【修正作業】
(1) マテリアルを作成する
(2) マテリアルのシェーダーと色を設定する
(3) キューブのゲームオブジェクトへマテリアルを設定する
(4) キューブのプレハブへ変更を適用する
(5) アセットをビルド
※ ピンクになる原因の多くがマテリアルに問題はなくシェーダーによるものですので(1)と(3)は不要です。ピンクになるマテリアルでスタンダードシェーダーを指定することでとりあえず表示できるようになります。
2.修正作業
(1) マテリアルを作成する
前回作成したasset_projectsを開いて、画面下部のAssetsフォルダ内で右クリックのメニューから「Create」→「Material」と選択し、新しいマテリアルを作成します。

(2) マテリアルのシェーダーと色を設定する
作成したマテリアルのインスペクターでシェーダーを選択し、色を好みで設定します。
シェーダーはとりあえず「Standard」としてください。
新しく作成したマテリアルは最初からStandardとなっていると思いますのでそのままで結構です。色だけ好みで設定してください。

(3) キューブのゲームオブジェクトへマテリアルを設定する
ヒエラルキーで「Test_Cube」を選択し、右側のインスペクターのメッシュレンダラーのElementへ(1)で作成したマテリアルをドロップします。

これでシーンビューの色が変わります。

(4) キューブのプレハブへ変更を適用する
つづいて現在のゲームオブジェクトの状態をプレハブへ適用します。
ヒエラルキーで「Test_Cube」を選択し、インスペクターのPrefabの「Overrides」から「Apply All」を選択します。

これでAssetsフォルダにあるTest_Cube.prefabへマテリアルの修正が適用されます。
※ 今回は異常が解決したからか サムネイル画像が更新されましたが、赤いマテリアルから青いマテリアルに変更するなどでは
サムネイル画像は更新されません。

(5) アセットをビルド
Unityのツールバーの「Window」から「AssetBundle Browser」を表示します。
Test_Cube.prefabを登録しますが、既に登録済の場合はBuildタブでBuildボタンを押すだけで新しいアセットファイルが作成されます。
ビルドの仕方はこちらを見てください。
3.アセットのテストについて
通常はアセットファイルをQuestの内臓ストレージへ転送して使いますが、修正作業などテストのたびに転送するのは面倒ですので 暫定的ですが、AmaRecVR Serverから利用できるようになっています。
また、この方法であればアマレコVRを起動したまま アセットファイルの更新ができます。
(1) AmaRecVR Serverの設定
AmaRecVR Serverの設定で画像ファイルの拡張子に「assetbundle」を追加します。

(2) アセットファイルをコピー
サーバーがアクセスできるフォルダ(動画や画像が保存されているフォルダ)へ アセットファイルをコピーします。
このとき、他のファイルと混ざらないよう アセット専用のフォルダを作って管理するのが望ましいです。
また、ビルドした拡張子なしのアセットファイルをサーバーのフォルダへ拡張子を付けてコピーするバッチファイルを作成すると便利です。
【バッチファイルの例】

(3) アマレコVRでアセットを使う
アマレコVRのファイル画面で(2)のフォルダを表示してアセットファイルを再生します。
再生するとアセットメニューが表示されますので 使うスロットを選択するとアセットファイルが読み込まれます。

4.AmaRecVR Serverでアセットを使う場合の注意事項
■サムネイルの作成がエラーになる
サムネイルの作成ができないので エラー用の黒いサムネイルになります。
■ファイルサイズが大きいと数十秒読み込むのに待たされる
10MB程度のアセットファイルを読み込むのに1秒程度、それに加え圧縮されている場合はさらに解凍処理に1秒程度かかります。
100MBを超えると10秒以上待たされます。
読込が終わるまで (ファイル画面を閉じるなど)他の操作をしないでください。
■アマレコVRが管理するファイルIDが作成される
アマレコVRサーバーでは動画ファイルや画像ファイルを特定するために ファイルIDを作成して管理しています。
アセットファイルでもファイルIDが作成されますが、同じファイル名でもファイルサイズが異なると別のファイルとして認識される為、何度もアセットファイルをビルドすると その都度IDとサムネイル画像が作成されてしまいます。
基本的に問題はないですが、明らかに無駄なIDですので、必要に応じてdata\AmaRecVRServer.txtをメモ帳で開いて アセットファイルに関するレコードを削除してください。
アセット機能 その2 基本的なアマレコVR用アセットの作成
Unityのインストールについてはこちらを見てください。
使用するUinityのバージョン 2021.1.1f1
1.新規プロジェクトの作成
Unity Hubの左側で「プロジェクト」を選択して 右上の「新しいプロジェクト」をクリックします。

プロジェクトの作成画面が表示されますので、最初にUnity Editorのバージョンから「2021.1.1f1」を選択します。

左側で「全てのテンプレート」を選択
中央で「3D」を選択
右側のプロジェクト名は任意ですが ここでは「asset_projects」としました
プロジェクトファイルの保存先を設定して「プロジェクトを作成」をクリックしたら完了です。

数分待つと 照明とカメラだけが配置されたUnity Editorが起動します。

2.プロジェクトの設定
ツールバーの「Edit」から「Project Settings」を選択して設定画面を表示します。
設定画面の左側で「Player」を選択し 右側のPlayer設定画面でAndroidのタブを選択します。
※ このタブでWindows等を選択していると いくら設定してもアンドロイドの設定ができていないため うまくいきません。確実にアンドロイドを選択してください。

■設定箇所
(1) Color Space
「Gamma」から「Linear」へ変更します。
Gammaでも使えますが 明るいとか白っぽい(安っぽい)印象になってしまいます。

Color Space以外は初期値でとりあえず機能すると思いますが 一応全体を記載します。また、アマレコVR本体の設定例も記載します。

3.Asset Bundle Browserのインストール
つづいて、アセットファイルを作成するのに必要なAsset Bundle Browserをプロジェクトへインストールします。
Unityのマニュアルに従ってインストールしますが、私のところでは「5.Add (追加) をクリックします」のところで 「https://github.com/Unity-Technologies/AssetBundles-Browser.git」がエラーとなるため 以下のように手動でインストールしました。
(1) ダウンロードサイトへアクセス
Microsoft Edge等でダウンロードサイトを表示します。
(2) ダウンロード
緑の「Code」から「Download.zip」をクリックしてインストールに必要なファイルをダウンロードします。

(3) 解凍
ダウンロードした「AssetBundles-Browser-master.zip」を解凍します。
(4) インストール
Unityのツールバーの「Window」から「Package Manager」を選択し Package Managerの左上にある「+」から「Add package form disk」を選択します。

先ほど解凍したフォルダにある「package.json」を選択します。

以上で Asset Bundle Browserがインストールされ Unityのツールバーの「Window」へ「AssetBundle Browser」が追加されます。
Asset Bundle Browserは新しいプロジェクトを作成する度にインストールする必要がありますので、解凍したファイルは分かりやすい場所に残しておくことをお勧めします。

4.アセットファイルの作成
【アセットファイル作成の手順】
(1) アセット化したいファイルをダウンロード(Unity用のシーン、プレハブ、FBX等の3Dモデルなど)
(2) Assetsフォルダへコピー(圧縮されている場合は 解凍したものをコピー)
(3) Unityで (2)をヒエラルキーへドロップしてゲームオブジェクトにする
(4) ゲームオブジェクトをAssetsフォルダへドロップしてプレハブ化する
(5) プレハブ化したものを Asset Bundle Browserへ登録
(6) アセットファイルを Build
(7) 拡張子「assetbundle」をつけて QuestのDownload¥assetフォルダへ転送
(8) アマレコVRで確認
(1) アセット化したいファイルをダウンロード
アセットファイルにしたい3Dモデルなどをダウンロードします。
ここでは私が公開したasset_sample_cube20230505.zipを例に説明します。
ダウンロードページ
私が公開するもの以外でもUnity用のシーンファイルやプレハブファイル、一般的な3DモデルファイルのFBXなどをアセットファイルにすることができます。
さらにUnityの機能を拡張すれば 様々な形式の3DモデルをUnityへ読み込んで アセット化することができます。
(2) Assetsフォルダへコピー
「asset_sample_cube20230505.zip」を解凍してできるプレハブファイル 「Sample_Cube.prefab」をasset_projects\Assetsフォルダへコピーします。

(3) Unityで ゲームオブジェクトにする
Unityを起動して画面下部にあるAssetsから(2)でコピーした 「Sample_Cube.prefab」を選択して ヒエラルキーへドロップします。
既にUnityが起動していてコピーしたプレハブが表示されない場合は Assetsフォルダを指定し右クリックのメニューから「Refresh」することでコピーしたファイルが現れます。

ヒエラルキーへドロップすると自動的にゲームオブジェクトが作成されます。
ゲームオブジェクトの名前がプレハブと同じままだと わかり難いので「Sample_Cube」から 「Test_Cube」に変更します。

作成されたゲームオブジェクトはシーンビューなどで確認できます。
ここで照明を加えたり、全体の向きを調整したりできます。
なにより今回のようにピンクになっている場合は シェーダーに異常があるので修正すべきですが、今回はこのまま次の手順へ進みます。
※ 修正方法は「アセット機能 その3 ピンクになるモデルの修正作業」を参照してください。
(4) ゲームオブジェクトをAssetsフォルダへドロップしてプレハブ化する
作成したゲームオブジェクトを 画面下部のAssetsフォルダへドロップすると新しいプレハブ「Test_Cube.prefab」が作成されます。

この時 オリジナルのプレハブを作るのか 変更箇所を管理したプレハブを作るか問われます。
今回はオリジナルのプレハブを選択します。

(5) プレハブ化したものを Asset Bundle Browserへ登録
Unityのツールバーの「Window」から「AssetBundle Browser」を表示します。
AssetBundle Browserの「Configure」を選択した状態で Assetsフォルダから「Test_Cube.prefab」をドラッグし AssetBundle Browserのウインドウ上でドロップします。

(6) アセットファイルを Build
AssetBundle Browserの「Build」を選択し、Build Targetを「Android」とします。
最後に下部にあるBuildボタンを押したら アセットファイルが作成されます。

(7) 拡張子「assetbundle」をつけて QuestのDownload¥assetフォルダへ転送
アセットファイルはプロジェクトのasset_projects\AssetBundles\Androidフォルダに作成されます。
プレハブと同じ名前で拡張子の無いファイル「test_cube」がアセットファイルです。

test_cubeへ拡張子をつけて「test_cube.assetbundle」とします。
続いて QuestとPCをUSBケーブルで接続し Quest内のDownloadフォルダへ「asset」フォルダを作成します。

「test_cube.assetbundle」を「asset」フォルダへ転送します。

(8) アマレコVRで確認
QuestでアマレコVRを起動し、アセット画面を表示します。

アセット画面からtest_cubeを選択して ピンクの立方体が表示されれば成功です。
表示される位置がHMDの下方1メートルの辺りなので、下の方を向くか、位置Zを調整して下さい。


【テスト方法】
なんどもアセットの修正、 ビルド、 アマレコVRで確認を繰り返す場合は アマレコVRサーバーからアセットファイルを使う方法 をお勧めします。
5.トラブルシューティング
■「対応していないか 既に読み込んでいる」と表示される
アセットファイルを読み込むとき「対応していないか 既に読み込んでいる」と表示されて読み込めない場合は
アセットファイルを作成しているUnityのバージョンが合っていない可能性が高いです。
2021.1.1f1で作成してください。
また、Android用のアセットでない場合や、同じIDのリソースが既に読み込まれている場合にこのメッセージが表示されます。
■色がおかしい(明るい)
Project Settingsの「Player」のColor Spaceが合っていない。
・「Linear」にする
■照明が反映されない
Project Settingsの「Player」のGraphics APIが合っていない。
・「Auto Graphics API」をOFFにする
・「Graphics APIs」リストを「OpenGLES3」だけにする(Vulkanを削除する)
・「Require ES3.2」をONにする
■normal mapが適用されない(テクスチャの表面がまっ平)
Project Settingsの「Player」のGraphics APIが合っていない。
・「Auto Graphics API」をOFFにする
・「Graphics APIs」リストを「OpenGLES3」だけにする(Vulkanを削除する)
・「Require ES3.2」をONにする
■立体視がおかしい(左右の表示位置がおかしい、片目で見れば正常に見える)
XR Pluginを使う場合は「Stereo Rendering Mode」を「Multi Pass」にしてください。
Oculusの場合を例にすると Project Settingsの「XR Plug-in Management」の「Oculus」にある「Stereo Rendering Mode」が「Multi Pass」になっていないと
アマレコVRのレンダリング位置と アセットのレンダリング位置が合わず 立体視に支障がでます。
■ピンクになる
非対応のシェーダーが使われていると アマレコVR内でピンクになります。
スタンダードシェーダーにすることでとりあえず表示できます。
Sample_Cubeはマテリアルを指定していないためピンクになります。新しいマテリアルを作成しゲームオブジェクトへ割り当てることで改善されます。
■非常に重い(カクカク動く) アマレコVRが落ちる
ポリゴン数が多すぎたり、テクスチャで大量のメモリを消費するとまともに動作しません。
Meta Questはコンピュータ的には非常に低スペックです。
PC向けのアセットをそのままQuestで使おうとするとまともに動かない場合があります。
ポリゴン数を減らしたり テクスチャのサイズを縮小してメモリを節約するなどの調整が必要です。
アセット機能 その1 Unityのセットアップ
第一回はUnityのセットアップを解説します。
【連載予定】
・Unityのセットアップ
・アセットファイルの作り方
・映画館の作り方
・キャラクターとアニメーション (mixamo編)
・ステートマシーン
・物理処理
・他のゲーム用のアセットを移植する
1.はじめに
(1) Unityについて
Unity Technologies が開発したゲームエンジンです。
ここで単にUnityと言ったら Unity Editorと呼ばれる主に2D、3DおよびVRのアプリケーション開発に使われる開発環境を指します。
アマレコVRもUnityで開発されており、アプリケーションだけでなく この連載の中心となるアセットファイルもUnityで作成することができます。
(2) アセットについて
ここでは ゲームなどで使う画像や3Dデータ、キャラクター、音声、およびプログラムなどを まとめたものを指します。
主に、開発用のものと 完成したアプリケーションに後から追加するUnity Asset Bundleの2つがあります。
この連載では後者のUnity Asset Bundleが中心となり、アマレコVRへ利用者自身で用意したアセットを追加することができます。
2.Unity Hubのインストール
Unityには様々なバージョンが存在します。必要に応じて新しいバージョンを使ったり、意図的に古いバージョンを使うこともあります。そこで、複数のUnityのバージョンをインストールし管理するのがUnity Hubとなります。

(1) Unity Hubのダウンロード
Unityのダウンロードページ からWindows用のUnity Hubのインストーラー「UnityHubSetup.exe」をダウンロードしてください。

(2) Unity Hubのインストール
ダウンロードしたUnityHubSetup.exeを実行してUnity Hubをインストールしてください。
【アカウントとライセンス】
インストールの途中でUnityアカウントとライセンスの選択を求められます。
Unityのアカウントを持っていない場合はアカウントを取得してくしてください。
ライセンスの選択では私はパーソナルライセンスを選択しました。内容をよく見て該当するライセンスを選択してください。
インストールが終わり Unity Hubが起動したら歯車のアイコンのpreferencesから日本語にすることができます。


3.Unity Editorのインストール
Unity Hubの準備ができたら 本題のUnity Editorをインストールします。
インストールするバージョンは アマレコVRの制作に使ったのと同じ2021.1.1f1です。
(1) Unity 2021.1.1f1のインストール
Unity Hubの左側から「インストール」を選択、続いて 右上の「エディターをインストール」をクリックするとインストールするUnityのバージョンが表示されます。
しかし 推奨バージョンに「2021.1.1f1」は無いので、「アーカイブ」タグを選択し 「ダウンロード アーカイブ」をクリックします。


(2) ダウンロード アーカイブから Unity 2021.1.1f1 を選択
「ダウンロード アーカイブ」をクリックすると UnityのWebサイトが開くので「Unity 2021.x」タブを選択します。
※ UnityのWebサイトが表示されない場合は https://unity.com/releases/editor/archive へアクセスしてください。

「Unity 2021.x」タブを選択すると 2021年版が大量に表示されますので
Unity 2021.1.1 March 22,2021の項目にある「Unity Hub」をクリックします。
(沢山ありますが 下から2番目です 上から探していくと Ver2021.1.11と間違いやすいです)

「Unity Hub」をクリックすると 確認メッセージが表示されますので「開く」をクリックします。

(3) インストールするモジュール選択
Unity Hubに戻ると Webサイトで選択したバージョンのインストールの準備が始まります。
モジュールを加える画面が表示されますので「Android Build Support」をONにして「次へ」をクリックします。
※ アマレコVRはAndroid用のアプリとして作られていますので アセットファイルもAndroid用にするために このモジュールが必要となります。

(4) インストール開始
Microsoft Visual StudioとAndroidの契約画面が表示されますので内容を確認し同意するとインストールが始まります。
インストールには結構な時間がかかりますので待ちましょう(20分から30分くらい?)。
Unity Editorのインストールは以上となります。
【あとからAndroid Buildモジュールを追加する】
既にインストールされているUnity EditorにAndroid Buildモジュールが含まれていない場合でも Unity Hubを使ってあとから 追加することができます。
Unity Hubの左側の「インストール」を選択すると 既にインストールされているUnity Editorの一覧が表示されますので、目的のバージョンの歯車から「モジュールを加える」を選択します。
モジュールを加える画面が表示されますのでAndroid Build SupportをONにして「次へ」をクリックします。
これで、Android用のアセットやアプリを開発するのに必要なモジュールを追加することができます。