MDN のページで Babylon.js が扱われているところの手順などを見てみた【Babylon.js】

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

## はじめに
以下の MDN のページの話です。

●Babylon.js を使った基本的なデモの作成 - ゲーム開発 | MDN
https://developer.mozilla.org/ja/docs/Games/Techniques/3D_on_the_web/Building_up_a_basic_demo_with_Babylon.js

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/4a50e837-605a-755b-1623-08b4fddc94c1.png)

### MDN の該当箇所
JavaScript を使っている方は、誰もが 1度はお世話になると思われる（1度どころではなく、何度もお世話になったりするかもな） MDN のページで、JavaScript で 3D系の内容を扱う話をとりあげている部分があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d969e9e3-de33-f70b-9f3a-4678292291c0.png)

A-Frame や PlayCanvas、Three.js とともに Babylon.js の話も掲載されています。

MDN はよくお世話になるものの、この部分を見たことがなかったため、何が扱われているかを見てみようと思います！

## 記事の具体的な内容
### 扱われている内容
記事の具体的な内容は、冒頭に記載されている「画面内に立方体をレンダリング」というシンプルなもののようです。

その付近の記載を見ていると、「基本デモを作成するシリーズ」で「Three.js、 PlayCanvas、 A-Frame」も、わりとシンプルな内容を掲載しているっぽいです（そちらはあまり見られてない）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0964fd41-1d45-3c60-9fac-fc843ed2e165.png)

### 作成準備
Babylon.js を扱う環境としては、手元などで HTMLファイルを扱う形のようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/2d5cde45-6d31-720e-212a-ac5a2953cc50.png)

CDN の https://cdn.babylonjs.com/babylon.js を読みこむ HTML が提示されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a94e426f-07ae-a634-de33-0ca9d417fca1.png)

#### 簡単に扱える公式環境
Babylon.js を扱う環境としては、公式が提供しているもので「Babylon.js Playground（ https://playground.babylonjs.com/ ）もあったりします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/594f9797-f7c5-06ef-c494-bc46270feaf9.png)

MDN の記事はゼロから作ってみようという趣旨のようなので、デフォルトでオブジェクトが表示される「Babylon.js Playground」は、そのあたりの趣旨と合わない等が出てきますが、Babylon.js での開発や作ったものの共有でとても便利なものです。
（あと、HTML を含む全体構成とかも分かりにくくなるというか、それを気にせず使えるようにしてくれている環境なので、そのあたりもゼロからやっていこうという記事の流れに合わない部分が出てくるかもというところ）

### 土台を作る
最初に提示されている HTMLファイルでは、 `/* all our JavaScript code goes here */` の部分が完全に空なので、その後に土台を作る部分が出てきます。

```html
    <script src="babylon.js"></script>
    <canvas id="render-canvas"></canvas>
    <script>
      var canvas = document.getElementById("render-canvas");
      /* all our JavaScript code goes here */
    </script>
```

見出しを列挙してみると、土台を作った後も含めたこの後の内容は以下となるようです。

- Babylon.js エンジンの初期化
- シーンの作成
- レンダリングのループを作る
- カメラの作成
- 光あれ
- ジオメトリー
- 素材
- もっと図形を加える
- アニメーション
- まとめ

「カメラの作成」の部分では、 `BABYLON.Vector3() メソッド` についてのメモ書きもついていたりしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/957e4b1f-1f25-1460-39c9-360b202c6e65.png)

以下の「ジオメトリー」の前までで、ひとまずの土台ができあがっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ca44eff0-5cf7-9543-0393-a8db6df55946.png)

### Box の表示
その後にマテリアルの設定も行ったりして、以下のような Box の表示例が提示されています。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/7bd555b8-aafc-05cc-6ffa-16a979ffa7cd.png)

この時点でのコードに関し、冒頭で示されたものに対して追記・編集済みの内容が書かれています。

[JSFiddle上で作られた内容](https://jsfiddle.net/end3r/9zoeo5sy/)が埋め込まれつつ、[GitHubリポジトリ上のファイルへのリンク](https://github.com/end3r/MDN-Games-3D/blob/gh-pages/Babylon.js/cube.html)も提示されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d8c84e13-23a7-7ccb-828a-ee33453b6344.png)

### 図形追加・アニメーション
その後は、図形の追加やアニメーションへと進んでいきます。

図形はトーラスと円柱を追加する形です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/cf1796cd-a243-1be4-4f80-b0dc967274b6.png)

アニメーションは、拡大縮小や移動などを 3つの図形に適用していました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e718d8d4-2a7d-d09e-9b90-ac021fbaac2e.png)

そして最後に、リポジトリのリンクなどを示して締めという流れでした。

●end3r/MDN-Games-3D: 3D Games on the Web
　https://github.com/end3r/MDN-Games-3D/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/b33db93e-b3f0-a8bf-ec0b-2ffe26b9ee8d.png)

## おわりに
MDN の Babylon.js に関するページでは、オブジェクト表示やアニメーションを使う手順が丁寧に紹介されていました。

Babylon.js のハンズオンとかやる時があったら、こちらをそのハンズオン手順の一部に活用できたりもしそうかなと思ったりもしました。