粒子をデザインする「テクスチャカスタマイズ」【第4回パーティクル講座】

どうも、アドオンパーティクル講座第4回です。
第3回の講座ではエミッターについて解説しました。

前回の記事はこちら!

今回の講座ではついに、パーティクルのテクスチャについて触れていこうと思います。

1.パーティクルのテクスチャを変えてみよう!

期待していた方もいらっしゃったかと思いますが、前回までの記事の記述例にもあるように、パーティクルのテクスチャは変更可能です。
また更に、アニメーションの間隔や消滅に合わせてコマを進めさせる といったことも簡単にできます!

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

記述例を載せていきます。本題は“minecraft:particle_appearance_billboard”の部分ですね。

(パーティクル名:particle_test_tip_4)

{
  "format_version": "1.10.0",
  "particle_effect": {
    "description": {
      "indentifier": "particle_test_tip_4",
      "basic_render_parameters": {
        "material": "particles_alpha",
        "texture": "textures/particle/particles"
      },
      "components": {
        "minecraft:emitter_rate_instant": {
          "num_particles": 3
        },
        "minecraft:emitter_lifetime_once": {
          "active_time": 0
        },
        "minecraft:emitter_shape_sphere": {
          "radius": 0,
          "direction": "outwards"
        },
        "minecraft:particle_initial_speed": 1.2,
        "minecraft:particle_lifetime_expression": {
          "max_lifetime": 3.0
        },
        "minecraft:particle_motion_dynamic": {},
        "minecraft:particle_appearance_billboard": {
          "size": [1.0, 1.0],
          "facing_camera_mode": "lookat_xyz",
          
          "uv": {
            "texture_width": 128,
            "texture_height": 128,

            "flipbook": {
              "base_UV": [56, 72],
              "size_UV": [8, 8],
              "step_UV": [8, 0],
              "frames_per_second": 8,
              "max_frame": 8,
              "stretch_to_lifetime": false,
              "loop": true
            }
          }
        },
        "minecraft:particle_appearance_tinting": {
          "color": [1.0,0.0,0.5,1.0]
        }
      }
    }
  }
}

オリジナルのテクスチャを用意する場合は、“basic_render_parameters”“texture”にファイルのリンクを書きましょう。

3.コンポーネント解説

"minecraft:particle_appearance_billboard": {
 "size": [1.0, 1.0],
 "facing_camera_mode": "lookat_xyz",

 "uv": {
  "texture_width": 128,
  "texture_height": 128,

  "flipbook": {
   "base_UV": [0, 72],
   "size_UV": [8, 8],
   "step_UV": [8, 0],
   "frames_per_second": 8,
   "max_frame": 8,
   "stretch_to_lifetime": false,
   "loop": true
  }
 }
}

一つのコンポーネントの中は内容が多めです。特に“flipbook”のテクスチャ指定はややこしいですが頑張っていきましょう!

    • “size”は、第一回で解説した通りパーティクル自体のサイズを指定します。
    • “facing_camera_mode”は、プレイヤーから見てパーティクルがどのように表示されるかを指定します。例に書かれている“lookat_xyz”では、どこから見てもパーティクルはプレイヤーの方を向くようになります。
      この設定で、パーティクルがゲーム画面の正面を向くのではではなくプレイヤーの方向を向くのは、プレイヤーの視点設定を切り替えると表示が少しおかしくなることがあるためです。その原因はゲーム画面ではなく、プレイヤーの方向に向くようになっている仕様によるものだと考えられます。
    • “uv”は使用するテクスチャのサイズを指定します。値はdotです。パーティクルに反映させるわけではなく、“basic_render_parameters”で指定したテクスチャのサイズを入れてください。
      • “texture_width”は横幅、“texture_height”は縦幅で、バニラのパーティクルテクスチャは128×128で作成されています。
      • “flipbook”はテクスチャをパーティクルに反映させる部分となります。
        • “~_UV”と書かれた部分は、テクスチャの場所や範囲といったものを指定します。これら2つの設定では共通して一つ目の値が横の、二つ目の値が縦の数値となります。値はdotです。
        • “base_UV”は使用するテクスチャの起点を指定します。下の“size_UV”で範囲指定をしますが、ここでの「起点」とは範囲の左上のことを指します。
        • “size_UV”は使用するテクスチャの範囲を指定します。
        • “step_UV”はテクスチャのアニメーションでコマを一つ進む際にどれ程ずらすかを指定します。この例では縦 0 、横 728×8 のサイズなので、一つ目の値を 8 にすることで8dotずつ右へテクスチャをずらしていきます。
        • “frames_per_second”は1秒当たりのフレーム数(アニメーションのコマ)を決めます。
        • “max_frame”は最大フレーム数を指定します。今回使用するテクスチャには8つのコマが用意されているので、全部を指定するなら数値は 8 となります。
        • “stretch_to_lifetime”trueにすることでパーティクルで設定したlifetimeに合わせてアニメーションを変えてくれます。falseで無効化です。
        • “loop”はテクスチャのアニメーションをループさせるかを指定します。

4.終わりに

今回の解説は以上となります。今回の例では、アニメーションがループしてきらめくマゼンタ色のパーティクルが散らばります。

パーティクルのテクスチャは、表現力を左右する大事な要素です。パーティクルにもテクスチャを付けてあげれば、他にないパーティクルが仕上がります!

それではお疲れ様でした!


前回↓

次回↓