もんしょの巣穴blog

[UE4] ProceduralMeshComponentを使ってみる

今回はUE4.8から追加されたProceduralMeshComponentを使ってみます。
ただしこの機能は実験的に追加されているものですので、今後廃止になるということはないとは思いますが使い方が変更される可能性があります。
使用の際にはその点に十分注意して使用してください。

ProceduralMeshComponentはその名の通り、手続き的(Procedural)に生成されたメッシュを取り扱うコンポーネントです。
手続き的、というのはつまり、プログラムによる計算を用いてメッシュを生成できるということです。
今までは予めDCCツールで作成しておいたメッシュをボーンやモーフターゲットを用いて変形するのが関の山でしたが、この機能によってC++、もしくはBPからメッシュを生成することが可能になるというわけです。

それで何が出来るのか、というと、例えばアクターを使わずに大量の弾を描画して弾幕を作ってみたり、キャラクタの移動した軌跡を描画してみたりすることが可能です。
ただし、毎フレーム、メッシュの変形を行うのはそれなりに重くなるものと思われますので注意してください。

では、まずはBPでの使い方から見て行きましょう。といっても、BPとC++で特に変化することはほとんどありませんが。
最初に適当にBPをActorを継承する形で作成します。
ここに [コンポーネントを追加] → [Procedural Mesh] を選択してProceduralMeshComponentを追加します。

ue374.jpg

追加をしてもメッシュは表示されません。何もメッシュが生成されていないからです。

次に Construction Script をいじりましょう。今回はここでメッシュを生成します。
メッシュの生成には ProceduralMeshComponent が持っている [Create Mesh Section] という命令を使用します。

ue375.jpg

この関数への入力としては、最低でも [Vertices] と [Triangles] の2種類を入れなければなりません。
[Vertices] には頂点座標の配列を指定し、[Triangles] にはどの頂点で三角ポリゴンを形成するかの情報を頂点インデックスとして渡してやる必要があります。
[Vertices] と [Triangles] の関係は以下の図のようになっています。

ue376.jpg

図のような四角形は三角ポリゴン2枚で構成されています。頂点数は4で、図のV0~V3が頂点座標です。
この座標V0~V3を [Vertices] に順番に追加したとします。すると、V0~の頂点インデックスはそれぞれ 0~の番号が割り当てられます。
[Triangles] にはこのインデックス番号を用いて三角ポリゴン2枚を描く順番を指定することになります。
三角ポリゴン1枚には3頂点が必要なため、2枚の三角ポリゴンは6頂点で描画されることになります。
そのため、インデックス番号が6つ設定されているというわけです。

また、三角ポリゴンを形成するインデックス番号の指定順番も重要になります。
ここで考えなければならないのは三角ポリゴンの表面(面法線が正の方向)はどちらかということですが、ここには右ねじの法則が適用されます。
いわゆるサムズアップの用に親指を立てて他の指を軽く握った場合、親指以外の指の進行方向に沿って頂点座標が選ばれるとその親指の向きが法線方向になります。
上の図で言うなら、このポリゴンの法線は画面を見ているあなたの方向を向いています。

さて、とりあえずは簡単な三角形ポリゴンを表示してみましょう。
以下のように Construction Script を作成してみてください。

ue377.jpg

組み上げたらビューポートに戻ってみましょう。何もなかった空中に三角ポリゴンが描画されているのがわかるはずです。

その他の引数の意味を見て行きましょう。
[Normals] は法線、[UV0] はテクスチャ座標、[Vertex Colors] が頂点カラーで [Tangents] が接線方向になります。
これらの配列は [Vertices] と同じ要素数でなければなりません。
[Create Collision] はONにすると生成したモデルからコリジョンも生成します。
[Section Index] はメッシュのセクション番号で、セクションが違うと別のマテリアルを割り当てることが出来るようになります。

ProceduralMeshComponentにマテリアルを適用するにはコンポーネントを選択し、[Rendering] → [Override Materials] にマテリアルを追加すればOKです。
複数のセクション番号を利用する場合はその分だけマテリアルを追加しておきましょう。

ue378.jpg 

このようにProceduralMeshComponentを利用すると比較的簡単にポリゴンを生成することが出来ます。
しかし、複雑な計算による手続き的なメッシュ生成はBPでやるよりC++でやるほうが簡単でしょう。
というわけで、続きからC++によるProceduralMeshのあ使い方を調べていきましょう。

[[UE4] ProceduralMeshComponentを使ってみる]の続きを読む
スポンサーサイト
  1. 2015/06/20(土) 01:07:47|
  2. UE4
  3. | トラックバック:0
  4. | コメント:0

