みつまめ杏仁

アンリアルエンジン(UE4)でGUIを作るためにゴニョゴニョしてます。UIデザイナーの皆様の助けになれば幸いです。

[3D]頂点移動でタブウィンドウ的な何かをつくる

 先日4/21のアンリアルフェスに参加してきました。あっという間の8時間で、アンリアルエンジンに関わってる人たちのお話をもっともっと聞いていたい、そんなイベントでした。残念ながら懇親会のチケットは速攻でSOLD OUT。横浜のフェスも行きたいけど遠いな~。

 

 で、今回は3Dメッシュでウィンドウっぽいものを作ってみます。

たまにはポリゴン使ってUI作ってみようかな~などと、思ってみたりしちゃったのでやってみました。まず用意するのはテクスチャとポリゴンメッシュ。メッシュはBlenderを使用しました。

 

まずテクスチャ。

f:id:hiyokosabrey:20180427001732p:plain

サイズは 256x128 今回アルファチャンネル無しのグレースケールテクスチャです。

VRAMの使用量を抑えて非圧縮にできるのでオススメです。

これに、UV範囲が分かるように色付けしてBlenderに持っていきます。

f:id:hiyokosabrey:20180427002033p:plain

 

平面を扱うので、Blenderの場合、作業する際にテンキーの[7]、[5]を押して、トップビューの平行投影にすると、 ペラポリゴンがきちんと平面で編集できます。出来上がりは↓のようになります。

f:id:hiyokosabrey:20180427002718p:plain

一応手順を簡単にメモっておきますね。

Planeメッシュを作成して、ざっくりと上図のように分割します。「ループカットとスライド」を使ってテキトーに割っていきます。

f:id:hiyokosabrey:20180427003942p:plain

このオブジェクトにマテリアルとテクスチャを追加します。そして「編集モード」に切り替えて「UV展開」したら、UVの頂点をテクスチャの色分けに合わせて移動させます。このときUVの頂点は「ピクセルに吸着」にチェックを付けておきます。

f:id:hiyokosabrey:20180427003109p:plain

UVの編集が終わったら、メッシュの頂点を整えます。ざっくりとピクセル基準でOK。モデルのサイズは後からスケールで調整できます。

色分けのピクセルに合わせるように頂点座標を編集しますが、「単位」の設定を確認します。

f:id:hiyokosabrey:20180427224405p:plain

プロジェクトによって、またカメラとの合わせ方によって変わるので、あくまでも参考程度にお願いします。

この設定の場合、1ピクセルを1mとして作っていきます。

f:id:hiyokosabrey:20180427224923p:plain

 ここで、欲しいウィンドウの横幅になるよう左右を引き延ばしておきます。

 

モデルができたら、FBX形式 で エクスポートします。

f:id:hiyokosabrey:20180427225354p:plain

 エクスポート設定は以下。

f:id:hiyokosabrey:20180428223617p:plain

ちょっと小さくて分かりにくいですが、上 は 『 -Yが上 』を選びます。

この設定はBlenderを終了しても覚えておいてくれないので、+ ボタンをクリックしてプリセットにしておくのをオススメします。

 

名前をつけて書き出したら、UE4のコンテンツブラウザにドラッグ&ドロップします。

このときちょっとだけ待ってあげてください。おそらく中身を解析してます。

f:id:hiyokosabrey:20180428104734g:plain

 

インポート設定のウィンドウがポップアップするので、確認しながら調整します。

基本的にデフォルト設定のままで大丈夫ですが、無用なデータが作られるのは避けたいので、チェックした方がいい個所を記しておきます。

f:id:hiyokosabrey:20180428111451p:plain

FBXに関して詳しいことは公式サイトをぜひ

Unreal Engine | FBX コンテンツ パイプライン

 

これで無事インポートできたら、テクスチャもインポートします。

インポートしたテクスチャからマテリアルを作成(Create Material)します。

テクスチャはグレースケールで作っています。

あと、もう一枚テクスチャを追加します。

UV座標をすこしカバーするように、赤と青で塗りつぶします。

f:id:hiyokosabrey:20180428113906p:plain

※分かりやすいようにオレンジのラインを重ねています。

