見出し画像

BlenderからのiPhone向けAR作り(USDZ)

2023年4月追記

 これは古い記事です。2023年にリリースされたBlender3.5から直接USDZファイルに書き出す機能が追加されました。USD書き出しを選択し、拡張子を".usdz"にするだけ完結します。
 この記事が書かれた背景にはBlenderのUSDファイルへの公式非対応と、その他の手段でUSDZに変換するにはApple PCのアカウント(事実上有料)が必要という事実がありました。それらの状況の抜け道として、Apple PCアカウントを持っていないWindowsユーザー向けに以下の記事を書きましたが、既に述べた通りBlender3.5を用いれば完全に不要な手順となります。

・はじめに

 iPhoneやiPadのSafariで非常に容易にAR閲覧できる3Dモデル形式USDZの作り方の入り口を解説します.ウェブ上の既出情報を集めればわかる範囲の記事ですが,Unityを使った方法は日本語のテキストが僅少であったため執筆しました.
 操作自体は小一時間もあれば習得できる内容かと思います.

次のような方向けの記事です
- Blender及びその他DCCツールの基本的な使い方を理解している
- Xcode 10コンソール以外の方法を探している(WindowsでUSDZファイルを作りたい方も)
- webサービスVIEWARやVectary以外の方法を探している
- Unityの経験不問
- iPhoneやiPadを所持している(AR動作確認用)
- ウェブページ作りの基本操作を理解している(公開用)

 前半はUnityのインストールとUnity USDの設定、後半はUnity上での操作説明となっています. Unityを全く使った事が無い方向けの説明になります.経験者の方は末尾の「・慣れている方向けの説明」で十分かと思います.

画像18


・Unityをインストールする

 以下ページからUnityHubSetup.exeをダウンロードし実行し、インストールします.
https://store.unity.com/ja#plans-individual
 Unity Hubを起動します。Unityではなく,必ずUnity Hubから起動します.
 左メニュー「インストール」からバージョン2019.2.11f1のUnityをインストールします.

画像1
画像2

 後述のUSDアセットは動作バージョンが定められています.現状は2019.1.0b2以降対応とアナウンスされていますが,バージョンが離れると動作しない場合があります.
 USDZエクスポートに限った用途ではBuild Supportは不要ですのでチェックを外しておきます(有効にしても問題はありません).

画像3

 実行ボタンを押すとUnityのインストールが始まります(時間がかかります).

・Unityプロジェクトの作成

 バージョン2019.2.11f1のインストールが終わったら再度Unity Hubを起動、プロジェクト画面右上「新規作成」ボタンを押します.

画像4

 現れたウィンドウ名のバージョンが2019.2.11f1となっている事を確認します(異なるバージョンの場合には新規作成ボタンのプルダウンからバージョンを切り替えます).
 右の新規作成から3D(デフォルト)を選択,任意のプロジェクト名を付けます(ここではUSDZ EXPORTERとします). そして作成をボタンを押すとUnityの立ち上げ処理が始まります.

画像5

 しばらくするとUnityが立ち上がります.

画像6

・Unity USDの初期設定

 上のWindow-PachageManagerをクリックします.
 現れたPackagesビュー上部の検索窓にusdと入力,AdvancedプルダウンをクリックしShow preview packagesを選択します. するとUSD preview.1 – 1.0.1が現れるのでInstallボタンを押します. インストールが終わるとSpamplesをImport出来るようになりますが,ここでは使用しません.

画像7

 次にUnity USDの公式サイトでガイドされている初期設定を行います.
https://github.com/Unity-Technologies/usd-unity-sdk
 Edit-Project Settings-Player-Other Settings-Color Space*はデフォルトでGammaになっているのでLinearへ変更します. Configuration-Api Compatibility Level*の.NET Standard 2.0値を.NET 4.xへ変更します.
 同Project Setting-Quality-Other-Skin Weithtsのデフォルト値4 BonesをUnlimitedへ変更します.
 以上3つの操作が終わったらProject Settingウィンドウを閉じます.

・DCCツールで.fbxファイルを書き出す

 AR表示したい3Dモデルを用意します.
 ここでは下図のような2つのメッシュオブジェクトからなるモデルを作り,片方のマテリアルには1枚のテクスチャを割り当てました.

画像8

 
 AR表示させたいメッシュオブジェクトを選択した状態でFile-Export-FBX(.fbx)を選びます.

画像9

 エクスポートメニューはSelected Objectsにチェック,Meshのみを選択,ファイル名を指定してExportFBXボタンを押します.ここではusdz-cube.fbxとしました.

画像10

