UE4 PLVのPersistent(パーシスタント)保存と読み込みの確認
PLV情報の保存について
UE4確認バージョン 4.21.2
PLV情報はライトビルドしたときのPersistentLevelに保存される
という話を聞いて、確認用の実験メモ。
※ここらの単語やニュアンス詳しくないので間違ってたら詳しい人
※裏から優しく指摘してください。
準備
完全になにもおかれていない空のLevelを2つ作成。
名前を
Persistent1
Persistent2
とする。
サードパーソンテンプレートから作成したLevelで
ライト関連をすべて除外した後、
StaticのPointLightを1つだけおいたマップを2つ作成する
名前を
SubLevel1 ※PointLightの色は赤色にしておく
SubLevel2 ※PointLightの色は青色にしておく
とする。
※この段階ではまだライトビルドはしない
次に
Persistent1にSubLevel1 を追加。
Persistent2にSubLevel2 を追加。
・SubLevel1を読み込んだ状態のPersistent1にてライトビルドをする。
・SubLevel2単体で開いた状態でライトビルドをする。
結果
Persistent1(PLV)+SubLevel1
SubLevel1
Persistent2+SubLevel2(PLV)
SubLevel2(PLV)
ヴィジュアライザでの確認
Persistent1(PLV)
SubLevel1(no PLV)
Persistent2(no PLV)
SubLevel2(PLV)
おまけ
SubLevel3を作成して緑色のPointLightを配置し、ライトビルドし
Persistent2に追加した場合。
予想される構成としては
Persistent2(no PLV) + SubLevel2(PLV) + SubLevel3(PLV)
キャラクターには緑色のみあたり、ライトビルドしなおせと怒られる。
(※PLV複数あった場合はマージされるはずだとおもったけど、なにか検証を間違えたのか、、)
ただ重なっているせいか、個別に表示すると確認はできる。
UE4のSequencer (シーケンサー)の「アクター差し替え」と「指定座標再生」
シーケンサーを使いまわそう
UE4確認バージョン 4.21.2
その要所要所で使い方が少しだけ違う場合など
毎回似たようなシーケンサーを作るのは面倒です。
なので一度作ったシーケンサーを使い回せるための方法を書いておきます。
準備
— カニパンチ (@CrabPunch) March 12, 2019
アクターを上下に動かすだけの簡単なシーケンサーを作成します。
レベルシーケンサーの作成は上記のもの1つだけで今回は終わりです。
今回はこれを使いまわします。
アクターの差し替え
同じカットシーンだけど、登場するキャラクターだけ変更したいなどといった場合など
以下の用にレベルブループリントを書いてみます。
— カニパンチ (@CrabPunch) March 12, 2019
指定座標再生
同じ内容だけど別の座標や向きで再生したい場合。
— カニパンチ (@CrabPunch) March 12, 2019
他に細々とした注意点や、
他の応用方法などもあるのですが
今回は簡単な説明となりますが以上となります、
Niagaraの入門(19) 自前payloadの追加
Niagaraの入門(19)
※なおこの段階ではNiagaraはアーリーアクセスなので
※今後内容がかわるかもしれないのでご注意ください
Event構造体
LocationやCollisionなどEvent通知時に決められたデータ構造体を投げていますが、
自前のイベント通知のために構造体の定義と追加方法を書きます。
構造体定義
まず新規に構造体を作成して、
中身を定義します。
Payloadタイプの追加
プロジェクト設定の
NiagaraSettingsのAdditional Payload Types
に先程作成した構造体を登録します。
こうすることによって、Module内などでEventのread writeやmakeなどで
構造体を使用することができます。
Niagaraの入門(18) Expression
Niagaraの入門(18)
※なおこの段階ではNiagaraはアーリーアクセスなので
※今後内容がかわるかもしれないのでご注意ください
Expressionについて
サンプルにある1つであるExpressionですが、
こちらはModuleなどの動作部分を計算式などで表現ができます。
内容としてはHLSL命令やNamespaceなどを直接しようしてパーティクルの表現をしています。
そのままパラメーターに計算式などを代入しようとしても上記と同じような入力はできません。
DynamicImputsのように右上の下▼からMake new expressionを選ぶことによって
上記のような入力ができます。
どこまで命令が使えるかは今回は調べていないので
下記の計算関連など打ち込んで確認してみてください。
https://msdn.microsoft.com/ja-jp/library/bb509611(v=vs.85).aspx
※個人的メモ
※変換の場所はFHlslNiagaraCompiler::CompileScript
エラー対処
わざとminなどで引数として3個なげてみます。
そうするとアウトプットログなどをみると
min(int,int,int)のエラーがでて
候補として使用できるものなどが表示してくれます。
Niagaraの入門(17) Collisionなどについて
Niagaraの入門(17)
UE4確認バージョン 4.20.1
※なおこの段階ではNiagaraはアーリーアクセスなので
※今後内容がかわるかもしれないのでご注意ください
Collisionなどについて
パーティクルの当たり判定の処理をして、
摩擦は反発などによってパーティクルの動きを定義するModule関連など
default pic.twitter.com/zJTv589p7c
— カニパンチ (@CrabPunch) August 19, 2018
CollisionQuery
コリジョンクエリID、位置、法線、摩擦、反発力などを返す。
ライントレース クエリを実行します。
このデータはその後、
CollisionLinearImpulse
CollisionAngularImpulse
にて使用されます。
ParticleFriction
パーティクルの摩擦係数
Friction [0] pic.twitter.com/Dg4vkQbAHF
— カニパンチ (@CrabPunch) August 19, 2018
Friction[10] pic.twitter.com/8sg0p52ZFw
— カニパンチ (@CrabPunch) August 19, 2018
ParticleRestitution
パーティクルの反発係数
Restitution[10] pic.twitter.com/lDkOz7Ary3
— カニパンチ (@CrabPunch) August 19, 2018
CollisionEnabled
コリジョン判定をするかどうか。
※コリジョンクエリが後続のCollisionModuleでCollision.Validを設定するためにはtrueでなければなりません。
Bpypass PhysicalMaterialProperties
チェックするとパーティクルの物理的なマテリアルプロパティを無視して、
摩擦係数と反発係数の設定のみを使用します。
CollisionSize
パーティクルのコリジョン半径
※Meshなどにしても関係なく、あくまで球体でのコリジョン半径のようです?
※コリジョンサイズ大きくしたら球体に球体が乗って停止とかはするけど、、
CollisionSize[100] pic.twitter.com/iyz8kmiN3l
— カニパンチ (@CrabPunch) August 19, 2018
Mesh Ver pic.twitter.com/If97pnvVYc
— カニパンチ (@CrabPunch) August 19, 2018
DepthBounds
トレースとバッファの しきい値。
CollisionLinearImpulse
力積。
反射やランダム。
摩擦により減衰処理などをおこないます。
DampenVelocity
衝突時の減衰具合。
Dampen[0] pic.twitter.com/qdSvqThn7y
— カニパンチ (@CrabPunch) August 19, 2018
Dampen[1] pic.twitter.com/h0pBmxhRb6
— カニパンチ (@CrabPunch) August 19, 2018
RandomizeCollisionVector
値は0-1の値。
衝突時のランダムベクトルをどれくらいにするかの値。
CollisionAngularImpulse
角力積。
衝突時の回転などを有効にします。
AngularImpulse pic.twitter.com/xARM63sxWg
— カニパンチ (@CrabPunch) August 19, 2018
Dampen
各衝突時に、どの程度の回転エネルギーが保持されるか
AngularDampen[0] pic.twitter.com/JKrp32fD7K
— カニパンチ (@CrabPunch) August 19, 2018
AngularDampen[1] pic.twitter.com/r1dE27J3Gu
— カニパンチ (@CrabPunch) August 19, 2018
ImpulseStrength
計算された回転軸に
修正する力具合。
Strength[0] pic.twitter.com/MScMKR41N6
— カニパンチ (@CrabPunch) August 19, 2018
Strength[1] pic.twitter.com/natOg6LLKh
— カニパンチ (@CrabPunch) August 19, 2018
VelocityMagnitudeCutoff
パーティクルが更に回転するかどうかの最小速度
Cutoff[0] pic.twitter.com/Sfp88evnnm
— カニパンチ (@CrabPunch) August 19, 2018
CollisionRest
コリジョンクエリに応答してパーティクルの再調整を処理する
(Rest内部)
ここでRestingフラグがたち
(LinearImpulse内部)
こちらでRestingフラグをみて位置調整をしているようです。
SampleCollisionをみてみる
上記のModule情報をもとに、
機能別サンプルのNiagaraのSampleCollisionをみていってみます。
Systemを開き、SimpleCollisionのみを有効にします。
白いパーティクルがでており、地面や他のオブジェクトに接触した時に
パーティクルが緑になっています。
Colorを見てみると、Particles.HasCollidedが変わった時にEndColorに変更されているのがわかります。
これはCollisionQueryの中で接触判定がされたときに立っていることがわかります。
(CollisionQuery内部の最後のほう)
次にSimpleCollisionHitを有効にしてみてみると
SimpleCollisionが接触イベントが発生したときに
スポーンしています。
以前お話したAdd Event HandleのLocationEventとほぼ同じですが
SimpleCollisionのほうにイベント発行のGenerateCollisionEventが
SimpleCollisionHitのほうにイベント受信の
ReceiveCollisionEventが設定されています。
最後のSimpleCollisionStickは上のほうで説明した
BpypassPhysicalMetarialPropertiesが有効になっており、
DampenVelocityやRandomが0にされており、
振り幅のないシンプルなコリジョンの軌跡が確認できます。
Niagaraの入門(16) SampleSpline
Niagaraの入門(16)
UE4確認バージョン 4.20.1
※なおこの段階ではNiagaraはアーリーアクセスなので
※今後内容がかわるかもしれないのでご注意ください
前置き
今回はSplineの実験をやろうとおもっていたのですが、
すでにAsh氏がチュートリアル的な動画を上げてくれているので
また今回もそれをなぞる形ですすめたいと思います。
あとスプライン関連の資料としてUnrealJapanStreamがわかりやすいと思います。
手順
新規Emitterを作成し、
さらにBPアクターを作成します。
BPの中にSplineコンポーネントを追加します。
好きなようにスプラインを引きます。
ParameterのUser.Spline(型はSpline)を作成します
Systemを作成してEmitterを登録します。
この段階でSplineの参照のSourceボックスがでるのですが
候補は出ますが、選択してもなにも残りません。
ひとまず、Level上にBPアクターを配置します。
この段階だとSourceの候補に配置したBPがでてくるのですが
まだ選んでも意味がありません。
次にNiagaraSystemをLevel上に配置してやり
その詳細パネルからSourceを選択してやります。
対象のActorとSystemが両方Level上にないと選択できないようです。
最後に自前でSplineを参照してその上を移動するModuleを作成します。
動画で出てくるEmitter.AgeはなぜかカテゴリがEngineから選べます
(カテゴリではなく、すでにEngine側で用意してるからこのカテゴリなんだろうか、、)
Spline上を移動するModuleは以下のように。
ふむふむ pic.twitter.com/XjfTHJJuWE
— カニパンチ (@CrabPunch) August 18, 2018
以上おしまい。
宇宙をかんじる、、 pic.twitter.com/Gi2n5v4Wm2
— カニパンチ (@CrabPunch) August 18, 2018
Niagaraの入門(15) Namespace「User」とNiagaraComponent
Niagaraの入門(15)
UE4確認バージョン 4.20.1
※なおこの段階ではNiagaraはアーリーアクセスなので
※今後内容がかわるかもしれないのでご注意ください
ParameterNamespaceの「User」について
以前お話したParametersのところにあるUserですが、
こちらはEmitterで作成するというよりはBlueprintから設定するためのもののようです。
使用例
新規Emitterを作成し、
いつものようにparameterを新規に作成User.Color
それをColorへ代入。
作成したEmitterをSystemに追加して、
新規にBPアクターを作成。
NiagaraコンポーネントにNiagaraSystemを設定します。
SetNiagaraVariable(LinearColor)にてUser.Colorを設定。
以上、おしまい。
NiagaraParameterCollectionとなにがちがうの?
前回と過程と結果が似ているので違いが分かりづらいですが。
Userは個々のNiagaraSystemに対して上書きするものです。
大抵の場合はこちらを使うことになるかと思います。
User pic.twitter.com/0G1Al0WJTL
— カニパンチ (@CrabPunch) August 16, 2018
対してNPCはLevel上のもの全てに対して上書きすることになります。
なので細かい調整はやりずらいかもしれませんが、
一括で指定できるのがメリットです。
主に風の向きや強さ、ライトの向きや重力方向の変更などでしょうか。
NPC pic.twitter.com/rWgn1LWQ87
— カニパンチ (@CrabPunch) August 16, 2018