MRが楽しい

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

3Dランチャのモデル作成ガイダンスを翻訳する

本日は Windows Mixed Reality の調査枠です。
前回、HoloLens RS4 Preview で3Dランチャが利用可能な事が分かりました。
bluebirdofoz.hatenablog.com

改めてランチャ用の3Dモデル作成の理解を深めるため、以下ページを翻訳しながら読み返しました。
docs.microsoft.com

Windows Mixed Reality Homeで使用するための3Dモデルの作成

Windows Mixed Reality Home は、ユーザーがアプリケーションを起動する前の出発点です。
ヘッドセット用のアプリケーションを設計して、3Dモデルをアプリランチャーとして活用し、Windows Mixed Reality Home に配置することができます。
この記事では、Windows Mixed Reality Home と互換性のある3Dモデルを作成するためのガイドラインについて説明します。

要件の概要

Windows Mixed Reality用の3Dモデルを作成する場合、アセットが満たさなければならない要件がいくつかあります。

1.出力形式 - アセットは.glbファイル形式(バイナリglTF)である必要があります。
2.モデリング - アセットは10,000未満の三角ポリゴンでなければなりません。
3.マテリアル - テクスチャの解像度は 4096 x 4096 を超えることはできません。
4.最適化 - コンテンツは WindowsMRAssetConverter を使用して最適化する必要があります。
これは、Windows OSバージョンが1709未満では必須であり、1803以上では推奨されています

以降の記事はこれらの要件の詳細な内容と、3Dモデルが Windows Mixed Reality Home でうまく機能させるための追加のガイドラインです。

詳細なガイダンス

モデルのエクスポート

Windows Mixed Reality Home の3Dアセットは、画像とバイナリデータが埋め込まれた.glbファイル形式を使用します。
Glb は、Khronos グループによって維持される3Dアセット展開のロイヤリティフリーなオープン規格であり、glTFフォーマットのバイナリバージョンです。
glTF は相互運用可能な3Dコンテンツの業界標準として進化しているので、MicrosoftWindows のアプリケーションのフォーマットとしてサポートします。
glTF アセットを作成していない場合は、サポートされているエクスポータとコンバーターのリストを glTF ワーキンググループの github ページで見つけることができます。
github.com

モデリングガイドライン

Windows では、Windows Mixed Reality Home との互換性を確保するために、以下のガイドラインに沿ってアセットを生成することが期待されます。
プログラムでモデリングを行う際には、以下の推奨事項と制限事項に留意してください。

1. 上下軸は Y軸 であること。
2. Z軸の正方向が物体の前方であること。
3. 原点(0,0,0)のグラウンド上にモデルが構築されていること。
4. 軸単位はメートル単位を前提とすること。
5. 全てのメッシュを結合する必要はない。
  ただしリソースが制約されたデバイスをターゲットとする場合は結合した方が良い。
6. 全てのメッシュは1つのマテリアルを共有し、1つのテクスチャを利用する事。
7. UVは 0~1 の四角の範囲で配置する事。
8. マルチUVはサポートされていない。
9. 両面マテリアルはサポートされていない。

三角ポリゴン数と詳細度(LOD)

Windows Mixed Reality Home は、10,000以上の三角ポリゴンを持つモデルをサポートしていません。
この数を超えないように、メッシュを三角ポリゴンに分割することをお勧めします。
また、Windows Mixed Reality は、パフォーマンスと高品質の経験を保証するために、オプションの Geometry LOD(Level of Detail)をサポートしています。
WindowsMRAssetConverter は、3つのバージョンのモデルを1つの.glbモデルに結合するのに役立ちます。
Windowsは、モデルが占有している画面の領域に基づいて、表示する LOD を決定します。
3つの LOD レベルが、次の推奨される三角ポリゴン数でサポートされています。

LODレベル 推奨三角ポリゴン数 最大三角ポリゴン数
LOD 0     10,000             10,000
LOD 1     5,000              10,000
LOD 2     2,500              10,000

