Apple Engine

Apple, iPhone, iOS, その周辺のことについて

iOS で SceneKit を試す(Swift 3) その78 - パーティクルシステムのパラメーターをみてみる

パーティクルシステムのパラメーターをみてゆく。

ちなみに、画像を設定しないと Scene Editor 上で、何も表示されない場合があるので注意。

 

Scene Editor の Attributes Inspector での表示

f:id:x67x6fx74x6f:20170823201446p:plain

 

Δ=0 となっているものは、コードでは Variation と呼ばれているもの。

ここで設定した値は、時間に応じてその値の幅をプラスマイナスの値でランダムに加算する。

Image Size を 5、Birth rate の Variation 8 にした場合、 Variation が ±4 されるためフレーム毎 1〜9 の値で生成される。

Variation のデフォルト値は 0。

 

Emitter

f:id:x67x6fx74x6f:20170824100235p:plain

 

Birth rate (birthRate / birthRateVariation)

emissionDuration の設定時間中にパーティクルをどのぐらい発生させるかを決める値。
デフォルト値は 100。Variation あり。

birthRateVariation を指定しない場合で、birthRate を 0 にするとパーティクルが放出されなくなるので注意。

 

Warmup duration (warmupDuration)

パーティクルが生成開始される時間。
デフォルト値は 0。

例えば 10 に設定するとパーティクルアニメーション再生 10 後から表示する。 雨とか雪とか降り始めではなく、降っている状態から、表示するなど。

 

Location (birthLocation)

パーティクルを放出する場所の指定する。
ジオメトリの表面か、ジオメトリの体積となる部分か、頂点かを決める。

デフォルト値は surface で表面から放出される。

 

Emission space

Scene Editor のみ。
World space、Local space が設定でき、エミッターの位置をワールドかローカル座標で決める。

デフォルト値は World space。

 

Direction mode (birthDirection)

パーティクルを放出する方向。
コードで設定する場合、emitterShape が設定されていないと動作しないものがある。

設定は一定方向に放出する constant、emitterShape で設定されたジオメトリの表面を使用する surfaceNormal、 ランダム方向から放出する random。

デフォルト値は constant。 Scene Editor では random。

 

Spreading angle (spreadingAngl)

birthDirection を constant か surfaceNormal に設定した場合、個々のパーティクルを放射する角度を設定することがで、 値を設定するとその角度ないでラインダムな方向で放出される。

デフォルト値は 0

random に設定している場合、この設定は無視される。

 

Direction (emittingDirection)

birthDirection を constant に設定した場合は、パーティクルを放射する方向を設定することができる。

デフォルト値は (x:0.0, y:0.0, z:1.0)
Scene Editor では (x:0.0, y:1.0, z:0.0)

 

Initial angle (particleAngle / particleAngleVariation)

放出するパーティクル画像の回転角度。
Variation あり。

デフォルト値は 0 で画像は回転されずに放出される。

 

Shape (emitterShape)

放出するパーティクルのエミッターの形状をジオメトリで指定する。

コードの場合は、前回行ったように SCNGeometry として代入する。

 

Scene Editor での値は以下のもの。

パラメーター名 設定値 説明
Box width, height, lenght SCNBox のジオメトリを使用する
Cylinder radius, height SCNCylinder のジオメトリを使用する
Plane width, height SCNPlane のジオメトリを使用する
Point なし 1つの頂点から放出する。デフォルト値
Sphere radius SCNSphere のジオメトリを使用する
Other 不明 設定不能。やり方があったら教えて欲しい

 

Simulation

f:id:x67x6fx74x6f:20170824100312p:plain

 

Life Span (particleLifeSpan / particleLifeSpanVariation)

各パーティクルが生成され、シーンから削除されるまでの表示時間を設定。
Variation あり。

デフォルト値は 1.0。

 

Linear velocity (particleVelocity / particleVelocityVariation)

各パーティクルの生成時の速度。
Variation あり。

デフォルト値は 0.0。

 

Angular velocity (particleAngularVelocity / particleAngularVelocityVariation)

