Pivot Painter 2.0 MAXScript は、ピボット (回転軸) と回転の情報をモデルのテクスチャに格納します。こうしたテクスチャは、アンリアルのシェーダー システム内で参照可能になり、インタラクティブなエフェクトを作成することができます。
サンプル映像の動きはすべて、頂点シェーダーを使用してリアルタイムでプロシージャルに生成されています。ピボット ペインタのマテリアル関数は、モデルの葉や枝のそれぞれの動きの継承情報を形成します。各エレメントは、個々の回転軸、方向ベクター、バウンドのサイズ、継承された動きを使ってアニメートされます。流動的でリアルな結果が得られます。
Pivot Painter 2 のマテリアル関数 が追加されてから、こうしたタイプのマテリアルを非常に簡単に作成できるようになりました。コンテンツ サンプル にあるようなサンプル コンテンツを使用すると、上記で説明したアニメーションの生成方法を実際に見ることができます。現在、サブ オブジェクトの回転軸を取り出すには、Pivot Painter スクリプトを使用して 3D Studio max でメッシュを処理し、 そのファイルをインポートし、利用可能な Pivot Painter 関数を使用してマテリアルを作成します。サンプル フォリッジの動きのマテリアル関数は、4 レベルまでの階層の深さと 30,000 のモデル エレメントをサポートします。
このように動きを作成するとメリットがあります。この技術を使って処理されるモデルは、標準のスタティックメッシュに比べて UV チャンネルをひとつだけ多く使用しますが、アニメーションの負荷はスケルタル アニメーションよりもはるかに低くなります。これはリアルタイムで計算されるからです。頂点シェーダーの命令数は、一般的にピクセルの命令数よりもグラフィカル面でパフォーマンス上問題になりません。モデルの頂点数がモデルが描画するピクセル数よりも大幅に少ないからです。
このページで扱ったサンプルを試す場合は、Epic Games のランチャーから Content Examples プロジェクトをダウンロードして、PivotPainter2 マップを開きます。

Pivot Painter 2.0 の新機能
Pivot Painter 2.0 のリリースに伴い、MAXScript に改善と変更が加えられました。一部のオプション (Hierarchy Painter) がなくなったり、名前変更されていますが (Per Object Painter が Vertex Alpha Painter に)、詳細なアセットを作成するプロセスを簡素化し、全体的なワークフローとしては改善されています。Pivot Painter 2 の機能を拡張しこれまでよりも良い結果を得るための改善です。最終的には、コンテンツ作成時に非常に幅広いオプションを与えてくれます。改善点については、以下をご覧ください。
ワークフローの改善点
リグ構築の事前処理は、3DS Max の標準 Link ツールを使って行われるようになりました。木を葉や枝などの個々の論理エレメントとしてモデリングします。ピボット (回転軸) が理想的な場所と向きに配置されるようにします (X-軸がオブジェクトの長さの下方向を指す)。次に、これらを従来のリグのようにひとつのものとしてリンクします。
結果として、複雑なフォリッジ作成を非常に簡単に行うことができます。一本の枝のリグを作成し、複製し、置き換えることができます。再親子付けされた枝は、その子の階層の並びも保持します。
木のリグを構築し、モデリングしたら、木の中の任意のエレメントを選択し、 [Render Options] セクションで [Process The Selected Object Hierarchy] ボタンを押すだけです。スクリプトが自動的に選択したエレメントの階層を横断し、ルートを見つけて、チェーンを戻り、その子のすべてを集めて処理します。最終的に、利用可能な [Render Options] から選択したデータを使ってテクスチャをレンダリングします。

