とあるゲームプログラマの挑戦と敗北の歴史

UE4とプログラミングとmayaとpythonとhtmlとマラソンを中心に情報を発信する元「技術ブログを目指すブログ」から再始動した毎日の日々を発信するブログです。

UE4:オンラインラーニング(よりよいパイプラインの構築)

UE4オンラインラーニング
よりよいパイプラインの構築
を受講した際のおぼえ書きです。

https://learn.unrealengine.com/course/2503775



オススメの命名規則があります
一例です
SM_:スタティックメッシュ
T_:テクスチャ
SKM_:スケルタルメッシュ
_N:ノーマルマップ


テクスチャの詳細
リソースサイズ、ミップ数などを確認できます。
f:id:toncrimentan_w:20210209134120p:plain



UIテクスチャの設定方法
最高画質で表示する必要があるため
圧縮設定をUserInterfae2Dにする必要があります。(VectorDisplacementでも○)
最高画質で表示するためリソースサイズがはね上がります。
(ひょっとしたらテクスチャグループもUIにする必要があるかも)
f:id:toncrimentan_w:20210209134353p:plain



DCCツールでの作成のコツ
MayaやMaxで作成する際はポリゴン数を気にしながら作るべき
なお単位は1cm=1unreal単位です。
f:id:toncrimentan_w:20210209134602p:plain



マテリアルID数
マテリアルID数が2つある場合2回描画されます。
あらかじめマテリアルID数を決めておくことをオススメします。
例)
・小道具(マテリアルID数は1つ)
・キャラ(マテリアルID数は2つ3つ)
・マップ(壁や天井ごとに1つずつ)
f:id:toncrimentan_w:20210209134747p:plain



エディタでの起動ショートカット
・レベルで対象のアクターを選択
・Ctrl+Eでエディタを起動できます。
f:id:toncrimentan_w:20210209134959p:plain



UVの確認方法
スタティックメッシュエディタのUVの確認方法
f:id:toncrimentan_w:20210209135157p:plain



置く前のデフォルトライトマップ解像度の指定方法 と
置いた後の上書きするライトマップ解像度の指定方法
f:id:toncrimentan_w:20210209135325p:plain



リソースからコリジョンの追加方法
DCCツール上でUCX_○○という名称でポリゴンを作っておいて
インポートしたときにコリジョンを追加する方法があります。
f:id:toncrimentan_w:20210209135623p:plain



エディタ上でボックスコリジョンの追加方法
コリジョン>ボックス単純化コリジョンを追加を選択
そこから移動や回転などを行い設定することができます。
f:id:toncrimentan_w:20210209135720p:plain



エディタ上でオートコンベックスコリジョンの追加方法
細かくコリジョンをつけることも可能です。
コリジョン>オートコンベックスコリジョンを選択、
適応ボタンをクリック、
で自動で細かくポリゴンを作成することができます。
f:id:toncrimentan_w:20210209135836p:plain



LODメッシュを作成する手法についても学べます。



スタティックメッシュFBXインポート時のオススメ設定
(あくまでもepicの方のオススメ設定です。)
・GenerateMisingCollisionでコリジョン有効化
・GenerateLitemapUVsをON
・TransformVertextoAbsoluteで原点にあわせる
・ImportTexturesでテクスチャインポート
f:id:toncrimentan_w:20210209140154p:plain



スケルタルメッシュFBXインポート時のオススメ設定
(あくまでもepicの方のオススメ設定です。)
・SkletalMeshでスケルタルメッシュ指定
・ImportAnimationsでアニメーションインポート
・ImportTexturesはOFF
f:id:toncrimentan_w:20210209140229p:plain



再インポート手順
コンテンツブラウザのドロップしなおすというのが一つのやり方。
右クリック>再インポートでも可能
ファイルパスはアセット自体に保存されている
f:id:toncrimentan_w:20210209144923p:plain



スイッチ系ノード
マテリアルBPではスイッチ系のノードを利用することで
描画パイプラインの流れを分岐することができます。
例)
・StaticSwitchParameter
・StaticSwitch
f:id:toncrimentan_w:20210209202916p:plain



マテリアル製作のコツ
マスターマテリアルを作成し
アーティストが最もよく変更したいパラメータを特定し
マテリアルインスタンスをつくるのがコツです。
そうすれば、シェーダーの肥大化を防ぎメンテナンスコストを下げることができます。

マテリアル関数
マテリアル関数とはマテリアルBPから呼ぶことができる関数です。
コンテンツブラウザを右クリック>マテリアル・テクスチャ>マテリアル関数
でつくることができます。
f:id:toncrimentan_w:20210209203337p:plain

FunctionInputノード
マテリアル関数ではFunctionInputノードを利用し入力を取得します。
・FunctionInputノードを作成
・InputTypeをFunctionInputScalarに変更
・例としてPrevieValueを1 0 0 1にする。
f:id:toncrimentan_w:20210209203458p:plain

マテリアル関数の呼び出し
マテリアルBPではこんな感じに呼び出すことができます。
入力はFunctionInputノードで指定した値
f:id:toncrimentan_w:20210209203841p:plain

コース通りの製作すると2つのマテリアルが出来上がりました。
マスターマテリアル)
f:id:toncrimentan_w:20210209204314p:plain
グラスマテリアル)
f:id:toncrimentan_w:20210209204347p:plain

マテリアルインスタンスでパラメータのみ変更することができます。
f:id:toncrimentan_w:20210209204449p:plain
一般>マテリアルプロパティのオーバーライド>TwoSided
をチェックすれば両面表示も実現できます。