[UE4] Landscapeあれこれ 後編

Landscapeの話の後編は植生の設定方法です。
前編で作成したLandscapeに植物等を配置していこうと思います。

植物のたぐいを配置する上で問題になるのはアクターを大量に置くのは難しいという点です。
アクターとして1つ1つ置くのは作業的にも厳しいですし、何より速度面に問題が出ます。
1つ1つのメッシュを描画する場合、よく言われるDrawCall数が増えてしまうのが原因の1つです。

しかし、草や木などは大量に描画する必要がある一方でそれほど多くのユニークなメッシュである必要もなかったりします。
サイズや配置した時の角度が少し違うだけでも割と別のものに見えます。
この手の自然物は3種類くらいのメッシュがランダムに配置されているだけでも十分だったりします。

そこで、同じメッシュをいっぺんに大量に描画する方法が求められます。
それがインスタンス化メッシュです。
1つのメッシュを複数配置する際にインスタンス化をしておくと1回のDrawCallで描画が可能です。
もちろんポリゴン数などの問題はあるものの、DrawCallを減らすことで描画コストを大幅に下げることが出来ます。

UE4ではこのインスタンス化メッシュを利用する代表格としてFoliageが存在します。
名前の通り植生に主に使われますが、小さな石や瓦礫のようなものにも使用可能でしょう。
今回はこれを実現するFoliageツールと、似たような機能を持つGrassツールについて解説します。

まずはFoliageツールですが、こちらはモードの中に [フォリッジ] モードが存在しています。
植物の葉っぱのアイコンがそれです。

ue360.jpg 

このモードにはまず [フォリッジタイプ] を追加する必要があります。
追加できるのは StaticMesh で、SkeletalMesh は追加できません。
追加するには [フォリッジタイプの追加] ボタンを押すか、StaticMesh をドラッグ&ドロップすればOKです。

ue361.jpg

お前、植物じゃないだろ的なものまで追加されていますが気にしたら負けです。
あとはペイントツールと同様に配置したい場所にペイントしていくだけですが、いくつか設定をした方がいい物があります。

各フォリッジタイプを選択すると下の部分にパラメータが表示されます。
これらを設定することで配置されるメッシュのサイズや配置時の密度などの設定ができます。
よく使うであろう設定は以下のものでしょうか。
ue362.jpg

これらの内、Painting以外のパラメータはアセットとして保存できます。
保存したい場合は各フォリッジタイプのアイコンにマウスオーバーした際に表示される保存アイコン(フロッピーディスクのアイコン)をクリックして名前を決定すればOKです。
このアセットはフォリッジタイプというアセットになり、次回からはフォリッジタイプとしてこのアセットも追加することが出来るようになります。

ue363.jpg

ペイント時には有効にしたいメッシュ、無効にしたいメッシュがあるかもしれません。
このようなときはアイコンをダブルクリックするかマウスオーバー時の左上のチェックを外しましょう。
外されたアイコンはグレーアウトしてペイント時に配置されないようになります。

ue364.jpg 

Foliageツールのペイントは左クリックで配置、Shift+左クリックで削除が可能です。
色を塗る感覚でペイントするのが大変楽しいので自分の思うように塗り塗りしていきましょう。

ue365.jpg

もしも配置したあとに大きさや密度が気に入らない場合は [Reapply] を利用しましょう。
各フォリッジタイプのチェックした項目だけをペイントした部分において再調整を行うことが出来ます。
ちょっと密度が濃すぎたから減らそう、とか、サイズが大きすぎたので小さくしようとかはこのツールで行えます。
金属の箱のサイズのランダム性を追加し、密度を減らすとこんな感じになります。

ue366.jpg

いちいち消去しなくても修正できるのが便利ですね。

さて、続きからはUE4.8で追加されたGrassツールについて解説します。


[[UE4] Landscapeあれこれ 後編]の続きを読む
  1. 2015/06/14(日) 21:13:37|
  2. UE4
  3. | トラックバック:0
  4. | コメント:0

[UE4] Landscapeあれこれ 前編

今回はUE4の機能の1つであるLandscapeの作成の仕方、設定の流れなんかを解説しようと思います。
それほど難しいものではないのでドキュメントを見ておけば大抵問題ないかと思うのですが、備忘録的に書いておきます。
ドキュメントは以下を参照してください。

ランドスケープのクイックスタートガイド
https://docs.unrealengine.com/latest/JPN/Engine/Landscape/QuickStart/index.html
フォリッジ インスタンス化メッシュ
https://docs.unrealengine.com/latest/JPN/Engine/Foliage/index.html
Grass ツールのクイックスタート
https://docs.unrealengine.com/latest/JPN/Engine/OpenWorldTools/Grass/QuickStart/index.html