各パーティクルの回転角度を決める。
Variation あり。

orientationMode で回転方法変更可能。

 

Acceleration (acceleration)

加速度ベクトルを付加し簡易的な物理シミュレーションを施す。
単位は毎秒/秒。

デフォルト値は (x:0.0, y:0.0, z:0.0)

複雑な物理シミュレーションを行いたい場合は Affected by gravity、または Affected by physics fields をオン。
もしくは、コードで isAffectedByGravity、または isAffectedByPhysicsFields、を true にする。

 

Speed factor (speedFactor)

アニメーションスピードを変更する。

デフォルト値は 1。

パラメーターは乗数となっているため 2 にするとアニメーションスピードは倍になる。

 

Stretch factor (stretchFactor)

パーティクルの画像を動きの方向によって引き伸ばす設定。

デフォルト値は 0.0 値。

  

Image

f:id:x67x6fx74x6f:20170824100343p:plain

 

Image (particleImage)

パーティクル画像を設定する。

 

同サイズで左〜右、上〜下に並べた画像をつくりこちらに適応。
Image Sequence で設定をすることで、アニメーションするパーティクルを作成することができる。

f:id:x67x6fx74x6f:20170823201916p:plain

particleImage - SCNParticleSystem | Apple Developer Documentation

 

Color (particleColor)

パーティクル画像に色をつける。

Animate Color

Scene Editor のみの値。

チェックをオンにするとパーティクルが発生して消滅する間の色を設定しそれに沿ってアニメーションさせる。

f:id:x67x6fx74x6f:20170823202815p:plain

 

Color variation (particleColorVariation)

指定した色の間でランダムに変化させる。

SCNVector4 となってをり HSB(HSV) 色設定と アルファとなっている。 よって、4つのパラメーターは色相、彩度、明度、アルファ値となる。

 

Size (particleSize / particleSizeVariation)

パーティクル画像の大きさを変更できる。 Variation あり。

デフォルト値は 1.0。

 

Custom Animation

Scene Editor のみの機能。

歯車のボタンをクリックすることで消滅するまでのアニメーションタイミングを設定できる。

f:id:x67x6fx74x6f:20170823202652p:plain    

Image Sequence

f:id:x67x6fx74x6f:20170824100418p:plain

 

Initial frame (imageSequenceInitialFrame / imageSequenceInitialFrameVariation)

連続した画像のアニメーションをどのフレームから始めるかを決める。
Variation あり。

デフォルト値は 0 で画像左上から表示する。

 

Frame rate (imageSequenceFrameRate / imageSequenceFrameRateVariation)

連続した画像のアニメーションのフレームレートを決める。
Variation あり。

デフォルト値は 0 でアニメーションを行わない。

そのため、このパラメータを設定しないとアニメーションが再生されない。

 

Aniamtion (imageSequenceAnimationMode)

アニメーションがどうのように行われるか設定する。

 

設定値は以下のもの。

パラメーター名 説明
repeat 繰り返し再生する。デフォルト値
clamp 再生後停止
autoReverse 再生・逆再生を繰り返す

 

Dimentions - Row (imageSequenceRowCount)

アニメーション画像の行数。

デフォルト値は 0。

 

Dimentions - Columns (imageSequenceColumnCount)

アニメーション画像の列数。

デフォルト値は 0。

 

Rendering

f:id:x67x6fx74x6f:20170824100445p:plain

 

Blending (blendMode)

パーティクルが重なり合った時、画像のブレンドモードを設定する。

設定値はマテリアルと同じ、additive、subtract、multiply、screen、alpha、replace。

デフォルト値は additive。

 

Enable black pass (isBlackPassEnabled)

パーティクルの裏に黒色を重ねコントラストを高くする。
画面上に白身が多いと ブレンドモードなどによってはパーティクルが見えなくなるため。

デフォルト値は false。

こちらを使用すると、パーティクルのレンダリング処理が 2 回行われるのでパフォーマンスを優先したい場合など注意して使う。

 

Orientation (orientationMode)

パーティクル画像がどうのような向き出表示されるか設定する。

 