赤は(255,0,0)青は(0,0,255)にします。

255 を使わないと計算のときに 1.0 にならないのでご注意を。

この単純な色ベタのテクスチャを 32bpp のフルサイズ で作るのはテクスチャメモリがもったいないので、解像度を下げます。この時、ニアレストネイバー を選択するとピクセルがボケません。できるだけ 1/2、1/4単位で縮小します。赤と青のピクセルも基本的に奇数は使わない方が無難です。これはテクスチャを作る場合は偶数を基本にした方がいいです。あくまでも面積的な話です。で実際に使ったのがこれ。

f:id:hiyokosabrey:20180428114908p:plain

64x32です。

これをマテリアルに追加するのですが、テクスチャのフィルタ設定を変更します。

2枚のテクスチャ設定を並べてみます。

f:id:hiyokosabrey:20180428115949p:plain

これをマテリアルで組んでいきます。

 

 マテリアルは、光源計算しないのと、半透明なので、

f:id:hiyokosabrey:20180428214009p:plain

全体図はこんな感じ。

f:id:hiyokosabrey:20180430144459p:plain

キーになるのは LocalPosition ノード。

f:id:hiyokosabrey:20180430144815p:plain

ここから頂点座標を取り出したものに、マスクテクスチャを使って値を作り、X軸とZ軸にそれぞれ足し算してやります。

緑のScalarParameterノードは、ブループリントからいじるためです。

f:id:hiyokosabrey:20180430144907p:plain

頂点をいじった状態を本来のオブジェクト位置に引き戻したいので 絶対ワールド位置 ノードを使います。この Absolute World Positionノード、 Absolute で検索しても出てこなくて、普通に World Position で並んでて取り出すとこのカタチになる。

f:id:hiyokosabrey:20180430145504p:plain

ネットの参考画像と合わなくてくじけそうになった。

 

 

マテリアルができたら、スタティックメッシュのアセットを開いてセットします。

f:id:hiyokosabrey:20180428214617j:plain

 

Actor型のブループリントを用意します。

f:id:hiyokosabrey:20180428214933p:plain

さっそく編集していきます。

まず、左上の緑のボタンから Static Mesh を追加します。

f:id:hiyokosabrey:20180428215252p:plain

追加したStaticMeshコンポーネントは、名前を変更できます。

追加できたら、右のDetailsタブから、作ったスタティックメッシュをセットします。

f:id:hiyokosabrey:20180428224323j:plain

 

続いて、EventGraphを編集します。

その前にConstruction Scriptで透明度のセットをしておきます。

f:id:hiyokosabrey:20180430150549p:plain

出現時は透明なんですが、最初の配置調整が大変なので、ここで強制的に 1.0 にします。マテリアルにセットしたパラメータ ”Opacity” に値を渡します。最後に準備ができたら 0.0 に戻します。

 

次に

EventGraphにカスタムノードを置いてつないでいきます。

f:id:hiyokosabrey:20180430151329p:plain

タイムラインノードの中身はこんな感じです。Float型が2つ。

f:id:hiyokosabrey:20180430151654p:plain

ウィンドウの高さ = Height は、固定の値にするのではなく、0.0 ~ 1.0 のアニメーションにします。こうしておくと、いろんな値を掛け算するだけで自由なサイズのアニメーションが作れます。

 

出現アニメーションができたのでテストしてみます。

スポーンされた想定で、EventBeginPlayノードから、上のカスタムイベントを呼び出すことにします。

f:id:hiyokosabrey:20180430152546p:plain

コンパイルして保存したら、シーンに適当に配置します。

再生しすると、

f:id:hiyokosabrey:20180430153630g:plain

いい感じになりました。

UMGを使わずに、Scal9Grid ぽいことができました。

なんかVR空間のUIで使えそうな予感。いかがでしょうか。

別のアングルから見ると3D空間に浮いているのが分かります。

f:id:hiyokosabrey:20180430154332j:plain

 

テクスチャで頂点にマスクをすることで、動かしたい頂点を選び分けることができました。

 

今回は以上です。UMG推しではありますが、3D の UI制作についても記事を書いていけたらと思ってます。

 

ではでは

ステキな3Dウィンドウライフを!