Landscapeは高さマップから生成される地形で、広大な地形を作成するのに向いています。
しかし、切り立った崖やオーバーハングした岩場などの作成には不向きです。
地形の基本的な地面はLandscapeで作成し、配置物や崖のようなものはモデルで作成するのが一般的だと思います。

Landscapeを作成するにはモードを[ランドスケープ]に変更します。最初の段階では下図のような画面が出てくるはずです。

ue347.jpg 

ラジオボタンで [新規作成] と [ファイルからインポート] の2つがありますが、[ファイルからインポート] を選択すると画像として作成された高さマップ(グレースケールの画像で、白が高い、黒が低いを表した画像)をインポートすることも出来ます。
今回は [新規作成] で新しいLandscapeを作成します。
なお、[フィルワールド] ボタンを押すと巨大なサイズのLandscapeが作成されます。オープンワールドのゲームを作る用って感じですね。
サイズを決定したら [作成] ボタンで作成します。

作成するとレベルエディタ上に板が表示されますが、これが初期のLandscapeです。
Landscapeはレベル上に複数作成することが出来ますが、作成すると上図の画面が出てこなくなってしまったはずです。
もう1つのLandscapeを作る場合、[管理] → [新規ランドスケープ] で同様のUIが表示されますので、同じ方法で作成してください。

Landscape作成後はスカルプトツールで形状を整えていきます。
スカルプトについてはアーティストさんの方が詳しいでしょうからここでは割愛します。
私が適当に作ったものはこんな感じ。

ue349.jpg

適当でもそれらしく見えます。
ちなみに、整えたあとはライティングビルドを行いましょう。行わないとブロックの境界線に影が入ったりして汚くなります。

さて、何もマテリアルが設定されてないと流石にちょっとどうかと思います。
ですので、Landscape用のマテリアルを作成しましょう。
続きからでマテリアルの作成を行い、ペイントをしていきましょう。


[[UE4] Landscapeあれこれ 前編]の続きを読む
  1. 2015/06/14(日) 12:38:04|
  2. UE4
  3. | トラックバック:0
  4. | コメント:0

[UE4] 物理マテリアルを使って足音を変化させる

ファミコンやスーパーファミコン時代はキャラクタの足音はあまり実装されていませんでしたが、最近の3Dゲームでは足音がないゲームを探すほうが難しいのではないでしょうか?
足音は発生させるキャラクタの種類によって音を変えたりすることがありますが(子供と大人、履いている靴によって足音は変わるので)、それ以上によくあるのは歩いている地面によって足音を変えることです。
草地とコンクリート、金属床では足音が違うのが当たり前で、全て同じだとやっぱり違和感が出てしまいます。

というわけで、今回はUE4の機能の1つである物理マテリアルを使って足音を変更する手段を記事にしました。
物理マテリアルは他にも、オブジェクトの物理挙動で反射の挙動なども変更できる機能です。

物理マテリアルを作成する前に、SurfaceTypeを設定する必要があります。
これはプロジェクトごとに設定できる機能ですので、メニューの [編集] → [プロジェクト設定] を開きます。
プロジェクト設定ウィンドウで [エンジン] → [Physics] を選択、[Physical Surface] の項目にいくつかのSurfaceTypeを設定しましょう。

ue337.jpg 

この設定を行わないと物理マテリアルを作成してもSurfaceTypeを設定できません。

さて物理マテリアルを作成しましょう。
[新規追加] → [フィジックス] → [物理マテリアル] で今回のための物理マテリアルを2つ作成します。

ue338.jpg

作成した物理マテリアルはそれぞれ [PM_Grass] と [PM_Metal] という名前にしておきます。
とりあえず [PM_Grass] をダブルクリックして編集ウィンドウを表示しましょう。
パラメータの [Physical Properties] → [Surface Type] のドロップダウンリストから Grass を選択します。
[PM_Metal] も同様に Metal を選択しましょう。

ue339.jpg

物理的な挙動を変更したい場合は [Friction] などのパラメータもいじるとよいでしょう。
今回は足音の問題なのでそれらのパラメータは編集しません。

この物理マテリアルはどこに設定するのかというと、実はけっこう色んな所に設定項目があったりします。
わかりやすいところではコリジョン関係があります。
StaticMeshであればStaticMeshの編集ウィンドウ内に、SkeletalMeshであれば物理アセットの編集ウィンドウ内にあります。
LandscapeにはLayerInfoの設定として存在しますし、レベル内に配置されているアクターにコリジョンに対して上書き可能な項目として存在しています。
今回はマテリアルに設定する項目として利用してみます。