設定値は以下のもの。

パラメーター名 説明
billboardScreenAligned 画像が必ずカメラに向く。デフォルト値
billboardViewAligned 画像がカメラに向くが平行な軸で回転する
free 自由に回転する。向きによってはパーティクル画像が見えなくなるので注意
billboardYAligned Y 軸方向のみ、カメラに対して常に固定される

 

Sorting (sortingMode)

blendMode とともに、レンダリング時に重なり合ったパーティクルイメージの見た目を決める。

 

設定値は以下のもの。

パラメーター名 説明
none ソートされず任意で表示される。デフォルト値
projectedDepth 深度情報から近いパーティクルを前にレンダリングする
distance 遠いものが近いものより前にレンダリングされる
oldestFirst 先に放出したパーティクルが最前面でレンダリングされる
youngestFirst 新しいく放出されたパーティクルが最前面でレンダリングされる

 

Enable lighting (isLightingEnabled)

パーティクルにライトを適応するか決める。
スモークなどヴォリュームエフェクトなどで使用する。

ライト、1つにのみ適応されるので、複数ライトがある場合は categoryBitMask で振り分ける。

デフォルト値は false。

 

Physics

f:id:x67x6fx74x6f:20170824100513p:plain

 

Affected by gravity (isAffectedByGravity)

PhysicsWorld などの重力の影響を受けるか否かを設定する。
true にすると質量などの影響で重力の物理シミュレーションが行われる。

デフォルト値は false。

 

Affected by physics fields (isAffectedByPhysicsFields)

PhysicsField の影響を受けるか否かを設定する。
true にすると PhysicsField による質量やコードでしか設定できないが電荷に影響して物理シミュレーションが行われる。

デフォルト値は false。

 

Die on collision (particleDiesOnCollision)

true にすると設定した障害物(コリジョン)にぶつかった場合、パーティクルが消滅する。

デフォルト値は false。

 

Mass (particleMass / particleMassVariation)

物理シミュレーション同様に質量を設定する。 単位は kg で、Variation あり。

デフォルト値は 1。

 

Bounce (particleBounce / particleBounceVariation)

物理シミュレーション同様に衝突で得られたエネルギーの量を決める。
Variation あり。

デフォルト値は 0.7。

 

Friction (particleFriction / particleFrictionVariation)

物理シミュレーション同様に摩擦を決める。

デフォルト値は 1.0。

 

Damping (dampingFactor)

物理シミュレーション同様に流体摩擦や空気抵抗などの効果を付加する。

デフォルト値は 0.0 で、 acceleration の設定、重力や PhysicsField の影響を受けない場合は減速しない。

 

Life cycle

f:id:x67x6fx74x6f:20170824100554p:plain

 

Emission Duration (emissionDuration / emissionDurationVariation)

パーティクルの再生する時間を指定する。単位は秒。
Variation あり。

デフォルト値は 1.0。

 

Idle Duration (idleDuration / idleDurationVariation)

パーティクルの再生するまでの時間を指定する。単位は秒。
Variation あり。

デフォルト値は 0.0。

emissionDuration を 1 にして、idleDuration を 1 にすると再生されなくなるので注意。

 

Loopting (loops)

パーティクルシステムのアニメーションをループさせるか決める。 false (Play Once) に設定すると設定されたもの1回分だけのパーティクルを放出する。

デフォルト値は true。 (Loops continuously)  

 

コードで設定するもの

fresnelExponent

キューブマップのリフレクトマップが使用されている場合、パーティクルにフレネル効果を適応する度合いを決める。

デフォルト値は 1.0。

 

particleCharge / particleChargeVariation

プラス、またはマイナスの値入れることで、
パーティクルに電荷を付加し PhysicsField の影響を受けるようにする。

デフォルト値は 0.0 で効果はない。

 

colliderNodes

障害物となるノードを配列で設定する。

 

その他

パーティクルをさらに細かく制御するものがあるが今回は割愛。

また、iOS 11 では以下のものが増えている。

  • orientationDirection
  • particleIntensity / particleIntensityVariation

 

今回はここまで。