//
複数のマテリアルで構成する場合にはマテリアルごとにメッシュを分割のうえマージしておくとUnity上での作業がスムーズです.マテリアルの詳細設定はUnity側で行います.AR状態では環境によって色味が調整されてしまうので,ARで現物を見てから調整する順とした方が良いでしょう.
//

・Unityへモデルデータとテクスチャを取り込む

 Unityへ戻り,中央上のSceneビューをクリックします.
 3Fモデルの.fbxファイルとマテリアルで使用するテクスチャを、Unity下部のProjectビュー内AssetsへDnDします。

画像11

//
プロジェクト管理的にはお行儀のよいやり方ではありませが,ファイル形式をコンバートするだけのプロジェクトですので問題は起きにくいでしょう.
//

 取り込んだファイルは読み書きできない属性になっており,そのままではUnity USDが処理してくれません.  画面右Inspectorビュー-Meshes-Read/Write Enabledにチェックを入れ,右下Applyを押します.

画像12

 エクスポートモデルの原点を作ります.上部メニューGameObject-Create Emptyをクリックします.すると左HierarchyビューにGameObjectというオブジェクトが追加されます.分かりやすいようUSDZzeroへ名前を変えておきます.

画像13

 下ProjectビューAssetsからusdz-cubeをUSDZzeroへDnDします.するとScneneビューにモデルが表示されます.

画像14

 usdz-cubeの左の矢印をクリックして下層を表示し,画面下Assetsからテクスチャを片方のメッシュオブジェクトへDnDします.すると自動的にAssets内にMaterialsフォルダが生成されます.

画像15

 テクスチャを貼り付けないメッシュオブジェクト用のマテリアルも作成します.Assets-Materialsフォルダへ移動,右クリック-Create-Materialをクリック.名前はBlueMatへ変更しておきます.
 BlueMatを選択した状態で画面右Inspectorビュー内でシェーダーの選択,設定変更が出来ます.Main Maps-Albedoのカラーピッカーで青色へ変更します.
(ついでに別のテクスチャをAssetsへインポートし,Normal MapへDnDしました.)

画像16

 このままでも良いのですが,特に設定を行わないとオブジェクトが大き過ぎて閲覧し難いのでリサイズを行います.Hierarchyのusdz-cubeを選択した状態でInspectorのScale値を3軸とも0.05とします.

画像17

・.usdzファイルのエクスポート

 以上で簡易ながらシェーダーとマテリアルの設定が終わったのでエクスポートを行います.
 HierarchyのUSDZzeroを選択した状態で上メニューUSD-Export Selected as USDZを選択します.通常の保存ウィンドウが出ますので任意のフォルダへ出力したら完了です.

画像19

 このファイルをウェブサーバーへアップロードし,iPhoneやiPadのSafariで参照すると専用ビュワーが立ち上がり,ARまたはモデルビューで閲覧できます.サムネイルを設定する方法は別途検索してください.
 macOS Mojave以降であれば.usdzファイルを直接閲覧することもできます.

・トラブルシューティング

 モデルが表示されない場合は以下を再確認してください.
・Unity本体のバージョンは適切か.
・fbxファイルのInspectorでRead/Write Enabledにチェックが入っているか.
・Unity USDがサポートしていないシェーダー設定になっていないか(まずは最小限の設定で行いましょう).

//
 簡易的な確認方法を紹介します.エクスポートしたいオブジェクトをメニューUSD-Export Selected with Childrenでusd出力し,そのusdファイルをUSD-Import as GameObjectsで読み込んだ際にメッシュオブジェクトが表示されない場合,設定上何らかの問題があると考えられます.
//

・慣れている方向けの説明

・Unity USDとUnityのバージョンに注意.
・Unity USDはfbxでもobjでもusdz変換してくれるが,メッシュオブジェクトをRead/Write Enabledにしないと正常に処理してくれない.
・ShaderはUSD/StandardVertexColorだけでなくStandardでもよい.寧ろStandardの方が高機能.だが一部の機能のみ有効. AlbedoやNormal Mapは機能するがTillingは機能しないなど.

・さいごに

 以上Windows PCからUSDZファイルを出力する事を念頭にUnity USDのファーストステップを解説しました.とりあえず3DモデルをiPhoneでAR表示したいというニーズであればこれで十分かと思います.
 MacOS環境でもUnity経由であればシーンの編集もグラフィカルで容易ですのでDCC-Xcode 10で作業するよりも手軽と言えるでしょう. ただし細かい設定を行いたい場合は最終的にXcode 10に頼った方が良いかもしれません.
Viva Blender! Viva Unity! そしてARの未来に幸あれ.

・参照ページ

https://unity.com/
https://github.com/Unity-Technologies/usd-unity-sdk
https://alaki.co.jp/blog/?p=2967

この記事が気に入ったらサポートをしてみませんか?