UE4 PLVのPersistent(パーシスタント)保存と読み込みの確認

PLV情報の保存について

UE4確認バージョン  4.21.2

 

PLV情報はライトビルドしたときのPersistentLevelに保存される

という話を聞いて、確認用の実験メモ。

 

※ここらの単語やニュアンス詳しくないので間違ってたら詳しい人

※裏から優しく指摘してください。

 

準備

完全になにもおかれていない空のLevelを2つ作成。

 

名前を

Persistent1

Persistent2

とする。

 

f:id:CrabPunch:20190320122119p:plain

 

 

サードパーソンテンプレートから作成したLevelで

ライト関連をすべて除外した後、

StaticのPointLightを1つだけおいたマップを2つ作成する

 

名前を

SubLevel1  ※PointLightの色は赤色にしておく

SubLevel2       ※PointLightの色は青色にしておく

とする。

※この段階ではまだライトビルドはしない

f:id:CrabPunch:20190320122512p:plain

 

 

次に

Persistent1にSubLevel1 を追加。

Persistent2にSubLevel2 を追加。

 

 

・SubLevel1を読み込んだ状態のPersistent1にてライトビルドをする。

・SubLevel2単体で開いた状態でライトビルドをする。

 

 

結果

Persistent1(PLV)+SubLevel1 

f:id:CrabPunch:20190320124212p:plain

 

 

SubLevel1

f:id:CrabPunch:20190320124254p:plain


 

 

Persistent2+SubLevel2(PLV)

f:id:CrabPunch:20190320124321p:plain

 

 

SubLevel2(PLV)

f:id:CrabPunch:20190320124344p:plain

 

ヴィジュアライザでの確認

Persistent1(PLV)

f:id:CrabPunch:20190320124650p:plain

SubLevel1(no PLV)

f:id:CrabPunch:20190320124716p:plain

 

Persistent2(no PLV)

f:id:CrabPunch:20190320124822p:plain

 

SubLevel2(PLV)

f:id:CrabPunch:20190320124913p:plain

 

おまけ

SubLevel3を作成して緑色のPointLightを配置し、ライトビルドし

Persistent2に追加した場合。

 

予想される構成としては

Persistent2(no PLV) + SubLevel2(PLV) + SubLevel3(PLV)

 

キャラクターには緑色のみあたり、ライトビルドしなおせと怒られる。

 

(※PLV複数あった場合はマージされるはずだとおもったけど、なにか検証を間違えたのか、、)

f:id:CrabPunch:20190320125837p:plain

 

ただ重なっているせいか、個別に表示すると確認はできる。

f:id:CrabPunch:20190320125915p:plain

 

 

f:id:CrabPunch:20190320125929p:plain

 

 

UE4のSequencer (シーケンサー)の「アクター差し替え」と「指定座標再生」 

シーケンサーを使いまわそう

UE4確認バージョン  4.21.2

 

UE4でのシーケンサーを作成した後、

その要所要所で使い方が少しだけ違う場合など

毎回似たようなシーケンサーを作るのは面倒です。

なので一度作ったシーケンサーを使い回せるための方法を書いておきます。

 

準備

f:id:CrabPunch:20190313061544p:plain

f:id:CrabPunch:20190313061653p:plain

 

アクターを上下に動かすだけの簡単なシーケンサーを作成します。

レベルシーケンサーの作成は上記のもの1つだけで今回は終わりです。

今回はこれを使いまわします。

アクターの差し替え

同じカットシーンだけど、登場するキャラクターだけ変更したいなどといった場合など

 

 

以下の用にレベルブループリントを書いてみます。

f:id:CrabPunch:20190313061631p:plain

 

 

 

 

 

指定座標再生

同じ内容だけど別の座標や向きで再生したい場合。

f:id:CrabPunch:20190313062025p:plain

f:id:CrabPunch:20190313214346p:plain

 

 

 

他に細々とした注意点や、

他の応用方法などもあるのですが

今回は簡単な説明となりますが以上となります、

 

Niagaraの入門(19) 自前payloadの追加

Niagaraの入門(19)

UE4確認バージョン  4.20.1

※なおこの段階ではNiagaraはアーリーアクセスなので

※今後内容がかわるかもしれないのでご注意ください

Event構造体

LocationやCollisionなどEvent通知時に決められたデータ構造体を投げていますが、

自前のイベント通知のために構造体の定義と追加方法を書きます。

 

構造体定義

まず新規に構造体を作成して、

f:id:CrabPunch:20180826085349p:plain

中身を定義します。

f:id:CrabPunch:20180826085400p:plain

 

Payloadタイプの追加

プロジェクト設定の

NiagaraSettingsのAdditional Payload Types

に先程作成した構造体を登録します。

f:id:CrabPunch:20180826085509p:plain

 

こうすることによって、Module内などでEventのread writeやmakeなどで

構造体を使用することができます。

