Pivot Painter Tool の最新バージョンは 2.0 です。Pivot Painter のバージョン 2.0 では、インタラクティブなフォリッジを作成するための簡素化されたパイプラインがあります。
Pivot Painter Tool は、モデルの頂点データの中にモデルの回転軸 (ピボット) と回転の情報を格納する MAXScript です。この情報は、アンリアルのシェーダー システム内で参照可能になり、インタラクティブなエフェクトを作成できます。
上記のサンプル動画の動きはすべて、頂点シェーダーを使用してリアルタイムで生成されます。葉一枚ずつが根元から曲がります。木の枝と葉は、親のモーションを継承しつつ、階層を形成し個々の回転軸でアニメートします。サブオブジェクトの回転も格納され、風の力に対してリアルに動的な反応ができるようになります。
Pivot Painter のマテリアル関数が追加されてから、これらのシェーダーの作成は非常に簡単になりました。上記で説明した、アニメーションの生成方法を実際に見ることができるサンプル コンテンツも役立ちます。現在、サブオブジェクトの回転軸を取り出すには、Pivot Painter スクリプトを使用して 3ds max でメッシュを処理し、そのファイルをインポートし、Pivot Painter 関数を使用してマテリアルを作成します。マテリアル関数には、2 レベル階層と単一レベル階層の両方への回転軸の出力があります。
このように動きを作成するとメリットがあります。この技術を使用して処理されたモデルは、メモリに関して標準のスタティックメッシュに比べて 18 % 大きくなるだけです。アニメーションは、即座に計算され、保存する必要がないため、スケルタル アニメーションよりもはるかに負荷が低くなっています。頂点シェーダーの命令数は、一般的にピクセルの命令数よりもパフォーマンス上問題になりません。モデル上の頂点数とスクリーン上のピクセル数の比較になるからです。
下記のリンクのサンプルのシェーダーは、できることのほんの一部にすぎません。利用可能な情報を使って試してみると、他の用途も試してみたくなるかもしれません。プレイヤーのインタラクションやおもしろい風力源、フォーリッジ (葉) 関連ではないモーション、その他エフェクトが、サブオブジェクト レベルの情報を利用することで可能となります。
インストール
Pivot Painter スクリプトは以下に置かれています。
[UERootDirectory]/Engine/Extras/3dsMaxScripts/PivotPainter.ms
次の動画では、スクリプトのインストール方法、および、Pivot Painter ツールを開くためのメニューとキーボード ショートカットの作成方法について解説しています。
Prep Tools
次の動画では、スクリプトの Prep Tools (準備ツール) のセクションと、ワークフローのヒントと全体的プロセスに関する情報について解説しています。Prep Tools には、モデルの要素を、別個のオブジェクトとして解除するオプションと、新たな回転軸を簡単に作るためのツールがあります。
Prep Tools は、任意のモデル要素を一連の新規モデルに分割し、その軸を理想的な位置に移動します。このツールの使用は必須ではありません。単に利便性のために提供されています。処理中のモデルが既に分割されていれば、軸はそこから回転すると想定されるポイントに位置し、モデルの X 軸はモデルの長さ方向を向いています。これで、モデルは次のステップに進む用意ができました。
例: 葉の茂みは個々の葉に分けます。任意の草の葉の一枚は、風に吹かれるとそのベース周囲を回転します。そのため、その回転軸は草のモデルのベースに存在し、回転軸の X 軸は、モデルの長さ方向を向きます。ほとんどの場合、上向きの草になります。
Hierarchy Painter (階層ペインター)
次の動画では、スクリプトの Hierarchy Painter (階層ペインター) セグメントについて解説しています。ツールのこの部分は、親子関係を保存するために使用されます。たとえば、枝と葉の関係などが該当します。また、メッシュにおけるモデルの回転軸および回転情報の保存にも使用されます。
モデルが階層を必要とする場合のみ、スクリプトの "Hierarchy Painter" セクションを使ってモデルを処理します。葉がある木は適切な使用例ですが、草はそうではありません。草は、"Per Object Painter" セクションでペイントします。
また、枝 / 親の回転軸は、"Max dist for parent piv" によって表されるように、ボックス内に配置する必要があります。例えば、モデルのペイント時に、"Max dist for parent piv" が 4096 に設定されていると、枝/ 親オブジェクトの回転軸は、x および y で負または正の 2048 の範囲内、z 軸は 0 から 4096 の範囲内の場所に位置します。さらに、モデル処理ステージ中に "Max dist for parent piv" が 4096 以外に設定されている場合、アンリアル エンジンのモデルのシェーダー内でも同じ数字を使用します。
Per Object Painter (オブジェクト単位のペインター)
次の動画では、Per Object Painter スクリプト セクションで使用できるオプションについて説明しています。また、いくつかの使用方法と、モデル上でデータを保存する方法についても解説しています。
3D Studio Max のサンプルファイル
次のファイルには、動画チュートリアルで使用されている木のコピーが入っています。
- https://d1iv7db44yhgxn.cloudfront.net/documentation/attachments/7ed5f1d8-2409-44f5-afa4-c335e664fe58/tree.max (右クリック からダウンロードして保存)
要件
- 3D Studio Max - スクリプトは、3D Studio Max の 2010 および 2012 バージョンを使用してテストされました。
- Pivot Painter のマテリアル関数。関数を使わずにスクリプトを使用することは可能ですが、関数を使うとデータがはるかに扱いやすくなります。
その他の注意事項
スクリプトの "Hierarchy Painter" または "Per Object Painter" のいずれかのセクションを使用してモデルを処理しますが、両方は使用しません。"Hierarchy Painter" でモデルをペイントしたら、オブジェクトのマテリアル内で "PivotPainter_HierarchyData" マテリアル関数を使用します。スクリプトの "Per Object Painter" セクションを使用したら、"PivotPainter_PerObjectData" を使ってマテリアル内の回転軸情報をデコードします。
3ds Max のワールド単位設定は、ペイント時にセンチメートルに設定し、エクスポート時にスケーリング / 変更しないでください。3ds Max とアンリアル エンジンとの間でスケールを維持することが重要です。そうしないと、望ましくない結果になります。