この方法では、個々のエレメントとリンクされたエレメントの両方に対応します。結合された草や木のモデルでは、一度にそれぞれの草の葉を選択して、次に木のエレメントを選択してから、[Process Selected Object Hierarchy] ボタンを押します。
テクスチャ座標の制御
どの UV セットを書き込むかを制御できます。その結果、このシステムを 頂点アニメーション ツール などの他のものと組み合わせることができます。Pivot Painter 2.0 で選択したユーザー設定は、最終出力のテクスチャ名に便利なリマインダーとして表記されます。
以下は自動化された命名規則です。
[MeshName]rgb[Current Texture RGB Choice]a[Alpha Choice]_[UV Channel]
最終出力の例は、以下のようになります。
ExampleMesh_rgb_PivotPos_a_ParentIndex_UV_2
拡張性
処理とレンダリングのコードは完全に抽象化されており、今後レンダリングの新規オプションを追加する労力が最小限に抑えられます。
新規レンダリング オプション
MAXScript の改善の一環として、整数を float データとして格納する新しいビット シフトのアルゴリズムがあります。これにより、階層深度を増やし、最大オブジェクトのカウントを 3,000 から 30,000 へと増やすことができました。これは、複雑なフォリッジを表現するうえで不可欠です。
このツリー アセットには、 14,431 のサブモデルがあります。
- 16-ビット RGB:
- 回転軸の位置
- 原点の位置
- 原点の範囲
- 8-ビット RGB:
- オブジェクト ベースのベクター (一回に 1 ベクター)
- 16-ビット Alpha:
- 親のインデックス (float として Int)
- ルートからのステップ数
- エレメント毎のランダム 0-1 値
- バウンディング ボックスの直径
- 選択の順序 (float として Int)
- ノーマライズした 0-1 の階層の位置
- ピボット位置からオブジェクト X,Y, Z のバウンドの長さ
- 親のインデックス (Float - 最高 2048)
- 8-ビット Alpha:
- ノーマライズした 0-1 の階層の位置
- エレメント毎のランダム 0-1 値
- オブジェクト X,Y, Z のバウンドの長さ (最高 2048)
バウンディング ボックスの再作成
3DS Max を使用する場合、モデリング プロセス中にサブオブジェクトのジオメトリがシフトするにつれて、モデルのバウンディング ボックスが拡張されます。オブジェクトのバウンディング ボックスは、このプロセス中にメッシュの方向を向いたり、位置合わせしなくなりました。メッシュの軸のトランスフォームを変更しても同じことが起こります。これに対処するために、[Recreate Bounding Boxes] セクションでは、選択したメッシュのバウンディング ボックスをメッシュの回転軸の方向に適切に位置合わせしたものと置き換えます。これは、他のデータ収集機能 (Vertex Alpha Painter と Bound の情報) のスクリプトで便利です。