※注意点
BlendMode ShadingModel なども変更できるがこちらは注意が必要です。
親マテリアルの本来の目的にそぐわないためです。
基本的にはここはアイディアを試すとき用であって、最終的には使うべきではないです。
f:id:toncrimentan_w:20210209204723p:plain



SimpleGrassWindノード
SimpleGrassWindノードで風をシミュレートすることができます。
f:id:toncrimentan_w:20210209211505p:plain



コース通りに進めるとこのような風になびく木のマテリアルが作れます。
・BlendModeをMasked
・TwoSidedにチェック
・SimpleGrassWindノードで風をシミュレート
f:id:toncrimentan_w:20210209211345p:plain
f:id:toncrimentan_w:20210209211630p:plain



コンソールコマンドの実行
日本語キーボードは@を押すことでコンソールコマンドを実行できます。
※いろいろなレクチャーではバッククォートとかチルダとかいろいろ所説ありますが、
 日本語キーボードの方は@だったらしい
f:id:toncrimentan_w:20210209213528p:plain



テクスチャストリーミングサイズの指定コマンド
r.Streaming.PllsSize=5000



UI用最高解像度テクスチャの指定方法
・圧縮設定をUserInterface2D
・NeverStreamにチェックを入れる
以上により常に最高解像度のテクスチャが利用できます。
これはUIなどに利用するべきものでパフォーマンスに影響があるので注意が必要です。
f:id:toncrimentan_w:20210209213623p:plain



スタティックメッシュのLOD
スタティックメッシュを開きこの辺の指定でやるとのこと
f:id:toncrimentan_w:20210209234629p:plain



アクターのマージツール
アクター同時をマージしてメッシュもマテリアルも1つにする機能があります。

ウィンドウ>デベロッパーツール>アクタをマージをクリックし
アクタをマージツールを起動
f:id:toncrimentan_w:20210209235657p:plain
アウトライナからマージしたいスタティックメッシュを選択
f:id:toncrimentan_w:20210209234911p:plain
マージしたいメッシュがリストアップされているので
・0のピボットポイントにチェック
・LOD選択タイプをUse specific LOD levelを選択
・ソースアクタを置換にチェックを入れない
f:id:toncrimentan_w:20210209234946p:plain
マテリアルもマージしたい場合は
・マテリアルのマージにチェック
・テクスチャサイズを指定(例:256x256)
f:id:toncrimentan_w:20210209235142p:plain
アクタをマージボタンをクリックし
出力先フォルダと出力先ファイルを選択し保存
f:id:toncrimentan_w:20210209235255p:plain
長い出力処理ののち
メッシュ、マテリアルともに1つにすることができる。
f:id:toncrimentan_w:20210209235409p:plain
レベルに配置し、0 0 0に移動させればこのとおり(ボケボケですが)
f:id:toncrimentan_w:20210209235421p:plain



階層LODアウトライナー
ウィンドウ>階層LODアウトライナー
でLODの調整ができます。
f:id:toncrimentan_w:20210209235604p:plain



ライティング品質
ビルド横の▽からライティング品質
で変更できます。
f:id:toncrimentan_w:20210210004356p:plain



距離に応じたシャドウの動的更新
・LightSourceを選択
・DynamicShadowDistanceStationaryの値を調整
で距離に応じた動的なシャドウの更新の有無を変更することができる
近い時:動的更新
遠い時:更新しない
f:id:toncrimentan_w:20210210004415p:plain


ポストプロセスボリューム
InfiniteExtendにチェックをいれることで
レベルのどこにいても有効なボリュームにできる
f:id:toncrimentan_w:20210210004626p:plain



アンチエイリアス指定
プロジェクト設定のレンダリングアンチエイリアス手法
から変更できる
f:id:toncrimentan_w:20210210004706p:plain



ボリュームライティングサンプル
ビューポートの
表示>視覚化>ボリュームライティングサンプル
にチェックをいれることでどの位置で何色が適応されるかを視覚化することができます。
f:id:toncrimentan_w:20210210103415p:plain



カリング距離ボリューム
指定したしきい値によりカメラが多く離れたらボリューム内の
アクタをしきい値に応じて非表示にする機能です。
f:id:toncrimentan_w:20210210103709p:plain



反射について
ビューポートのから反射に切り替えることで視覚化できます。
f:id:toncrimentan_w:20210210103930p:plain

ボックス反射キャプチャ、スフィア反射キャプチャを配置し
反射を表現することができます。
※10回中9回はスフィアキャプチャを使うことになります。
 ボックスは主に廊下などでのみ利用できます。

f:id:toncrimentan_w:20210210104056p:plain

平面反射は一番高負荷な反射です。
事前にプロジェクト設定の
レンダリング>平面反射のグローバルクリッププレーンをサポートに
チェックを入れて再起動しておく必要があります。
f:id:toncrimentan_w:20210210104358p:plain
御覧のように非常に精度の高い反射を実現できます。
※平面反射はメッシュが一つ多いとその分多くなってしまいます。
 非常に高負荷なしくみです。
f:id:toncrimentan_w:20210210104417p:plain

f:id:toncrimentan_w:20210210104428p:plain



非常に学びの多いコースだった。長かった
マテリアルBP、マテリアルインスタンス、マテリアル関数について解説があります。
パフォーマンス改善のための
LOD、ミップマップ、アクタのマージ、シャドウ、カリング距離ボリュームなど
あらゆる角度からの改善策や製作していく上での注意点に関して解説があります。