アルゴンUE4/UE5&アプリ開発日記

UE4/UE5の機能やプラグインを紹介します。初心者や中級者向けになってます!!

【UE4】Ver4.20でProxyGeometryToolとHLODを合わせて試す!

UE4の4.20出ました~('ω')ノ

ついに正式リリース版として、4.20がリリースされました。

モデル編集だったり、IRサンプルなどのサンプルが充実したり、

いろいろな箇所が変化しました。

今回はアクターの結合を行ったり、新規LODを作成することで、

ドローコールを減らして最適化する際に利用される、

ProxyGeometryToolを紹介していけたらと思います。

ProxyGeometryToolはどういうことができるのか?

上のほうのタイトルでも少し話をしましたが、

ゲームを開発していく上で複数のアクターなどを、

配置したりする必要が出てくる時があるかと思います。

その際に複数のActorを結合して、新しいLODを作成したり

テクスチャ・マテリアルなどをまとめること負荷を軽減する。

ProxyGeometryではSimplygonと同じようなことを行えるようになっています。

SimplygonについてはこちらのURLで確認してみてください!

www.unrealengine.com

ProxyGeometryToolでマージアクターを試す

まずはProxyGeometryToolでマージアクターを試してみます。

UE4.20からProxyGeometryToolのマージアクターがデフォルトで使えます。

下の絵のStaticMeshをProxyGeometoryToolでマージしてみます。

頂点は合計で53万頂点程あります。

こちらをあらかじめレベル内に配置しておきます。

f:id:yoshikata1990:20180727061524p:plain

まずウィンドウのデベロッパーツール>マージアクタを選択します。

f:id:yoshikata1990:20180724233717p:plain

アクターをマージするための画面が出るので、

その中の真ん中のアイコンを選択します。

アウトライナ内に配置した先ほどのスタティックメッシュアクターを選択します。

f:id:yoshikata1990:20180727062922p:plain

これで右下にあるアクタをマージを選択すればマージできます。

マージしたした後と前のモデルを比べてみます。

頂点が3408まで低下しています。

f:id:yoshikata1990:20180727232808p:plain

頂点の多いスタティックメッシュやパーツがバラバラになっているものを、
まとめることでドローコールを削減したりすることもできるので、

多くのメッシュのアクターを呼び出してると感じたら、試してみてください。

実際にProxyGeometryToolで結合したものと結合前のパーツ全部並べた状態です。左が53万の頂点で右が3,408頂点になっています。

f:id:yoshikata1990:20180728004803p:plain

HLODでProxyGeometryを試してみる。

先ほどはアクターマージで行いましたが、

今度はHLODを使用した方法を行ってみようと思います。

まずはプロジェクト設定でHLODのメッシュ削減用のプラグイン設定します。

「hie」と検索すると「Hierarchical LOD Mesh Redution Plugin」が出る。

こちらを「ProxyLODMeshReduction」を選択します。

f:id:yoshikata1990:20180728161054p:plain

 プロジェクト設定が完了したら、ワールドセッティングから、

「Enable Hierarchical LOD System」をONにします。

※補足:

f:id:yoshikata1990:20180728165935p:plain

ウィンドウから階層LODアウトライナーを選択して、

「Hierarchical LODSetup」のHLODレベル内部にある「SimplifyMesh」にチェックを入れておきます。

※こちらにチェックを入れないとProxyを使用したLODになりません。

f:id:yoshikata1990:20180728175057p:plain

作成が完了すると、LODのレベル表示がある箇所に、

どれぐらい削減されているのかと元の三角ポリゴン数が表示されます。

今回は93456から1402まで削減できています。

f:id:yoshikata1990:20180728195303p:plain

実際にLODで表示したものがこちらになります。

LODを行う前(三角ポリゴンで93456)

f:id:yoshikata1990:20180728200946p:plain

LODを行う前(三角ポリゴンで1402)

