こんにちは。sharaです。
前回に引き続きPivot Painterのご紹介をします。
【動作・検証環境】
Unreal Engine 4.7.2
3ds Max 2015 SP3
【対象ユーザー】
UE4:Materialの基本、World Position Offset、FBXのインポート手順などがわかる方
3ds Max:基本操作(モデリング、サブオブジェクトレベル、基点、UV、頂点カラーへの理解)、スクリプトの導入方法などわかる方
・今回の概要
3ds Maxで階層を持たない簡単なアセットを用意し、それにPivot PainterスクリプトでPivot情報の設定をします。
次に、それをFBXで書き出し、ひとつのメッシュとしてUE4へと読み込み、新規マテリアルを適用します。
そのマテリアルにPivot Painter Functionノードを設定し、値をWorld Position Offsetへ渡し、その結果、エディタ上でPivot Painterの設定がどう影響してメッシュが変化するのか確認します。
・テスト用のアセット作成
まずは、3ds Maxで簡単なアセットを作り、それに対してPivot Painterの設定をしていきます。
…と、その前にMaxのSystem Unit(システム単位)の設定を確認しておきましょう。
下図のように1 Unitが1cmになっていればUE4にエクスポートしても大丈夫なはずです。
![20150306_PivotTut2_001](https://historia.co.jp/wp/wp-content/uploads/2015/03/79f91909b7e4235708d118c0cc6d39cc-300x132.png)
余談ですが、以前別件で広大な景観シーンなどを作った際はcmだと単位が小さすぎて困ったことがあります。そういったときはいっそのこと単位を大きくするかUE4のインポート時にスケールを調整するなどして適宜対応しましょう。
さて、記事を書くにあたって、どのような例で説明しようか悩んだのですが、今回は基本編ということで仕組みがわかりやすいよう、プリミティブの配列に対して設定をしてみます。
下図のオブジェクトは、ひとつのメッシュを複製後、アタッチしEditable Polyへ変換したものです。Teapotなのは半分自分の趣味ですが、取っ手やフタなど複数の分離したパーツ(要素)で構成されているため、Pivot Painterの変化が確認しやすいかなと思いチョイスしました。
![20150306_PivotTut2_002](https://historia.co.jp/wp/wp-content/uploads/2015/03/7f6a985967d2a73edcb0dc01fbae311a-300x169.png)
・Prep Toolsロールアウト
では、Pivot Painterスクリプトを実行し、オブジェクトを選択した状態でPrep Toolsロールアウトの上項目から[Detach Selected Model’s Elements]ボタンを押しDetachします。Detachの際にObject Colorが新しく割り当てられます。
![20150306_PivotTut2_003](https://historia.co.jp/wp/wp-content/uploads/2015/03/75a97ddea872baec6367a9bf9ee01447.png)
さらに下項目に進みます。
Detach時にSelection Setが作られていますので、ロールアウト中央項目のUpdateを押してから、リストボックスで指定します。
![20150306_PivotTut2_004](https://historia.co.jp/wp/wp-content/uploads/2015/03/93381a87845ff93c697b03a2c831614e-300x167.png)
今回の例では[Pick Leaf Pivot Obj]で中央のメッシュを選択し、[Num Of Face Norms to…]でAverage Allチェックボックスを選択しました。
これらの項目は木の枝や葉などPivotの位置を指定する際に使うことになります。
設定ができたら、[Create New Pivots]を押してPivotを作成します。
・Per Object Painterロールアウト
次に、Per Object Painterロールアウトを開きましょう。
今回は個々のオブジェクトでPivotを設定することが目的であり、階層を持たないためHierarchy Painterロールアウトは使いません。
では、先程と同様にリストボックスをUpdateし同じSelection Setを選択しましょう。
そして下方にあるPaint Options項の[Paint Current Selection Set]を押すとPivot値が新規UVとVertex Colorに書き込まれます。
![20150306_PivotTut2_005b](https://historia.co.jp/wp/wp-content/uploads/2015/03/d8fa0752a809c5f1351e61db310e7220-300x187.png)
ロールアウト中央やや下にあるPreview:からラジオボタンで表示を切り替えられます。上図はColor表示の状態です。
・FBXエクスポート
では、FBXで書き出してUE4へ読み込んでみましょう。
書き出しオプションは下図の通りです。アニメーションの設定は不要です。
![20150306_PivotTut2_006](https://historia.co.jp/wp/wp-content/uploads/2015/03/11126a4716d40433d22a25f49dac5176-211x300.png)
・UE4でインポート
書き出したFBXをスタティックメッシュとしてContents Browserにインポートします。下の設定で読み込みました。
そして、レベルに配置します。
![20150306_PivotTut2_008](https://historia.co.jp/wp/wp-content/uploads/2015/03/2dab14fbd4ad5a5ce2584d173f379b15-300x208.png)
・マテリアルの割り当てとPivotPainterノード
それでは新規マテリアルを作成し、割り当てます。
PivotPainter_PerObjectData Functionノードを呼び出し、下図のように接続すると…
![20150310_PivotTest01](https://historia.co.jp/wp/wp-content/uploads/2015/03/20150310_PivotTest01-300x211.png)
Pivot Painterで各Objectの要素毎に指定したPivotを基準に、スケール(正確には頂点座標)がサイン波に応じて変化します。
ひとつのメッシュで読み込まれているにもかかわらず、各々のメッシュの要素毎に個別の動きをつけることができました。
他にも、下図のようにノードを組むと…
![20150306_PivotTut2_010](https://historia.co.jp/wp/wp-content/uploads/2015/03/cfb2707cdc57e4510fadc4a2368b04ba-300x204.png)
メッシュの要素毎に、各々の軸で回転させることができます。
上図のMaterialでMaterial Instanceを作成すれば、リアルタイムにSpeed Parameter値を変えて回転速度を変化させることもできます。
・おわりに
いかがだったでしょうか。以上が、Pivot Painterの初歩的な説明になります。
簡単な例で恐縮ですが、Pivot Painterでどのようなことができるのか少しでも伝われば幸いです。
応用になりますが、樹木の枝や葉、さらにはキャラクターの小道具やゆれものなどにも使える機能だと思います。
Blueprintと連携させることで、プレイ中にプロシージャルな動きを生成することもできます。
UE4もフリーになったことですし、3ds Maxをお使いの方は是非ともお試し下さい!
・事例紹介
最後にPivot Painterが活用されている事例をご紹介します。
Epic Games JapanのJoe Conleyさんの講演(Unreal Fest 2014)です。
「Epic最新作『フォートナイト』:シェーダーとブループリントが作る、生き生きとした世界」
非常に高度な内容ですが、使いこなせばここまでできるんだなと思わされます。