BLOGブログ

2015.03.11UE4UE/ DCC

[UE4] Pivot Painterを使ってみる その1 [3ds Max](導入編)

・ご挨拶

こんにちは。今回初めてブログを担当するsharaと申します。

わたしはヒストリアに来る以前、映像業界で仕事をしていました。

そのためUE4に関しては、映像制作に用いることやリアルタイム表現のためのワークフロー構築などに興味があり、その方面にアンテナを張っています。

そこでわたしが担当する記事では、映像を制作する側から見て面白いなと感じたものを中心に取りあげていく予定です。願わくばUE4を使って映像を作りたい方にとって(もちろんそれ以外の方にも)、少しでも有益な情報をお届けできればいいなと思っています。

 

では、前置きはこれくらいにして本題に入りましょう。 

【動作・検証環境】

Unreal Engine 4.7.1

3ds Max 2015 SP3

【対象ユーザー】

UE4:Materialの基本(World Position Offset)、FBXのインポート手順などがわかる方

3ds Max:基本操作(サブオブジェクトレベル、基点、UV、頂点カラーの理解)、スクリプトの導入方法などわかる方

 

今回はPivot Painterという機能についてご紹介します。

下記のアニメーションはPivot Painterのみでつけられています。

 

・Pivot Painterを紹介するにあたって

個人的にこの機能で面白いなと思ったところは、アニメーションをマテリアルの頂点シェーダーで設定・制御できるという点です。

ゲーム制作の分野では頂点シェーダーでアニメーションさせるというのは一般的なことかもしれませんが、これまで映像(プリレンダ)制作をしてきた側からすると、タイムスライダーを動かさず、さらにキーフレームやスクリプトさえ使わずにマテリアルだけでアニメーションを制御できる、ということが新鮮に感じられました。セットアップに少々手順が必要ではありますが、さまざまな分野へ応用が利く機能だと思います。

 

・UE4からみるPivot Painter概要 

では、まずUE4側からPivot Painterの概要を説明します。

Pivot PainterはMaterial Functionの一種です。 

002_Pi_pivotNode

Pivot Painterを使うことで、あらかじめ定義された頂点のPivot(軸、基点)値を取り出すことができます。それに処理を加えマテリアルのWorld Position Offsetに渡すことで、そのマテリアルが適用されたメッシュに動きを付けることができます。

Pivot PainterはEpic Gamesより提供されているMAX Scriptによって3ds Maxでセットアップします。スクリプトはUE4のインストールディレクトリの下位階層にあります。

Epic Games\4.7\Engine\Extras\3dsMaxScripts\PivotPainter.ms

 

・Pivot Painterの利点

Pivot Painterを使う利点は、たとえば草木のように数が多いものの動き(ゆらぎ、なびき)をメッシュの要素別にマテリアル上で設定できることです。変数ノードをParameterにしておくことで、Material Instanceを作ればリアルタイムに動きを確認しながら調整が可能になります。

また、Material Parameter Collectionなどで値を設定しておき、それをBlueprintから制御できるようにすれば、比較的簡単にインタラクティブな変化をつけることもできます。

004_Pi_MaterianNode

他にも、パフォーマンス面でSkeletal Meshより処理が軽いことも利点のひとつです。

 

・3ds MaxからみるPivot Painterスクリプト概要

次に、3ds Max側からの説明です。

最初にPivot Painterのスクリプト処理の流れを簡単にまとめます。

まず、Prep ToolsロールアウトでPivotの処理をして、その後、Hierarchy PainterもしくはPer Object PainterロールアウトでPivotの位置・方向をUVやVertex Color(頂点カラー)に書き込むという流れになります。

003_Pi_Script

Pivot Painter Script by Jonathan Lindquist (Epic Games)

Pivot Painterのスクリプトを使うことで、オブジェクトをサブオブジェクトレベルのElement(要素)ごとにEditable Poly(編集可能ポリゴン)へDetach(デタッチ)します。 バラバラになったEditable PolyでSelection Set(選択セット)を作成して、そこに含まれる各オブジェクトのPivotを更新します。その際に、SplineかMeshを新たなPivotの近接点として指定できます。

005_Pi_PivotCenter

ここまでが、スクリプトのPrep Toolsロールアウトで行われる処理です。

 

次に、Hierarchy PainterロールアウトかPer Object Painterロールアウトで、上述のPrep Toolsで設定したPivotをUVとVertex Colorに値として格納します。

  006_Pi_Hierarchy 007_Pi_PerObject

Pivot値をどの範囲で格納するかは指定するオプションによって異なりますが、基本は新しいUVチャンネル作成して各軸の位置情報をUVの値として設定します。同時に、Vertex ColorにはX軸の方向値が格納されます。

以上が、Epic Gamesより提供されているPivot Painterスクリプトの概要です。余談ですが、Pivot Painterという機能名はPivot情報をVertex ColorなどにPaintする(書き込む)ことから、命名されたのではないでしょうか。

 

 ・処理後のUVを見てみる

さて、Pivot PainterのセットアップがされたオブジェクトのUVを見ると、0-1の範囲を超える非常に大きい値が入っています。

008_Pi_UV

こういったUVの使い方は、同僚の諸先輩方に伺ったところ、ゲーム制作ではよく使われる手法だそうですが、自分にとっては新しい発見でした。UVというとやはりテクスチャマッピングのために使うという先入観があったからです。

以前、UDIMのように既存のUVマップを拡張したものは扱ったことがありましたが、今回のように座標値を直接UV値として渡してしまうというのは、本音をいうと少々強引にも感じられました。ですが、外部ファイルを使用せず限られたチャンネルを有効利用するという点でみれば、よく考えられていて感心するばかりです。

 

ツールの説明やビデオチュートリアル(英語)が公式のヘルプにもありますので、こちらもご参照下さい。

https://docs.unrealengine.com/latest/JPN/Engine/Content/Tools/PivotPainter/index.html

 

それでは次回、実際に簡単なアセットを作成し、Pivot Painterの設定をしてみましょう。