Poimandres⁠⁠、Webゲームやアニメーション向けのJS/TSライブラリ「math」を公開

オープンソース開発者コミュニティのPoimandresは9月25日、JavaScriptとTypeScriptから利用できる数学ライブラリ「math」のバージョン0.1.0の公開を案内した。ベクトルや行列の演算に加え、図形の交差判定、アニメーション、ノイズ生成など、ゲームやインタラクティブなWebアプリに使う計算機能を提供する。

Poimandresは、ReactからThree.jsを扱うReact Three Fiberや、アニメーションライブラリのReact Springなどを開発するコミュニティ。mathは特定の描画ライブラリに依存せず、WebGLやWebGPU、WebAssemblyを使うアプリとの組み合わせを想定している。MITライセンスで公開されており、npmからnpm install mathで導入できる。

座標計算から動きや色の表現まで

mathはTypeScriptで実装されており、位置や向き、拡大・縮小の計算に使うベクトル・行列演算や、回転を表すクォータニオンの演算を備える。これらの基本機能に加え、用途別のモジュールも用意している。

APIリファレンスによると、math/shapesには図形の交差判定など、math/geometryには多角形の三角形分割などの幾何処理を収録。math/timeは動きの加減速を表すイージングや、ばねのような動きを作るスプリングを扱う。このほか、乱数(math/random⁠)⁠、ノイズ(math/noise⁠)⁠、色・色空間の変換(math/color⁠)⁠、目標位置に合わせて関節の配置を求める逆運動学(math/ik)にも対応する。

各モジュールは個別に読み込める。未使用のコードをビルド時に除くツリーシェイキングにも対応する。

公式サイトでは、mathの各機能を使ったサンプル集を公開している。ブラウザーで動作を確認でき、ソースコードもGitHubで公開されている。

計算結果の格納先を再利用する設計

性能面では、呼び出し側が用意したデータへ結果を書き込む方式を採る。READMEの例では、2つの3次元ベクトルaとbを通常の配列として用意し、vec3.add(out, a, b)で加算結果を第1引数のoutへ書き込む。結果を格納する配列を再利用でき、計算のたびに新しい配列を作る必要がない。Poimandresは、処理速度をベンチマークで検証しているという。

共通の計算基盤を目指し⁠、AIコーディング向けスキルも用意

mathの開発方針をまとめた文書では、ライブラリごとに数学処理が実装され、AIもその都度コードを生成する状況を取り上げている。正しさや性能を一貫して確保しにくいとして、人間とAIエージェントが共通の規約で実装できるようにする考えを示している。先行事例には、数学ライブラリのmathcat、gl-matrix、wgpu-matrixを挙げている。

mathを手掛けるIsaac Mason氏は、自身が開発する経路探索ライブラリのnavcatと物理エンジンのcrashcatの新たな基盤としてmathを位置付けている[1]。自身のX投稿では、インタラクティブなゲームやアプリに役立つ基本的な計算機能を今後も増やしていくとしている。

また、mathを使った実装やコードレビューを支援する、AIコーディングエージェント向けのスキルも付属する。メモリ効率や処理速度を意識した実装方針、注意点、コード例をまとめている。公式ドキュメントでは、npx skills add pmndrs/math --skill mathによる追加方法を案内している。

おすすめ記事

記事・ニュース一覧