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にされており、
振り幅のないシンプルなコリジョンの軌跡が確認できます。