左側は、モデルの回転軸のトランスフォームが変更されていますが、バウンディング ボックスは位置合わせされておらず適切な向きではありません。[Recreate Bounding Boxes] セクションの [Process Selected Objects] ボタンを押すと、右のモデルのバウンディング ボックスが位置合わせして適切な方向を向きます。
選択したモデルの法線のマージ
Merge Selected Model's Normals (選択したモデルの法線のマージ) 機能は、オープン エッジの頂点が互いに上になっている複数モデルの法線を平均化します。このオプションでは、法線のシームの問題を解決します。こうしたシームは、Pivot Painter で使用するために単一モデルが複数部分に分割される場合に特に起こります。
![]() |
![]() ![]() |
---|---|
[Merge Mesh Normals] ボタンを押して、オープン面が交わる場所で法線を調整します。 | 法線をマージする前に、各面に対して位置合わせされます。マージすると、エッジが自然にブレンドするように密接に位置合わせされます。 |
3DS Max のバージョンとスクリプト情報
このツールは現在、3ds Max 2015 と 2016 でテスト済です。3ds Max の他のバージョンはまだテストしていません。そのため、他のバージョンを使う場合は問題が生じるおそれがあることに注意してください。
MAXScript をインストールするには、[UE4Directory]/Engine/Extras/3dsMaxScripts/PivotPainter2.ms から 3ds Max ビューポートにドラッグ&ドロップすると、スクリプトが開始します。
このスクリプトをプロジェクトで多用する場合は、ツールバーやクワッド メニューにいつでも追加することができます。操作方法がよく分からない場合は、Autodesk のサイトに 詳細なプロセスの説明 が掲載されています。
3ds Max の単位設定
ツールを使用する前に 3ds Max で使用している測定単位が UE4 で使用している単位と一致するように設定されていることを確認します。このように、同じ単位を使用することで、3Ds Max からツールを利用してエクスポートするデータを UE4 内でも確実に同じよう機能させることができます。UE4 ではセンチメートル (CM) をデフォルト単位として使用するため、3ds Max でもこの単位を使用するようにします。3ds Max で設定を変更するには、以下の操作を行います。
- 3ds Max を開いて、メイン ツールバーから Customize > Unit Setup の順に選択します。
- 次に [System Unit Setup] ボタンをクリックして、[System Unit Scale] セクションで、ドロップダウンを使って、設定を [inches] から [centimeters] に変更します。次に [OK] ボタンをクリックします。
- 最後に [Display Unit Scale] を [Generic Units] に変更して [OK] ボタンを押します。
アセットをインポートする
アセットをインポートする場合、最良の結果を得るために注意すべき点がいくつかあります。スタティックメッシュ と テクスチャ について以下のようにセットアップします。
スタティックメッシュ
[Import Options] ウィンドウで、[Skeletal Mesh] のチェックを外して、[Combined Meshes] のオプションを有効にします。
Static Mesh Import Options | |
クリックして拡大表示。 |
|
[OPTIONAL] Static Mesh Build Settings | |
クリックして拡大表示。 |
|
アップデート時には、[Reimport] オプションを使う代わりに、常にフルの再インポート (前のモデルを上書き) を行うことをお勧めします。これがマテリアルの問題を回避する最も安全な方法です。
テクスチャ
Pivot Painter 2.0 で作成し、生成されたテクスチャをインポートしたら、テクスチャ アセットを開いて以下のように設定します。
8-bit BMP Texture Settings | |
クリックして拡大表示 |
|
16-bit EXR Texture Settings | |
クリックして拡大表示 |
|
シェーダーを記述する
Pivot Painter からレンダリングされたすべてのテクスチャには、ツリーのサブ オブジェクト (枝と葉) を単純に数学的に表現するツールがあります。こうした情報を使って、風のソースに対する各サブ アセットの反応を近似して、自然な動きになるように細かい要素の階層を作ることができます。
独自のシェーダーを記述する場合は、一部のデータ型をアンパックする必要があります。こうしたアンパックする関数は以下の命名規則を使用します。
ms_PivotPainter2_*
PivotPainter2FolaigeShader マテリアル関数はその名が示すように、ニーズに合えばそれ自体、便利なマテリアルとして機能します。または、フォリッジ シェーダーの独自バージョンの骨組みとして機能します。ピボットペインタで利用可能なマテリアル関数についての情報は、 ピボット ペインタのマテリアル関数のリファレンス のページをご覧ください。
Pivot Painter 2 フォリッジ シェーダー
Pivot Painter 2.0 アニメーションをマテリアル内で一段と簡単に実装できるようになりました。多くのバックエンドの作業はセットアップ済みです。PivotPainter2FoliageShader を、マテリアルのコードに挿入してから、Material Attributes 入力ピンに最終的に接続します。[Material Details (マテリアルの詳細)] パネルにある [Tangent Space Normals] も無効にします。

このマテリアル関数では、Pivot Painter のデフォルトの UV とテクスチャ設定でアセットを処理したことを前提とします。
マテリアル インスタンスを作成すると、利用可能な Wind Settings を使って、サブ オブジェクトの階層を制御することができます。これらを使用するには、まず影響を及ぼしたいレベルの [Wind Setting] を有効にする必要があります。

[Wind Setting] を有効にすると、その階層深度で利用可能なオプションが可視になり、編集可能になります。
Pivot Painter からレンダリングしたテクスチャを割り当てることができる [Shared Wind Settings] を利用できます。
![]() |
|
テクスチャを正しく割り当てた状態で、[Wind Settings] グループを開いて必要な機能を有効にすることができます。各 Wind Setting グループは、特定の階層深度でメッシュを制御します。ツリーの例で、Wind Setting 1 は幹、次のグループ、その枝などを制御します。
風の乱流と突風
かなり見栄えのよいフォリッジ アニメーションを制作することができます。好みに合わない場合は、新しい風の乱流と突風の強さのテクスチャを作ることができます。これを行うには、ベクターの RGB 値を使って風のベクターをオフセットし、次にアルファを使って風の強さを制御します。こうした 2 チャンネルのセットは、シェーダーで別個にサンプリングされます。
テクスチャを使ってベクター オフセットと風の強さを様々に制御します。
最適化
結果を最適化する場合に、マテリアルの機能の仕組みを理解すると役立ちます。PivotPainter2FoliageShader マテリアル関数は汎用的に設計されています。同じ風の反応のコードを 4 回実行します。毎回、別の設定一式を使って、一階層深いレベルで実行します。PivotPainter2FoliageShader マテリアル関数を開くと、どのように機能するかがわかります。
PivotPainter2FoliageShader マテリアル関数を開いたら、マテリアル インスタンス作成時に公開される Wind Hierarchy Depths のシェーダー機能のネットワークが表示されます。
以下のセクションでは、使用可能な最適化技術について説明します。
マテリアル インスタンス
すべてのシェーダー機能が有効な場合、かなり負荷の高いマテリアルを作成することができます。シェーダーは、アニメートする必要がない Wind Settings グループ (または木の階層レベル) を無効にして最適化することができます。例えば、Wind Setting 4 を有効にして、モデルの葉をアニメートすることができます。階層深度で風の反応の設定をグループ化すると、モデルのエレメントも同じようにグループ化されます。すべての葉は、ルート オブジェクトから "X" ステップ分、離れています。同様に動作するすべての枝も一緒にグループ化します。そのため、簡単に複数の階層になってしまう木のようなアセットでは親すなわちマスターのマテリアル インスタンスをセットアップすることをお勧めします。