f:id:CrabPunch:20180826085616p:plain

 

 

Niagaraの入門(18) Expression

Niagaraの入門(18)

UE4確認バージョン  4.20.1

※なおこの段階ではNiagaraはアーリーアクセスなので

※今後内容がかわるかもしれないのでご注意ください

Expressionについて

サンプルにある1つであるExpressionですが、

こちらはModuleなどの動作部分を計算式などで表現ができます。

f:id:CrabPunch:20180826081348p:plain

 

内容としてはHLSL命令やNamespaceなどを直接しようしてパーティクルの表現をしています。

f:id:CrabPunch:20180826081400p:plain

 

そのままパラメーターに計算式などを代入しようとしても上記と同じような入力はできません。

 

DynamicImputsのように右上の下▼からMake new expressionを選ぶことによって

上記のような入力ができます。

f:id:CrabPunch:20180826081757p:plain

 

どこまで命令が使えるかは今回は調べていないので

下記の計算関連など打ち込んで確認してみてください。

https://msdn.microsoft.com/ja-jp/library/bb509611(v=vs.85).aspx

 

※個人的メモ

※変換の場所はFHlslNiagaraCompiler::CompileScript

 

エラー対処

わざとminなどで引数として3個なげてみます。

f:id:CrabPunch:20180826082405p:plain

そうするとアウトプットログなどをみると

min(int,int,int)のエラーがでて

候補として使用できるものなどが表示してくれます。

f:id:CrabPunch:20180826082459p:plain

 

 

Niagaraの入門(17) Collisionなどについて

Niagaraの入門(17)

UE4確認バージョン  4.20.1

※なおこの段階ではNiagaraはアーリーアクセスなので

※今後内容がかわるかもしれないのでご注意ください

Collisionなどについて

パーティクルの当たり判定の処理をして、

摩擦は反発などによってパーティクルの動きを定義するModule関連など

f:id:CrabPunch:20180819144617p:plain

 

 

 

 

CollisionQuery

コリジョンクエリID、位置、法線、摩擦、反発力などを返す。

ライントレース クエリを実行します。
このデータはその後、
CollisionLinearImpulse

CollisionAngularImpulse

にて使用されます。

ParticleFriction

パーティクルの摩擦係数

 

 

 

 

ParticleRestitution

パーティクルの反発係数

 

 

CollisionEnabled

コリジョン判定をするかどうか。

コリジョンクエリが後続のCollisionModuleでCollision.Validを設定するためにはtrueでなければなりません。

 

Bpypass PhysicalMaterialProperties

チェックするとパーティクルの物理的なマテリアルプロパティを無視して、
摩擦係数と反発係数の設定のみを使用します。

 

CollisionSize

パーティクルのコリジョン半径

※Meshなどにしても関係なく、あくまで球体でのコリジョン半径のようです?

コリジョンサイズ大きくしたら球体に球体が乗って停止とかはするけど、、

 

 

 

 

DepthBounds

デプスバッファ(GPU)でのコリジョン判定をおこなう場合の

トレースとバッファの しきい値

 

CollisionLinearImpulse

力積。

反射やランダム。

摩擦により減衰処理などをおこないます。

 

DampenVelocity

衝突時の減衰具合。

 

 

 

 

 

RandomizeCollisionVector

値は0-1の値。

衝突時のランダムベクトルをどれくらいにするかの値。

CollisionAngularImpulse

角力積。

衝突時の回転などを有効にします。

 

 

Dampen

各衝突時に、どの程度の回転エネルギーが保持されるか

 

 

 

 

 

ImpulseStrength

計算された回転軸に

修正する力具合。

 

 

 

 

 

VelocityMagnitudeCutoff

パーティクルが更に回転するかどうかの最小速度

 

 

 

CollisionRest

コリジョンクエリに応答してパーティクルの再調整を処理する

(Rest内部)

ここでRestingフラグがたち

f:id:CrabPunch:20180819152442p:plain

 

 (LinearImpulse内部)

こちらでRestingフラグをみて位置調整をしているようです。

f:id:CrabPunch:20180819152454p:plain

 

SampleCollisionをみてみる

上記のModule情報をもとに、

機能別サンプルのNiagaraのSampleCollisionをみていってみます。

f:id:CrabPunch:20180819152649p:plain

 

Systemを開き、SimpleCollisionのみを有効にします。

白いパーティクルがでており、地面や他のオブジェクトに接触した時に

パーティクルが緑になっています。

f:id:CrabPunch:20180819152746p:plain

f:id:CrabPunch:20180819152858p:plain

 

Colorを見てみると、Particles.HasCollidedが変わった時にEndColorに変更されているのがわかります。

これはCollisionQueryの中で接触判定がされたときに立っていることがわかります。

(CollisionQuery内部の最後のほう)

f:id:CrabPunch:20180819152910p:plain

 

 

 次にSimpleCollisionHitを有効にしてみてみると

