「Frame Library」に掲載されているパーティクル「Simple Fire」を題材に Babylon.js Playground の Particle Editor を少し学ぶ【Babylon.js-2】

この記事は「[Babylon.js Advent Calendar 2023](https://qiita.com/advent-calendar/2023/babylonjs)」の 17日目の記事です。

## 今回の内容
この記事では、[以下の「Frame Library」](https://library.framevr.io/)に掲載されているパーティクルのうちの 1つを題材に「[Babylon.js Playground の Particle Editor](https://doc.babylonjs.com/toolsAndResources/inspector/particleEditor)」を少し学んでみた、というものです。

![Frame Library](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9fe541b6-c15b-4958-ccaa-40b164c92c63.png)

### 「Frame Library」を知ったきかっけ
今回の記事で扱う「Frame Library」を知ったきっかけは、[Babylon.js 勉強会](https://babylonjs.connpass.com/)の Discordサーバーでの以下の投稿でした。
　
![Babylon.js 勉強会のDiscordサーバーでの投稿](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/52a9d769-e770-0c3f-3958-20c6ed6319e0.png)

#### 余談

今回の内容とはズレますが、投稿の最後の文に書かれている 2つも気になりました！

●Shadertoy
　https://www.shadertoy.com/
![Shadertoy](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/3f5d6a3c-9299-ad4d-f646-f194ac01b3fa.png)

●GLSL Sandbox
　https://glslsandbox.com/
![GLSL Sandbox](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1d9c466f-0c2b-a9a6-91e1-c361ee1425d0.png)

## そもそも Frame とは？
ここで「Frame Library」の「Frame」について、簡単に調べてみました。

どうやら以下が公式ページで、そこを見ると「メタバースを簡単に作成できるサービス」と書かれていました。

●Frame
　https://library.framevr.io/
![Frame](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ce0914d0-6ced-ea1e-0cb7-24ecba1688da.png)

[Use Cases のページ](https://learn.framevr.io/use-cases)もあるようだったので、何ができるのかは、そのページを見てみるのが分かりやすそうでした。

## 「Frame Library」
### 「Frame Library」について
本題の「Frame Library」に戻ります。
ライブラリのページの FAQ に、 `This is a library of assets that are easy to bring into Frame or other babylon.js projects. It's just getting started.` と明記されていました。

![FAQ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d20621f0-bdc1-af2d-6250-d8451f6460fb.png)

このライブラリに掲載されているものは、Frame にも簡単に導入でき、なおかつ他の Babylon.js のプロジェクトなどでも使えるもの、というものになるようです。

### パーティクルのカテゴリの中を見てみた話
ライブラリの中で、今回の対象とするパーティクルのカテゴリに掲載されているものを、まずは見てみました。

そうすると、2つのタブ「Latest」と「Featured」があったのですが、「Featured」を選ぶと以下の表示になりました。12個がピックアップされて表示されました。

![Featured](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/43ceaeb7-b6d9-7024-cc0a-63cdde655bf2.png)

また「Latest」のほうを選ぶと、72個くらいの内容がリストで表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/c1d7919f-d110-e8f9-fb59-9bf6aac6e65d.png)

## 「Simple Fire」を見ていく
次に、個人的に気になった「Simple Fire」をピックアップして見てみます。
このプログラムの中を見ていくためには、「Remix」というボタンを押すと良さそうでした。

![Simple Fire](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6198bc09-68bc-cb95-b25a-47dae963f259.png)

### Babylon.js Playground の Particle Editor で表示される内容
そうすると、「Babylon.js Playground の Particle Editor」が立ち上がり、以下が表示されました。

https://playground.babylonjs.com/?snippet=KI72TR#M7MYT8#196

![Simple Fire＠エディタ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/50a6c7b9-29c3-af85-bbd8-9dc0666c92bc.png)

自分が「Babylon.js Playground の Particle Editor」をほとんど使ったことがないので、探り探り見ていきます。

## Particle Editor上で「Simple Fire」の細かな情報を見ていく
それでは、この「Simple Fire」の内容を少し見ていきます。

### 画像素材関連
右下の「General」の「Texture」という部分の URL を選択すると、パーティクルに用いている画像素材が表示されました。

![パーティクルに用いている画像素材](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/05a35a8c-fcbd-6d81-fbf5-dd1d86272a19.png)

また、その画像素材に関する情報も見ることができるようです。

![画像の情報](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d53e4f4b-ab0c-78df-c24f-42a01b77d3d1.png)

URL は「 https://www.babylonjs.com/assets/Flare.png 」となっていました。

ちなみに、ここで用いられている画像素材の「Flare.png」以外にも素材があり、それについて以下の The Texture Library を見ると、他の素材もいろいろ用意されていることが分かります。
※ パーティクル用の素材以外も含まれています

●The Texture Library | Babylon.js Documentation
　https://doc.babylonjs.com/toolsAndResources/assetLibraries/availableTextures

#### パーティクルに画像素材を使うというやり方
ここでの「パーティクルを実現するために画像素材を用いる」という部分については、前に同じような内容を p5.js で画像合成処理を書いてやったことがありました。
そのため、ここで出てきた画像がなぜ炎のような見た目になるのかは、イメージができました。

#### 余談： p5.js でパーティクルを扱った時の話
ちなみに余談ですが、p5.js で書いた画像合成処理と素材画像で試したパーティクルの 1つに、以下がありました。矩形を用いたパーティクルを、単純に煙っぽい画像にするだけで、全然違った見た目のエフェクトになったのに、当時は驚いた覚えがあります。

https://twitter.com/youtoy/status/1528940633733623808

あと、2D版の炎っぽいものは、p5.js で実装したことがあったりもしました。
（画像合成処理的には、Photoshop などの画像処理系のソフトでも使える「加算合成系の処理」の、Cavas API で使えるものを利用しています）

https://twitter.com/youtoy/status/1543565774056718337

### 合成処理や位置関連
そして、さらに右下に表示された情報を見ていくと、上で出てきた画像素材を合成する処理の種類に関する内容や、パーティクルを表示する位置などに関する情報も出てきました。

![合成処理や位置関連](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/20aa082f-742c-6970-3941-43c6e67bef6b.png)

### Emitter の部分（変更もしてみる）
その下の「Emitter」という部分も見てみます。
この部分は、画像素材を用いたパーティクルの発生のさせ方に関係していそうです。

ここを変えると、手軽に見た目を変えられると思われるため、Type という部分をデフォルトの「Box」から別のものに変えてみます。

![Emitter](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/793a8b86-c850-4b39-d96c-4938d889695a.png)

以下で、Type を変更してみた時の見た目を、画像で掲載してみます。

#### Box
以下はデフォルトのものです。

![Box](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/891fdac9-6c58-cc21-0631-d381e68c76f5.png)

#### Point
次は、Point に変更したものです。
1点からパーティクルを発生させるような処理に変わりました。

![Point](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/08a5e35b-6bb9-65ff-2e55-c058fec0206b.png)

#### Sphere
次は、Sphere に変更したものです。
基本のパーティクルの発生パターンを、球面方向にした形だと思われます（そのため、様々な方向に拡散するような感じになりました）。

![Sphere](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0c0bdf0e-2320-3ceb-2ba5-f9b9950bef48.png)

なお、Sphere以外もそうですが、パラメータを変更して、さらにパーティクルの発生パターンを変化させられるようでした。

![Sphere のパラメータ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d103bf8c-a11b-caa2-8029-feaf2d2075a6.png)

### ライフタイムや色
その下には、ライフタイムや色に関する項目がありました。

![ライフタイムや色](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/c5dccde3-0b3c-97a0-5965-19ef54dee02e.png)

ライフタイムは、パーティクルシステムで良く使われる、個々の要素が発生してから消えるまでを決めるパラメータです。最小値と最大値が指定されているので、この 2つの値の間のランダムに選択された値が、ライフタイムに設定されていると思われます。

また、色を変えてみるのは分かりやすいので、ここをいじってみます。

#### 赤を緑系に
赤を緑系の色に変えてみました。

![赤を緑に](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/5b0864d1-41ce-b55f-9be1-a241fa7c7840.png)

#### 黄色を青系に
上で変えた内容はそのままで、黄色のほうを青系の色に変えてみました。

![黄色を青系に](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/b96a31a1-b5ef-ba4b-0c00-52dfc24daa55.png)

#### いろいろ変える
さらに複数の箇所を、いろいろ変えてみました。
これをやって、好みの見た目を作るだけでも楽しめそうな感じがします 笑。

![いろいろ変える](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e6ec85b1-f830-ed16-7465-27ecdf98688f.png)

### キャプチャなどが行えるツール
そして、画面右下のタブを切り替えると、録画・キャプチャができそうなツールなどもありました。

![キャプチャなどが行えるツール](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/71689bf9-cd5a-9a11-82e1-d1e1e07df11f.png)

さらに他のタブやメニューもたくさんあり、あらためて以下の公式のドキュメントなどを見ていきたいと思いました。

●The Particle Editor | Babylon.js Documentation
　https://doc.babylonjs.com/toolsAndResources/inspector/particleEditor

## おわりに
この記事では、「Frame Library」に掲載されているパーティクル「Simple Fire」を題材に、自分がまだ手をつけてなかった Babylon.js Playground の「Particle Editor」を少し学んでみるということをやりました。

これをやってみて、あらためて Particle Editor について学んで行きたいと思いました。
それと、「Frame Library」に掲載されているパーティクルが他にたくさんあったので、それらも見えていければと思いました。