てんちょーの技術日誌

自分がつまづいたこととかメモ

【UE4】BPで気合のProcedural Modering

はじめに

Unreal Engine 4 (UE4) Advent Calendar 2017 の2日目です。

qiita.com

今回の内容はあまりオススメできませんが、気になったのでやってみた次第です。

先に参考図書である「Unity Graphics Programming」のリンクを貼っておきます。これをUE4に移植してみた、という内容です。 この本、割りとTwitterで話題になっており、初めて買えるタイミングであった技術書典3に僕も出展してたんですがなんとお隣のブースでした()

indievisuallab.stores.jp

実際のサンプルコードはこちらに。

github.com

まあこのまま移植しても多々ミスって思うように表示されなかったり、ちょっと手を加えないといけない箇所もあったりして 割りと大変でした。はい。

Procedural Moderingとは

通常のモデリングはDCCツールと呼ばれる Maya, 3ds MAX, Blenderなどを用いて作成することが多いです。 それとは別に計算だけでモデリングすることです。参考図書には

ルールを記述し、自動化された一連の処理の結果、形を得るアプローチのこと

とされています。

応用例としては AirtoneのコレもProcedural Moderingしてマテリアルで演出しているそうです。

f:id:shop_0761:20171101133503p:plain

https://youtu.be/qssKpo8cHYwより

始める前に

さがしてみると、もんしょさんが先にやっていました。さすが!

もんしょの巣穴blog [UE4] ProceduralMeshComponentを使ってみる

さすがに複雑な計算をBPでやるのは骨が折れるので、ProceduralMeshComponent を使う場合はC++の方がいいと思います。

はい。のでこれをBPでやりました。すると代わりにたすさんの骨が折れました。

できたもの

先に完成イメージを見ておきましょう。よっしゃーできた!!と思っても知らない人には正直大したことないものなので 心が強い方が取り組むことをオススメします。

f:id:shop_0761:20171101134149g:plain

f:id:shop_0761:20171101134217g:plain

f:id:shop_0761:20171101134242g:plain

f:id:shop_0761:20171201020107p:plain

多少見栄えするようにTimelineでしゅるしゅる動かしたりしてますが、特に意味はありません。

こんな感じで頂点があります。

f:id:shop_0761:20171201022926g:plain

作ってみる

こちらに今回作ったアセットをサンプルとして置いておきます。 詳細な考え方は参考図書を読んで下さい。

github.com

とりあえずBaseクラスを作っておきました。BP_ProdeduralMeshBaseとしています。

f:id:shop_0761:20171201020614p:plain

f:id:shop_0761:20171101134949p:plain

f:id:shop_0761:20171201020657p:plain

Debug用にちょっと関数を用意してありますが、あまり頂点数が多いとUE4ごと死にます。気をつけましょう。

基本的にはこのDraw MeshをOverrideして使う感じです。

では板ポリを出して見ましょうか。継承したBP_QuadでDrawMeshをOverrideします。

f:id:shop_0761:20171101140201p:plain

するとこんなかんじ

f:id:shop_0761:20171101135719p:plain

わーい!これくらいならお手軽ですね。UVも設定してあげるとチェッカーの模様が出ます。 失敗してる / 設定してないと消えます。

f:id:shop_0761:20171101135827p:plain

同様にNormal, Tangentも設定できます。

移植時の注意点

だれもやらないとは思いますが、一応。参考図書がUnityなので、座標系、単位が違います。 またいくつかのindexに注意が必要です。(i >= length と i > length とか)

コードを何度も見直しても、間違ってる箇所が見つからない場合は、自分が見落としている可能性があるので 何日か空けて見直すしかありません。それでも思うように出来ない場合は手探りで調査します。(木の後半は手探りでした)

便利ポイント

Procedural Mesh Componentで生成したMeshはStatic Mesh化できます。

f:id:shop_0761:20171201025022p:plain

ここからCreate Mesh して保存すると、

f:id:shop_0761:20171201025124p:plain

とアセット化できます。

おわりに

最近どういうわけかUnityとUE4を同時に起動する時間が長くなり、謎の移植芸を身に着けてしまったようです。 動的にモデルを生成したい、モデルアセットはプロジェクトに入れたくない、BPしか使いたくないけどProcedural Moderingはしたい、などといった 特殊な人向けの内容になってしまいました。 最初のPlaneやQuadレベルだとやる意味をあまり感じませんが、木とかできると途端にすげぇ感がでますね(間に合ってよかった)。たぶんSpeedTreeを使ったほうが速い気がしました。

宣伝

UE4の動画教材(日本語)がこれからどんどんUdemyに出てきそうです。 僕のが一番最初に出たライトな感じのやつなので、興味があれば覗いてみてください。 こちらはちゃんと役に立つ系のものです()

www.udemy.com

ちょうどこの記事を公開する1時間くらいにalweiさんのが公開されたようです。

unrealengine.hatenablog.com

それとこの動画教材を作ったお話を 第2回UE4何でも勉強会 in 東京 にてLTするのでよければぜひぜひ。

ue4allstudy.connpass.com