LoginSignup
6
0

Babylon.js 6 と HavokEngine を Vite 4 で動作させるサンプル

Posted at

Babylon.js 6 で搭載された HavokEngine の WebAssembly を、 Vite で読み込めるようにしたプロジェクトのサンプルです。

ついでに WebGPU が動作するならそっちを優先するようにしています。

各バージョン

  • @babylonjs/core: ^6.0.0
  • @babylonjs/havok: ^1.0.1
  • typescript: ^5.0.0
  • vite: ^4.0.0

npm install 後に自動実行

package.json
{
  "scripts": {
    "postinstall": "cp ./node_modules/@babylonjs/havok/lib/esm/HavokPhysics.wasm ./assets/HavokPhysics.wasm"
  }
}

この記述を追加することで、ローカルに依存パッケージとして導入された wasm ファイルを Vite が読み込み可能な場所に移動させました。

vite-wasm-plugin は期待通り動作しませんでした。

Vite に WebAssembly の import サポートはあるんですが、期待通り動作しませんでした(多分 ESM に非対応だからではないでしょうか)。

wasm ファイルの URL をインポート

import HavokPhysics from "@babylonjs/havok";
import havokWasmUrl from "../assets/HavokPhysics.wasm?url";

このように ?url サフィックスを付けることで、そのファイルへのアクセス URL を取得することが出来ます。

const havok = await HavokPhysics({
    locateFile: () => havokWasmUrl,
});

として wasm を初期化することで、指定した URL のファイルを取得するように出来ます。

HavokPlugin の初期化

const scene = new Scene(this.engine);
const havokPlugin = new HavokPlugin(true, havok);
scene.enablePhysics(new Vector3(0, -9.8, 0), havokPlugin);

上記で HavokPlugin の初期化が完了です。

const sphere = CreateSphere("Sphere", {}, scene);
sphere.position = new Vector3(0, 10, 0);
new PhysicsAggregate(sphere, PhysicsShapeType.SPHERE, {
    mass: 1.0, // 質量(kg?)
    restitution: 0.75, // 反発力
}, scene);

PhysicsAggregate を追加することで、対象の Mesh に対して物理演算をかけるようになります。

参考資料

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0