「Particle」と「Emitter」とで、表現に大きく差をつけられる【第3回パーティクル講座】

particle-3

どうも、アドオンパーティクル講座第3回です。
第2回の講座ではパーティクルの動作に関するカスタマイズを行いました。

前回の記事はこちら!


今回は、パーティクルの本質となるエミッターに関しての解説を行いたいと思います。

1.エミッターって何?

簡潔に言うと、パーティクルを出力するイベントの事を指します。

コンポーネントは主にParticle (パーティクル)Emitter (エミッター)という二つの定義に分かれており、それらは指すものが違います。
例えば10個のパーティクルを同時に召喚するものがあったとき、Particleパーティクル一つ一つを指しますが、Emitterそのパーティクルを10個まとめたものを指します。

この違いがあることで、パーティクルの表現の幅も広がります。けっこうややこしいですが、頭に入れておくといいでしょう!

2.jsonファイルの中身(1.10.0format対応)

それでは、記述例を載せていきます。
(パーティクル名:particle_test_tip_3)

{
  "format_version":"1.10.0",
  "particle_effect": {
    "description": {
      "identifier": "particle_test_tip_3",
      "basic_render_parameters": {
        "material": "particles_alpha",
        "texture": "textures/particle/particles"
      },
      "components": {
        "minecraft:emitter_shape_sphere": {
          "offset": [0.0, 0.0, 0.0],
          "radius": 0,
          "direction": "outwards",
          "surface_only": false
        },
        "minecraft:emitter_rate_steady": {
          "spawn_rate": 10,
          "max_particles": 30
        },
        "minecraft:emitter_lifetime_once": {
          "active_time": 3
        },
        "minecraft:particle_motion_dynamic": {
        },
        "minecraft:particle_initial_speed": 2.0,

        "minecraft:particle_lifetime_expression": {
          "max_lifetime": 3.0
        },
        "minecraft:particle_appearance_billboard": {
          "size": [ 0.3, 0.3],
          "facing_camera_mode": "lookat_xyz",

          "uv": {
            "texturewidth": 128,
            "textureheight": 128,

            "flipbook": {
              "base_UV": [ 56, 0 ],
              "size_UV": [ 8, 8 ],
              "step_UV": [ -8, 0 ],
              "frames_per_second": 8,
              "max_frame": 8,
              "stretch_to_lifetime": true,
              "loop": false
            }
          }
        },
        "minecraft:particle_appearance_tinting": {
          "color":[0.2 ,0.4 ,0.8 ,1.0]
        }
      }
    }
  }
}

お気づきの方もいらっしゃるかも知れませんが、コンポーネント名にparticleemitterとあります。
それぞれParticleとEmitterに対してのカスタマイズを行うことを指しています。

3.コンポーネント解説

"minecraft:emitter_shape_sphere": {
"offset": [0.0, 0.0, 0.0],
"radius": 0,
"direction": "outwards",
"surface_only": false
}

前解説にも登場、解説していたコンポーネントですね。実はこれ、Emitterのカスタマイズだったのです。

"minecraft:emitter_rate_steady": {
"spawn_rate": 10,
"max_particles": 30
}

Emitterから出力されるパーティクルの頻度を指定します。
“spawn_rate”は、1秒間にパーティクルがいくつ出力されるかを指定します。この例では10なので、1秒間に10個出てくる計算になりますね。
“max_particles”は、パーティクルが出力される最大数を指定します。この例では30ですので、3秒ほどで最大数に達します。

また、詳しいことは後述しますがEmitterには“minecraft:emitter_lifetime_looping”というものがあり、パーティクルの動作をループさせる機能があります。
しかし、このコンポーネントに関してはいくつか問題があるため、もう一つの例にしたかったのですが今回は省かせていただきました。

"minecraft:emitter_lifetime_once": {
"active_time": 3
}

Emitterを指定された時間のあいだ、1回分だけ実行させます。1回分というのは、前述したループに関係することで、1セットという感じですね。Emitterはパーティクルを出力させる周期を設定することが可能と考えられます。
この例では、3となっており単位はのため、3秒間出力されることになります。

ここで注意点です。Emitterを消滅させる機能を持つコンポーネントは、その中の“active_time”しかありません。
本来ならパーティクルの出力した数が“minecraft:emitter_rate_steady”“max_particles”で指定した回数に達した場合でも消えると考えられるのですが、再出力されるようです。

“minecraft:emitter_lifetime_looping”の問題点

※こちらの内容はまだ検証段階であり、確定と決まった内容ではありません。検証内容も厳密ではなく、抜け目がある可能性もあります。

既にお話ししましたが、“minecraft:emitter_lifetime_once”のパーティクル最大数到達による消滅も確認されておらず、Emitterは未だ不安定だと思われます。
“active_time”を長めに取り“max_particles”の量に早く達すると、Emitterの停止が一時的には確認されますが、再度パーティクルの出力が行われました。

“minecraft:emitter_lifetime_looping”は恐らく、パーティクル数最大値に到達しない限りは消えないコンポーネントで、ループし続けるものです。
その内容は、

  • “active_time”の一回のループで出力する時間を指定する
  • “sleep_time”の出力を停止する時間を指定する

というこの二つです。
“active_time”は恐らく正常に動作していると思われますが、“sleep_time”は検証したところ、特にこれといった変化がなく不明となっています。

4.終わりに

今回の解説は以上となります。今回の例は、青いパーティクルが3秒間30個出力されるというものになっています。

今回のEmitterによって、時間差による演出が可能になったかと思われます。ますます演出に磨きがかかるはずです。皆さんもぜひ使ってみては?
それではお疲れ様でした!


前回↓

次回↓