関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2015.03.18UE4UE/ DCC
こんにちは。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にエクスポートしても大丈夫なはずです。
余談ですが、以前別件で広大な景観シーンなどを作った際はcmだと単位が小さすぎて困ったことがあります。そういったときはいっそのこと単位を大きくするかUE4のインポート時にスケールを調整するなどして適宜対応しましょう。
さて、記事を書くにあたって、どのような例で説明しようか悩んだのですが、今回は基本編ということで仕組みがわかりやすいよう、プリミティブの配列に対して設定をしてみます。
下図のオブジェクトは、ひとつのメッシュを複製後、アタッチしEditable Polyへ変換したものです。Teapotなのは半分自分の趣味ですが、取っ手やフタなど複数の分離したパーツ(要素)で構成されているため、Pivot Painterの変化が確認しやすいかなと思いチョイスしました。
では、Pivot Painterスクリプトを実行し、オブジェクトを選択した状態でPrep Toolsロールアウトの上項目から[Detach Selected Model’s Elements]ボタンを押しDetachします。Detachの際にObject Colorが新しく割り当てられます。
さらに下項目に進みます。
Detach時にSelection Setが作られていますので、ロールアウト中央項目のUpdateを押してから、リストボックスで指定します。
今回の例では[Pick Leaf Pivot Obj]で中央のメッシュを選択し、[Num Of Face Norms to…]でAverage Allチェックボックスを選択しました。
これらの項目は木の枝や葉などPivotの位置を指定する際に使うことになります。
設定ができたら、[Create New Pivots]を押してPivotを作成します。
次に、Per Object Painterロールアウトを開きましょう。
今回は個々のオブジェクトでPivotを設定することが目的であり、階層を持たないためHierarchy Painterロールアウトは使いません。
では、先程と同様にリストボックスをUpdateし同じSelection Setを選択しましょう。
そして下方にあるPaint Options項の[Paint Current Selection Set]を押すとPivot値が新規UVとVertex Colorに書き込まれます。
ロールアウト中央やや下にあるPreview:からラジオボタンで表示を切り替えられます。上図はColor表示の状態です。
では、FBXで書き出してUE4へ読み込んでみましょう。
書き出しオプションは下図の通りです。アニメーションの設定は不要です。
書き出したFBXをスタティックメッシュとしてContents Browserにインポートします。下の設定で読み込みました。
そして、レベルに配置します。
それでは新規マテリアルを作成し、割り当てます。
PivotPainter_PerObjectData Functionノードを呼び出し、下図のように接続すると…
Pivot Painterで各Objectの要素毎に指定したPivotを基準に、スケール(正確には頂点座標)がサイン波に応じて変化します。
ひとつのメッシュで読み込まれているにもかかわらず、各々のメッシュの要素毎に個別の動きをつけることができました。
他にも、下図のようにノードを組むと…
メッシュの要素毎に、各々の軸で回転させることができます。
上図のMaterialでMaterial Instanceを作成すれば、リアルタイムにSpeed Parameter値を変えて回転速度を変化させることもできます。
いかがだったでしょうか。以上が、Pivot Painterの初歩的な説明になります。
簡単な例で恐縮ですが、Pivot Painterでどのようなことができるのか少しでも伝われば幸いです。
応用になりますが、樹木の枝や葉、さらにはキャラクターの小道具やゆれものなどにも使える機能だと思います。
Blueprintと連携させることで、プレイ中にプロシージャルな動きを生成することもできます。
UE4もフリーになったことですし、3ds Maxをお使いの方は是非ともお試し下さい!
最後にPivot Painterが活用されている事例をご紹介します。
Epic Games JapanのJoe Conleyさんの講演(Unreal Fest 2014)です。
「Epic最新作『フォートナイト』:シェーダーとブループリントが作る、生き生きとした世界」
非常に高度な内容ですが、使いこなせばここまでできるんだなと思わされます。