Wikitude SDK Android 8.0.0ドキュメント

3Dモデルのワークフロー

前提条件

Wikitude SDKでは、Wikitude 3Dファイル形式(.wt3)に変換された3Dモデルのみロードできます。これは3Dモデルを拡張するために圧縮されたバイナリ形式であり、デバイスで3Dモデルを高速にロードおよび処理できるように最適化されています。3Dモデルの作成には任意の3Dモデリングツール(AutodeskR MayaRやBlenderなど)を使用できますが、作成したモデルをwt3ファイル形式に変換する必要があります。WikitudeにはWikitude 3D Encoderというデスクトップアプリケーションが付属しており、3Dモデルの変換にはこのアプリケーションを使用します。Wikitude 3D Encoderでは、AutodeskR FBXRファイル(.fbx)をロードして.wt3に変換できます。

このセクションでは、Wikitude SDKを使用して3Dモデルを拡張するのに適切な3Dモデルとは何かについて説明します。Wikitude SDKは変換されたファイル形式(.wt3)に基づいて3Dをサポートするので、以下の内容に従うのが得策です。

入力形式

wt3ファイルにエンコード可能な3Dモデルファイルは以下のとおりです。

3Dモデルのソースファイルでは以下の機能を使用できます。

現時点でサポートされていない機能

3Dモデル動作時のグッドプラクティス

PNGテクスチャの使用

テクスチャはwt3ファイル内にPNG形式で保存されます。テクスチャはWikitude 3D Encoderによって自動的にPNGに変換されますが、変換元の3DモデルでPNGテクスチャを使用することはグッドプラクティスです。

2の累乗テクスチャ

モバイルデバイスに搭載されている現在のレンダリングハードウェアは、多くの場合、テクスチャのサイズが2の累乗(64x64、128x128など)であることを期待します。テクスチャのサイズが2の累乗テクスチャでない場合、ある特定のテクスチャ属性を必要とし、予期しないテクスチャのモデルになる場合があります。また、2の累乗テクスチャを使用すると、デバイスで実行するときのパフォーマンスが向上します。2の累乗テクスチャとは幅と高さが2x(64x64、128x128など)であるテクスチャのことです。

テクスチャパスの確認

テクスチャはFBXファイル内に保存するか、ファイルパスによって参照できます。後者の場合は、絶対パスではなく相対パスを使用してください。絶対パスは多くの場合、端末が異なると無効になります。テクスチャファイルはFBXファイルを含むディレクトリ内で検索もされます。したがって、外部テクスチャファイルはFBXファイル形式の3Dモデル自体と同じディレクトリに置くことを推奨します。

テクスチャサイズを可能なかぎり小さく抑える

テクスチャサイズを必要な細部が維持される範囲で可能なかぎり小さく抑えることにはいくつかの利点があります。エクスポートされた.wt3ファイルが小さくなり、その結果ネットワーク経由でのロードまたはローカルリソースからのロードが高速になります。さらに、アプリケーションに必要なメモリ量も少なくなります。

光源は1つだけにする

良好なレンダリング性能を維持するには、モデルの各パーツ(ノード)に対する光源を1つだけにします。変換元の3Dモデルで複数の光源を使用することもできますが、レンダリング時にはメッシュパーツをライティングするために単一のノードのみが選択されます。Wikitude 3D Encoderは最良の推測を行うため、シーングラフを利用して光源をノードに割り当てます。ライティングが不要な場合は、単に3Dモデルから光源を除去するか、対応する材質プロパティを設定します。これによりレンダリング速度が向上します。

よくある問題とトラブルシューティング

3Dモデリングツールが異なると、FBXにエクスポートするときの3Dモデルのエンコード方法も異なり、その結果3Dモデルを他のアプリケーションで表示したときに異なるレンダリング結果になる可能性があります。したがって、無償のAutodesk "FBX Reviewer"を使用して3Dモデルを検証することを推奨します。

ジョイント(ボーン)を使用している3Dモデルが歪む

ルートジョイントノードを作成し、他のすべてのジョイントノードが同じルートノードを共有するようにします。

3DモデルがWikitude 3D Encoderでは正しく表示されるが、デバイスでは表示されない

wt3ファイルのファイルサイズをチェックします。テクスチャサイズは必要な細部が維持される範囲で可能なかぎり小さく抑えます。メッシュ頂点の数は、ターゲットのモバイルデバイスが処理できる妥当な数にしてください。

テクスチャがない

モデルのインポート処理中に表示されたエラー/警告ダイアログで、テクスチャの問題に関する詳しい情報を確認します。テクスチャパスが有効でアクセス可能であることを確認します。