マテリアルガイドライン

テクスチャは、PBR metal-roughness workflow を使用して準備する必要があります。
Albedo, Normal, Occlusion, Metallic, and Roughness などの一連のテクスチャを作成します。
Windows Mixed Reality は最大 4096x4096 の解像度でテクスチャをサポートしますが、512x512 で作成することをお勧めします。
更に、テクスチャは4の倍数の解像度で作成する必要があります。
これは後述するエクスポート手順でテクスチャに適用される圧縮フォーマットの要件です。

推奨テクスチャサイズ 最大テクスチャサイズ
512x512              4096x4096
アルベド(ベースカラー)マップ

照明情報のない基本の色です。
このマップにはメタル(金属マップの白)とインシュレータ(金属マップの黒)サーフェスの反射率と拡散情報も含まれています

法線

接空間の法線です。

ラフネス(粗さ)マップ

オブジェクトのミクロサーフェスについて描画します。
白(1.0)は荒く、黒(0.0)は滑らかです。このマップは汚れなどの表面を表現し、アセットに大きな特徴を与えます。

アンビエントオクルージョンマップ

遮光された光の領域を示すマップです。

メタリックマップ

金属であるかどうかをシェーダに設定します。
白色(1.0)は金属で、黒色(0.0)は非金属です。
泥などの金属を覆うものを示すグレー値が存在する可能性がありますが、一般的にこのマップは白黒のみです。

最適化

Windows Mixed Reality Home は、カスタム拡張を使用して定義されたコアglTF仕様の上に一連の最適化を提供します。
この最適化は Windows OS バージョンが1709未満では必須であり、新しいバージョンのWindowsでは推奨されます。
GitHubで利用可能な WindowsMRAssetConverter を使用して、glTF 2.0モデルを簡単に最適化することができます。
github.com

このツールは後述で指定されているように、正しいテクスチャパッキングと最適化を実行します。
最適化には、WindowsMRAssetConverter の使用をお勧めします。
しかし、より詳細に管理したい場合、独自の optmization パイプラインを構築したい場合は以下の詳細仕様を参照してください。

マテリアル

Windows Mixed Reality はこのセクションで定義されているテクスチャパッキングスキームに従った圧縮DDSテクスチャのレンダリングをサポートしています。
これは Mixed Reality 環境でのアセットのローディング時間を改善するためです。
DDSテクスチャは、MSFT_texture_dds 拡張を使用して参照されます。テクスチャを圧縮することを強くお勧めします。
github.com

HoloLens

HoloLens ベースの Mixed Reality は、次のパッキング仕様を使用した2テクスチャをパックすることを期待しています。

glTFプロパティ                       テクスチャ                     パッキングスキーム
pbrMetallicRoughness                 baseColorTexture               赤(R)、緑(G)、青(B)
MSFT_packing_normalRoughnessMetallic normalRoughnessMetallicTexture ノーマル(RG)、粗さ(B)、メタリック(A)

DDSテクスチャを圧縮するときは、各マップで次の圧縮が必要です。

テクスチャ                                       期待される圧縮
baseColorTexture、normalRoughnessMetallicTexture BC7
PC

PC ベースの Mixed Reality は、次のパッキング仕様を使用した3テクスチャをパックすることを期待しています。

Windows OS バージョン 1803以上

glTFプロパティ                          テクスチャ                        パッキングスキーム
pbrMetallicRoughness                    baseColorTextur                   赤(R)、緑(G)、青(B)
MSFT_packing_occlusionRoughnessMetallic occlusionRoughnessMetallicTexture オクルージョン(R)、粗さ(G)、メタリック(B)
MSFT_packing_occlusionRoughnessMetallic normalTexture                     ノーマル(RG)

DDSテクスチャを圧縮するときは、各マップで次の圧縮が必要です。

テクスチャ                                          期待される圧縮
normalTexture                                       BC5
baseColorTexture、occlusionRoughnessMetallicTexture BC7