f:id:yoshikata1990:20180728200249p:plain

遠目で見るとある形にほぼ変化がわからない感じになります。

微調整をすればもっときれいになります。(マテリアルとかLODの精度など)

LODのモデルについては階層LODアウトライナーのSaveAllから保存ができ、

Mapと同様の箇所にHLODというフォルダが作成されてそこに保存されます。

f:id:yoshikata1990:20180728201347p:plain

HLODを使用したProxyLODの使用方法については以上になります。

その他、UE4.20で行えるようになったこと

下のリンクで4.20の行える設定が増えています。

LODを深く知るためにも後で見ておこうと思います。

ImprovingNormals(法線の設定)

https://docs.unrealengine.com/en-US/Engine/ProxyGeoTool/ImprovingNormals

NormalCalculationMethod(ノーマルの計算方法)

https://docs.unrealengine.com/en-US/Engine/ProxyGeoTool/NormalCalculationMethod

FillingGap(遠目で見たときに内部を閉じるような設定)

https://docs.unrealengine.com/en-US/Engine/ProxyGeoTool/FillingGap

 

【UE4】Daydream第2弾・開発中につまずきそうになった情報まとめ

Daydream開発でつまずきまとめ

Daydreamの開発の中でつまずいた所と勘違いを紹介します。

第一弾でDaydreamの初期設定やボタンイベントについては、

下記リンクで紹介しています!

argonauts.hatenablog.jp

その1.StartCameraFadeが動作しない

そもそもStartCameraFadeが何かわからない人もいるかと思うので、

一応説明しておくと、簡単にFadeInやFadeOutを実装できるノードです。

f:id:yoshikata1990:20180617001601p:plainターゲットは必ず必要ですがこれだけで、画面全体にVR環境でも

画面にフェード処理を加えることができます。

しかしモバイル環境ではプロジェクトの設定により動作しないことがあります。

それは、MobileHDRがOFFの場合になります。

プロジェクト設定で「hdr」で検索して、チェックを入れてあげてください。

f:id:yoshikata1990:20180617021652p:plain

最初のプロジェクト作成の際にスケーラブルな3D・2Dを選択して作成すると、

自動的にMobileHDRがOFFになります。

f:id:yoshikata1990:20180617012840p:plain

スケーラブルな3D・2Dを選択するといろいろな設定がOFFになります。

MobileHDR以外にBloom(発光表現)やモーションブラーなどもOFFになるので注意が必要です。

f:id:yoshikata1990:20180617021244p:plain

その2.モーションコントローラーの角度とか位置とかどうとるの?

モーションコントローラーの角度などはGoogleVRMotionControllerの

コンポーネントがあるのでそこから取得するのかと思ったら、

コンポーネントが持つGetMotionControllerから取得します。

位置はGetWorldLocationで取得して、FowardVectorモーションコントローラーの前方方向の向きをとってきてます。

f:id:yoshikata1990:20180617032224p:plain

その3.公式で用意されているlaserを使用したい。

公式が用意している下の線みたいなのがあります。

これはMotionControllerの機能ではないので説明しておきます。

f:id:yoshikata1990:20180617222020p:plain

コンポーネントでGoogleVRLaserVisualというものがあり、

これで一応の表示はできます。

f:id:yoshikata1990:20180617222227p:plain

ただ、Googleの公式・UE4の公式のどちらにも説明が全く無く、

モーションコントローラーにアタッチしても追従しないので、

注意が必要です。

モーションコントローラーに追従させる場合、

私は面倒臭いことが嫌いなので必要に応じてアタッチします。

今回はこんな感じです。

f:id:yoshikata1990:20180617223334p:plain

最後に・・・まだまだできるはず・・・

GoogleVR用の説明できていないコンポーネントはあるが、

今回はここまでです。特に最後のほうはどこに説明がないので、

UE4でDaydreamを開発する人はぜひ参考にしてみてください。