まずは適当に草っぽいマテリアル、金属っぽいマテリアルを作成し(スターターコンテンツを利用してもよい)、詳細パネルで物理マテリアルを設定しましょう。

ue340.jpg

草マテリアルも金属マテリアルも同様に設定します。
レベル上に適当な床となるメッシュを配置し、草マテリアルと金属マテリアルをそれぞれに適用させてみましょう。

ここまでで物理マテリアルの設定は完了です。
これからアニメーション通知を利用して足音を発生させる処理を書いていきましょう。

[[UE4] 物理マテリアルを使って足音を変化させる]の続きを読む
  1. 2015/06/07(日) 17:55:35|
  2. UE4
  3. | トラックバック:1
  4. | コメント:0

[UE4] メッシュペイントあれこれ

たまにお世話になるわりに解説は行ってなかったな、と思ったのでメッシュペイントの話。

メッシュペイントとは、UE4上でメッシュに対して色を塗り、その色を利用してあれやこれややる機能です。
色をそのまま使うことはほとんどなく、主に複数のマテリアルパラメータ(ベースカラーやメタリックなど)のブレンドウェイトとして利用します。
ドキュメントに詳しく書いてありますので、参考にしてみてください。

メッシュペイントのユーザーガイド
https://docs.unrealengine.com/latest/JPN/Engine/UI/LevelEditor/Modes/MeshPaintMode/VertexColor/index.html

このガイドでは頂点ペイントについて書かれていますので、簡単に頂点ペイントについて書いてみます。

頂点ペイントはその名の通り、頂点にペイントする機能です。
ペイントしたカラーやアルファ値は頂点カラーとして利用できますので、マテリアルノードの [Vertex Color] を使って参照することが出来るようになります。
今回はわかりやすくするため、簡単なマテリアルで動作を確認してみましょう。

ue325.jpg

頂点カラーのRを利用して2つのテクスチャをブレンドしているだけです。
このマテリアルを貼り付けたメッシュを2つ、レベルに配置してみましょう。

ue326.jpg

見ての通り、どちらも草テクスチャが前面に出てきています。
頂点カラーはデフォルトではすべて1.0の白が入っているためです。

では頂点ペイントを行いましょう。
ペイントを行いたいメッシュを選択し、モードから [ペイント] を選択すると、モードタブが以下のようになります。

ue327.jpg

おすすめの編集方法としては、一旦頂点カラーを黒に塗りつぶします。
この手のペイントを処理する場合、ベースとなるマテリアルの上に何か別のマテリアルが存在する(岩の上の苔、一部が錆びた鉄など)として処理する場合が多く、その場合、白い部分が上に乗っているマテリアルと認識することが多くなるのではないかと思います。
今回のサンプルでも石のマテリアルの上に草を乗せる、という形で対応したいので、最初は石のマテリアルが見えていてほしいでしょう。
もちろん、マテリアル作成時に黒が草、白が石としてもいいのですが、なんとなく感覚的に違う印象がありますので、ベースを黒とします。

方法は簡単で、[塗り色] を黒に設定し、塗りつぶしボタンを押すだけです。

ue328.jpg

石のテクスチャだけが見える状態になったのでここからペイント開始です。

塗り色を白、チャンネルをレッドのみチェックにして3Dペイントツールのように塗り塗りしていきます。

ue329.jpg

塗り範囲の円内に頂点が入ると、その頂点の現在のカラーが表示されるのでわかりやすいです。

ここまででわかるかと思いますが、同じメッシュであっても頂点ペイントで生成される頂点カラーは別のものとして扱われます。
左のペイントしたメッシュと右のペイントされていないメッシュでは表現が別になっているのがわかるでしょう。
レベル内に配置されたメッシュは、ペイントされると元メッシュの頂点カラーとは別の頂点カラーが割り当てられるわけです。
この頂点カラーをすべてのメッシュに適用したい場合、塗りつぶしボタンの右のボタンを押すとすべてのメッシュに適用されます。

ue330.jpg

ただし、これは正確にはすべてのメッシュに適用するのではなく、元のメッシュを変更します。
元のメッシュが変更されているので、この後に配置された同一メッシュも同じように変更してしまっています。
レベル内のすべてのメッシュに適用、ではない点に注意してください。

というわけで頂点ペイントの話でしたが、続きからでテクスチャペイントの使い方を見て行きましょう。


[[UE4] メッシュペイントあれこれ]の続きを読む
  1. 2015/06/06(土) 10:42:32|
  2. UE4
  3. | トラックバック:0
  4. | コメント:0

プロフィール

monsho

Author:monsho
ゲームプログラマ?

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する