SimpleCollisionが接触イベントが発生したときに

スポーンしています。

f:id:CrabPunch:20180819152813p:plain

 

以前お話したAdd Event HandleのLocationEventとほぼ同じですが

SimpleCollisionのほうにイベント発行のGenerateCollisionEventが

 

f:id:CrabPunch:20180819153149p:plain

 

SimpleCollisionHitのほうにイベント受信の

ReceiveCollisionEventが設定されています。

f:id:CrabPunch:20180819153118p:plain

 

 最後のSimpleCollisionStickは上のほうで説明した

BpypassPhysicalMetarialPropertiesが有効になっており、

DampenVelocityやRandomが0にされており、

振り幅のないシンプルなコリジョンの軌跡が確認できます。

f:id:CrabPunch:20180819153212p:plain

f:id:CrabPunch:20180819153224p:plain

Niagaraの入門(16) SampleSpline

Niagaraの入門(16)

UE4確認バージョン  4.20.1

※なおこの段階ではNiagaraはアーリーアクセスなので

※今後内容がかわるかもしれないのでご注意ください

 

f:id:CrabPunch:20180818143748p:plain

前置き

 今回はSplineの実験をやろうとおもっていたのですが、

すでにAsh氏がチュートリアル的な動画を上げてくれているので

また今回もそれをなぞる形ですすめたいと思います。

vimeo.com

 

あとスプライン関連の資料としてUnrealJapanStreamがわかりやすいと思います。

www.youtube.com

手順

新規Emitterを作成し、

さらにBPアクターを作成します。

f:id:CrabPunch:20180818143821p:plain

 

BPの中にSplineコンポーネントを追加します。

f:id:CrabPunch:20180818143925p:plain

 

好きなようにスプラインを引きます。

f:id:CrabPunch:20180818143940p:plain

 

ParameterのUser.Spline(型はSpline)を作成します

f:id:CrabPunch:20180818143955p:plain

 

Systemを作成してEmitterを登録します。

この段階でSplineの参照のSourceボックスがでるのですが

候補は出ますが、選択してもなにも残りません。

f:id:CrabPunch:20180818144006p:plain

 

 ひとまず、Level上にBPアクターを配置します。

f:id:CrabPunch:20180818144019p:plain

 

この段階だとSourceの候補に配置したBPがでてくるのですが

まだ選んでも意味がありません。

f:id:CrabPunch:20180818144031p:plain

 

次にNiagaraSystemをLevel上に配置してやり

その詳細パネルからSourceを選択してやります。

対象のActorとSystemが両方Level上にないと選択できないようです。

f:id:CrabPunch:20180818144043p:plain

 

最後に自前でSplineを参照してその上を移動するModuleを作成します。

動画で出てくるEmitter.AgeはなぜかカテゴリがEngineから選べます

(カテゴリではなく、すでにEngine側で用意してるからこのカテゴリなんだろうか、、)

f:id:CrabPunch:20180818144100p:plain

 Spline上を移動するModuleは以下のように。

f:id:CrabPunch:20180818144110p:plain

 

 以上おしまい。

 

 

 

 

 

Niagaraの入門(15) Namespace「User」とNiagaraComponent

Niagaraの入門(15)

UE4確認バージョン  4.20.1

※なおこの段階ではNiagaraはアーリーアクセスなので

※今後内容がかわるかもしれないのでご注意ください

ParameterNamespaceの「User」について

 以前お話したParametersのところにあるUserですが、

こちらはEmitterで作成するというよりはBlueprintから設定するためのもののようです。

 

使用例

新規Emitterを作成し、

いつものようにparameterを新規に作成User.Color

それをColorへ代入。

f:id:CrabPunch:20180816220740p:plain

 

 

作成したEmitterをSystemに追加して、

新規にBPアクターを作成。

f:id:CrabPunch:20180816220757p:plain

 

BPの中身に、Niagaraコンポーネントを追加。

f:id:CrabPunch:20180816220802p:plain

 

NiagaraコンポーネントにNiagaraSystemを設定します。

f:id:CrabPunch:20180818125053p:plain

 

BPの開始時あたりにNiagaraコンポーネントに対して

SetNiagaraVariable(LinearColor)にてUser.Colorを設定。

f:id:CrabPunch:20180816220810p:plain

 

以上、おしまい。

f:id:CrabPunch:20180816220819p:plain

 

 

NiagaraParameterCollectionとなにがちがうの?

 前回と過程と結果が似ているので違いが分かりづらいですが。

Userは個々のNiagaraSystemに対して上書きするものです。

大抵の場合はこちらを使うことになるかと思います。

 

 

対してNPCはLevel上のもの全てに対して上書きすることになります。

なので細かい調整はやりずらいかもしれませんが、

一括で指定できるのがメリットです。

主に風の向きや強さ、ライトの向きや重力方向の変更などでしょうか。