3D モデルの準備と最適化
この記事では、EasyAR の要件を満たす 3D モデルを準備する方法について、形式仕様、推奨ツール、一般的なトラブルシューティングを含めて詳しく説明し、開発者が tracking の成功率を根本から高められるようにします。
モデル形式と仕様
EasyAR 3D object tracking は Wavefront OBJ 形式のみをサポートします。使用時は次の要件と仕様に従ってください。
モデルファイル構造
完全な 3D モデルには、次のファイルが必ず含まれている必要があります。
- .obj ファイル: 頂点、面、UV 座標などを含むジオメトリモデルデータ。
- .mtl ファイル: 色や texture map パスを含むマテリアル定義。
- Texture maps: 少なくとも 1 枚の JPEG または PNG 形式の画像。解像度は 512×512 から 2048×2048 を推奨します。
ファイル要件
- すべてのファイルは同じフォルダーに置き、
texture.jpgのような相対パスで参照する必要があります。C:\Models\texture.jpgのような絶対パスは禁止です。 - ファイル名およびファイル内部のパスにはスペースを含めないでください。英字または数字の使用を推奨します。
- ファイルエンコーディングは UTF-8 である必要があります。文字化けによるロード失敗を避けるためです。
OBJ (.obj) ファイルの最小要件
vertexを含む必要があります
ジオメトリ頂点は \((x, y, z [, w])\) 座標で表されます。\(w\) は任意で、デフォルトは 1.0 です。頂点の色パラメーターは必須ではなく、指定されていてもシステムはロードしません。texture coordinatesを含む必要があります
テクスチャ座標は \((u, v [,w])\) 座標で表されます。\(w\) は任意で、デフォルトは 0 です。通常、\(u\) と \(v\) の値は 0 から 1 の間であるべきです。0 未満または 1 より大きい値については、システムはデフォルトでREPEATモードで処理します。つまり座標の整数部分を無視し、OpenGLのGL_REPEAT処理と同じように無限に繰り返すパターンを構築します。faceを含む必要があります
face 要素には、少なくとも頂点インデックスとテクスチャ座標インデックスが含まれている必要があります。四角形など、3 個を超える頂点を持つポリゴン face 構造もサポートされます。mtllibを含む必要があります
マテリアルファイルへの参照です。少なくとも 1 つの外部 MTL マテリアルファイルを指定する必要があり、ファイルパスは絶対パスではなく相対パスでなければなりません。usemtlを含む必要があります
モデル要素が参照するマテリアルにはマテリアル名を指定する必要があり、このマテリアル名は外部 MTL マテリアルファイルで定義されたマテリアル名と一致している必要があります。
MTL (.mtl) ファイルの最小要件
- 1 つの MTL ファイルには少なくとも 1 つのマテリアルを定義する必要があります。
- Texture map は必須です。
通常は、環境光または拡散反射の texture map (map_Ka,map_Kd) を指定するだけで十分です。
texture map のパスは絶対パスではなく相対パスでなければなりません。 - texture map のその他の任意パラメーターは必須ではなく、指定されていてもシステムは使用しません。
モデルの準備
仕様を満たす OBJ 形式のモデルファイルは、さまざまな方法で準備できます。
既存モデルからエクスポート
Autodesk Maya / 3ds Max などの専門ツールを使用して、既存の FBX またはその他形式のモデルをインポートし、エクスポート時に “OBJ Export” を選択し、“Materials” と “UVs” オプションが有効であることを確認します。新しいモデルを作成
Autodesk Maya / 3ds Max などのモデリングツールを使用して 3D モデルを作成または描画し、OBJ 形式で出力します。実物をスキャンして 3D 再構築を行う
Autodesk ReCap、Bentley ContextCapture などの 3D スキャンモデリングソフトウェア、またはレーザースキャナーを使用して実物の 3D 再構築を行い、その結果を OBJ 形式でエクスポートします。
重要
モデルのテクスチャは実物の視覚的特徴を正確に再現する必要があります。そうでない場合、recognition と tracking は正常に動作しません。
モデルのベストプラクティス
以下に、モデル準備時によく発生する問題と例を示します。すばやい参照と確認に利用してください。
豊富なテクスチャ詳細を確保する
モデルの texture には豊富なテクスチャ詳細が必要です。
参考画像左: EasyAR で検出および追跡できます。参考画像右: テクスチャが少なすぎるため、検出および追跡できません。
モデルの形状
モデルはさまざまな形状をサポートしますが、主体構造は convex である必要があります。
これら 2 つの物体はいずれも EasyAR で検出および追跡できます。
ファイル内の参照 path を確認する
モデルファイル内で参照される path は relative paths でなければならず、absolute paths は使用できません。
右側のモデルは、EasyAR が absolute path を使用したファイルを見つけられないため、読み込めません。
モデルファイル内で参照される path にスペースや特殊文字を含めることはできません。
右側のモデルは、参照 path にスペースが含まれているため読み込めません。
ファイルのエンコード形式を確認する
モデルファイルは UTF-8 エンコード形式を使用する必要があります。
右側のモデルは、ファイルエンコードの問題により読み取り時に decoding error が発生するため、ロードできません。
モデル法線を確認する
モデル面の normal vector の正方向は right-hand rule に従う必要があります。
2 番目の立方体の影付き面の normal vectors は負方向を向いています。このような面は EasyAR では invisible faces として扱われます。モデル内部から外を見ると、3 番目の立方体のように表示されます。
モデルでは、normal が負方向を向いたすべての面を避ける必要があります。モデル面数
モデル面の数は、オブジェクトの幾何形状を保つ前提でできるだけ少なくする必要があり、通常は 100,000 個の triangle faces を超えるべきではありません。面数が多すぎると、次の問題が発生します。- モデルのロード時間が長くなりすぎ、アプリケーション起動時の user experience に影響します
- face texture projection の計算量が増加し、tracking 時のアプリケーションの frame rate に影響します
3D モデルの品質は tracking の成功率を直接決定します。開発者は形式仕様を厳格に守り、テクスチャの細部最適化に重点を置き、ファイル形式に誤りがないことを確認する必要があります。