ベースとなるマテリアルは、マスター マテリアル インスタンスを作成するためにインスタンス化されます。これは、一か所ですべての風の設定を定義するために使用されます。次に、追加のマテリアル インスタンスを使って階層のピクセル シェーダーのコンポーネントを定義します。例えば、幹、枝、葉のベース カラー テクスチャなどです。こうしてその階層深度で不要なプロパティを無効にし、最適化することができます。
例として、葉のマテリアル インスタンスは、幹、枝と葉のセットの両方をシミュレーションして、木の残りの部分に併せて適切に動くようにします。これらの幹はそのアニメーションだけをシミュレーションする必要があります。つまり、葉や枝の他の階層は不要なため無効にすることができます。
法線を曲げる
考慮すべき他の最適化として、特に独自のシェーダーを記述したり、編集する予定がある場合に法線を曲げる方法があります。PivotPainter2FoliageShader マテリアル関数は、ユーザーがシェーダー内で法線を更新することを選んだ場合、表面法線に対して実際に回転させます。これはカスタム UV と BlendAngleCorrectedNormals マテリアル関数を使って低い負荷 (ただしアーティファクトのリスクあり) で行うことができます。
その他の使用例
位置情報と階層深度を使って、独自のプロシージャルな成長を作成したり、以下のようなアニメーションを作成することができます。こうした例のセットアップ方法については、Content Examples マップ PivotPainter2 をご覧ください。
このサンプルは、Epic Games Launcher の [Learn] タブから利用可能な Content Examples に入っています。PivotPainter2.umap を開いて色々なサンプルをご覧ください。
その他の注意事項
- UE4 で Wind Actor は非推奨になり、代わりにマテリアル パラメータ コレクションとブループリントを使うようになりました。float 4 の Wind Actor Parameter を使って Material Parameter Collection を更新するブループリントを作成することができます。Material Parameter Collection は、Wind Actor の代わりに任意のフォリッジ マテリアル内で参照することができます。
トラブルシューティング
モデルのアニメートが満足いくものでない場合は、以下の解決策を試してください。
- アセットを再インポート
- モデルとテクスチャの設定を確認
- マテリアルの [Tangent Space Normals] が無効になっていることを確認
- 3DS Max 内で不均一にスケーリングされているメッシュは、不正確なトランスフォームを戻し、結果が乱れることがあります。この場合、"Reset XForm" 操作を試してください。オブジェクト レベルではなくサブオブジェクトを介して不均一にスケーリングしたメッシュの方が安全です。エレメントの複製、親子付、配置前にこれを行うことをお勧めします。
- 一部のメッシュがワープすることがあります。これは、最適化がシェーダー内で行われることが原因です。枝に対する風のエフェクトを適切に計算するためには、各葉の軸とベクターに対する風のエフェクトを計算してから各メッシュの回転を実行する必要があります。回転とオフセットの操作は負荷が高いものです。そのため、各エレメントのメッシュの回転をローカル空間内で行います (他の回転を計算する前)。その結果の回転によるメッシュのオフセットが、他の変換に加えられます。結果の精度は低くなりますが、負荷は低くなります。精度の低下により、オフセットの組み合わせに応じてフォリッジのスケールが少々変わることがあります。その場合、以下を試してください。
- 風のシミュレーションの強度を弱める
- 階層レベルの数を減らしてアニメート
- メッシュを回転させて、スケールが変わってしまう頻度を減らす