3Dアニメーションの操作

クイックスタート

1つ以上のアニメーションを含むモデルをFBXファイルにエクスポートします。その3DモデルをWikitude 3D Encoderにロードすると、アプリケーションウィンドウの右側にあるリストにアニメーションが表示されます。

Wikitude 3D Encoderのアニメーションリスト

リストの各行には、アニメーションのID、コントロールボタン、およびアニメーションを開始した後の経過時間が示されます。再生ボタンをクリックすると、アプリケーションの3Dビューでアニメーションが最初から再生されます。停止ボタンをクリックするとアニメーションが停止し、最後に描画されたフレームが表示されます。

モデルの見た目とアニメーションが期待どおりか確認し、wt3ファイルにエクスポートします。アプリケーションで使用するときはアニメーションのIDが必要です。このIDは、コントロールボタンの横に表示されています(上記のスクリーンショットではbutterfly_animation)。コードでアニメーションを開始するには、以下のように記述します。

// instantiate the model object
var model = new AR.Model("butterfly.wt3");
// instantiate the model animation with the animation id
var animation = new AR.ModelAnimation(model, "butterfly_animation");
// start the animation
animation.start();

アニメーションのエクスポート

Wikitude 3D Encoderは3Dモデルの異なるアニメーションをサポートします。これにはシーン内のパーツ(モーションパスを含む)に沿ったトランスフォームアニメーションやメッシュスキンに適用されたメッシュデフォーマアニメーションが含まれます。

3Dモデリングツールからモデルをエクスポートするときにアニメーションを焼き付ける必要があります。たとえば、Mayaはサポートされていないすべての制約(Mayaでサポートされている制約やFBX制約を含む)をアニメーションカーブに焼き付けます。

アニメーションのグループ化

アニメーションはさまざまな方法でグループ化できます。これは、「Model」の「Animation Grouping」から選択できます。グループ化する方法は、アニメーションのリストや、Wikitude SDKにアニメーションをトリガーする用のIDにも影響を与えます。グループ化する方法は以下のとおりです。

テイクにグループ化されたアニメーション

アニメーションを単一のテイクにグループ化すると、すべてのグループ化されたアニメーションが一度にトリガーされます。

テイクにグループ化されたアニメーション

メモ:グループモードの変更は、変更後にインポートまたは開かれた3Dモデルのみに反映されます。

アニメーショングループの作成

次のサンプルでは、6つのシーンノード上の6つのさまざまなアニメーションをジオメトリごとに2つのグループアニメーションにグループ化する例を示します。この場合、シーングラフは以下のようになります。:

• sphere1
• sphere2
• sphere3
• cylinder1
• cylinder2
• cylinder3

次に、すべての球を1つのアニメーションにグループ化し、すべての円筒を別のアニメーションにグループ化するには、2つの新しいシーンノードを作成します。それぞれのシーンノードは、3つの子ノードで構成されます。この場合のシーングラフは以下のとおりです。

• spheres
  • sphere1
  • sphere2
  • sphere3
• cylinders
  • cylinder1
  • cylinder2
  • cylinder3

「Group on root nodes」モードを選択する場合は、以下のような2つのアニメーションが表示されます。

• spheres_animation
• cylinder_animation

メモ:シーンノードをグループ化するには、任意の3Dモデリングツール(Maya、3ds Max、Blenderなど)を使用できます。3DモデルはFBXファイルにエクスポートしてからWikitude 3D Encoderにインポートします。

既知の問題

ライティング

Ambient Light(BLENDERのみ)

シーンのAmbient Light(周辺光)は、BlenderのプロパティビューのWorldタブで変更することができます。ただし、この値はFBXに適切にエクスポートされないので、以下のようにPoint(ポイント)ランプによりAmbient Lightをセットします。

  1. シーンにポイントランプを追加します。
  2. ViewでEyeアイコンを切り替えてAmbient Lightを非表示にします。
  3. ポイントランプの色をお好みの周辺光に応じて設定します。
  4. Falloff(減衰)をconstantに設定します。

必要に応じて、ノード名を「Ambient」として設定できます。

周辺光を照射するためにBlenderでPointランプの設定

Directional light(BLENDERのみ)

Blenderでは、Directional Light(指向性のライト)がSunランプによって配置されます。光源の位置は照明に影響を与えませんが、光の方向によってシーンの外観が変更されます。Sunランプの光源の方向を変更するには、プロパティビューの「オブジェクト」タブで回転の値を指定します。