Windows OS バージョン 1709未満

glTFプロパティ                          テクスチャ                        パッキングスキーム
pbrMetallicRoughness                    baseColorTextur                   赤(R)、緑(G)、青(B)
MSFT_packing_occlusionRoughnessMetallic roughnessMetallicOcclusionTexture 粗さ(R)、メタリック(G)、オクルージョン(B)
MSFT_packing_occlusionRoughnessMetallic normalTexture                     ノーマル(RG)

DDSテクスチャを圧縮するときは、各マップで次の圧縮が必要です。

テクスチャ                                          期待される圧縮
normalTexture                                       BC5
baseColorTexture、roughnessMetallicOcclusionTexture BC7
メッシュLODの追加

Windows Mixed Reality は、ジオメトリノードLODを使用して、画面のカバレッジに応じて異なる詳細レベルで3Dモデルをレンダリングします。
この機能は技術的に必須ではありませんが、全てのアセットにお勧めします。
現在、Windowsは3段階の詳細レベルをサポートしています。デフォルトのLODは0です。これは最高の品質を表します。
他のLODには、1,2などの順に番号が付けられ、品質が次第に低くなります。
WindowsMRAssetConverter は、複数のglTFモデルを受け取り、有効なLODレベルを持つ単一コンテンツにそれらをマージすることにより、このLOD仕様を満たすアセット作成をサポートしています。
次の表は、期待されるLODレベルと三角ポリゴン数を示しています。

LODレベル 推奨三角ポリゴン数 最大三角ポリゴン数
LOD 0     10,000             10,000
LOD 1     5,000              10,000
LOD 2     2,500              10,000

LODを使用する場合は、3段階のLODレベルを指定します。
不足しているLODレベルに切り替わると、モデルが予期せずレンダリングされなくなります。
glTF 2.0 は現在、コア仕様としてLODをサポートしていません。従って、LODは MSFT_LOD 拡張を使用して定義する必要があります。
github.com

スクリーンカバレッジ

LODは、各LODに設定されたスクリーンカバレッジ値に基づいて、Windows Mixed Reality に表示されます。
画面スペースの大部分を消費しているオブジェクトは、より高いLODレベルで表示されます。
画面のカバレッジは、glTF 2.0 のコア仕様ではなく、MSFT_lod 拡張の「extras」セクションで MSFT_ScreenCoverage を使用して指定する必要があります。

LODレベル 推奨範囲         デフォルト範囲
LOD 0     100%    ~ 50% .5
LOD 1     50%     ~ 20% .2
LOD 2     20%未満 ~ 1%  .01
LOD 4     1%未満

glTF実装メモ

glTFアセットは、Windows Mixed Reality によってレンダリングされるシーン属性を使用して、デフォルトのシーンを指し示さなければなりません。
さらに、Windows Mixed Reality のglTFローダーにはアクセサが必要です。

・最小値と最大値が必要です。
・SCALAR型は、componentType UNSIGNED_SHORT(5123)またはUNSIGNED_INT(5125)でなければなりません。
・VEC2型、及び、VEC3型は componentType FLOAT(5126)でなければなりません。

以下のマテリアルプロパティは、コアのglTF 2.0仕様から使用されますが、必須ではありません。

・baseColorFactor, metallicFactor, roughnessFactor
・baseColorTexture: ddsに格納されているテクスチャを指している必要があります。
・emissiveTexture: ddsに格納されているテクスチャを指している必要があります。
・emissiveFactor
・alphaMode

コア仕様では、次のマテリアル特性は無視されます。

・全てのマルチUV
・metalRoughnessTexture:上記で定義されたMicrosoft最適化テクスチャパッキングを使用する必要があります
・normalTexture:上記で定義されているMicrosoft最適化テクスチャパッキングを使用する必要があります
・normalScale
・occlusionTexture:上記で定義されたMicrosoft最適化テクスチャパッキングを代わりに使用する必要があります
・occlusionStrength