iOS で SceneKit を試す(Swift 3) その74 - SceneKit のパーティクル、SCNParticleSystem について
パーティクルシステムとは粒状のものに画像など使用し、振る舞いの設定を行い、
煙、雨、紙吹雪、花火の効果を再現する。
そして、その粒子の一つ一つをパーティクルと呼ぶ。
パーティクルは SceneKit で存在するオブジェクトで唯一 Scene Graph と切り離され存在となっており、 数千、数万と描画される可能性があるため、内部的に処理している。
ちなみに他のゲームエンジンと異なりパーティクルをジオメトリに設定することはできないので自力で頑張る。
パーティクルシステムの流れ
パーティクルの画像設定
各パーティクルにテクスチャ画像を適応し、色合い、ブレンディングモードなどのパラメータを調整し外観を設定する。
また、アニメーション用にシーケンス画像を設定して、鳥の群れや多段階の爆発など表現することができる。
パーティクルの寿命
パーティクルは発射口となるエミッタの始点から、消えるまで位置や色を変更することでアニメーションを表現する。
各パーティクルのが消えるまでを birthRate と particleLifeSpan とし、掛け合わしたものを寿命として設定するが、寿命を長くしすぎると画面上のパーティクルが多くなりすぎ消費電力と演算に時間がかかるので注意。
エミッタ
発射口となる部分で、単一点もしくはジオメトリをエミッタに設定することができる。 emissionDuration の設定次第で一定期間アイドルさせたりすることができる。
バリエージョン
パーティクルシステムプロパティには、ランダムに変化させるプロパティがある。
例えば、大きさをランダム化し大きさに幅を持たせるとか。
動き
パーティクルは方向、速度、角速度、加速度などのシンプルな物理シミュレーションによって移動が行われ、設定している寿命がきて消滅するまでアニメーションを行う。
パーティクルは物理シミュレーションであるため PhysicsWorld のジオメトリによる障害物や PhysicsField を使うことで複雑な効果をアニメーションで行うことができる。
他の機能
- SCNParticlePropertyController を使用すると CoreAnimation の機能から個々のパーティクルの振る舞いを調整しエフェクトを作成すことができる
- systemSpawnedOnCollision を使用することでパーティクルが障害物に衝突した際に処理ができる。新たなパーティクルが生成される設定が可能
- パーティクルシステム用に各イベントハンドラにパーティクルモディファイアブロックを付加しアニメーションさせることができる。ブロックはパーティクルのプロパティを一括で変更することができるがレンダリングコストは高くなる。
SCNParticleSystem の設定方法の種類
- 全てコードで作成
- SceneKit Particle System File (scnp) を作成し、コードから利用
- Scene ファイル (scn) の Scene Graph で Particle System を作成する。
設定項目が多く動作の状況が掴みづらいので、大体は scn か scnp から利用することなる。
今回はここまで。