Swift + Metal

Metal で
クリエイティブコーディング

Processing、p5.js、openFrameworks にインスパイアされた Swift ライブラリ。 2D/3D ビジュアル、GPU コンピュート、オーディオリアクティブアートなどを構築できます。

$ .package(url: "https://github.com/shinyaoguri/metaphor.git", from: "0.2.1")

必要なものがすべてここに

2D スケッチから GPU コンピュートパイプラインまで — Metal で構築された包括的なクリエイティブコーディングツールキット。

2D 描画

シェイプ、テキスト、画像、グラデーション、ブレンドモードによるイミディエイトモードのベクター描画。GPU インスタンスバッチで高パフォーマンス。

3D レンダリング

PBR / Blinn-Phong マテリアル、シャドウマッピング、メッシュプリミティブ、OBJ/USDZ 読み込み、オービットカメラ。

GPU コンピュート

型付き GPUBuffer<T> による Metal コンピュートシェーダー、画像処理カーネル、GPU パーティクルシステム。

ポストプロセス

ブルーム、ブラー、色収差、グリッチ、PostProcessPipeline によるカスタムシェーダーエフェクト。

オーディオ

リアルタイム FFT 解析、ビート検出、AVAudioEngine によるサウンドファイル再生。

物理演算

剛体、コンストレイント、衝突検出、空間ハッシュを備えた 2D 物理ワールド。

機械学習

CoreML 統合、22種以上の Vision リクエスト、スタイル転送、GPU テクスチャ変換。

Syphon 出力

VJ ソフトウェア、プロジェクションマッピングツール、録画アプリケーションへのリアルタイム映像共有。

親しみやすい API、
パワフルなエンジン

Sketch プロトコルを 実装するだけで描画を開始できます。ウィンドウ生成、レンダーループ、GPU パイプラインの構築はライブラリが処理します。

  • Processing ライクなイミディエイトモード API
  • 自動 GPU インスタンシングとバッチ処理
  • 固定解像度での2パスレンダリング
  • macOS 14+(Apple Silicon)
MySketch.swift
import metaphor

@main
final class MySketch: Sketch {
    var config: SketchConfig {
        SketchConfig(width: 1280, height: 720)
    }

    func draw() {
        background(0.1)

        fill(.white)
        circle(width / 2, height / 2, 200)

        noFill()
        stroke(.red)
        strokeWeight(2)
        for i in 0..<12 {
            let angle = Float(i) * .pi / 6
            let r = 150 + sin(time + angle) * 30
            ellipse(
                width / 2 + cos(angle) * r,
                height / 2 + sin(angle) * r,
                40, 40
            )
        }
    }
}

サンプルで学ぶ

基礎から高度な GPU テクニックまで、30以上の実行可能なサンプルを用意しています。

基礎

シェイプ、カラー、テキスト、トランスフォーム

  • ShapePrimitives
  • Hue
  • Words
  • Rotate

数学とモーション

サイン波、ノイズ、カーブ、時計

  • SineCosine
  • Noise2D
  • MovingOnCurves
  • Clock

シミュレーション

パーティクル、フロッキング、ソフトボディ、ライフゲーム

  • SimpleParticleSystem
  • Flocking
  • SoftBody
  • GameOfLife

3D

メッシュ、ライティング、テクスチャ、ジオメトリ

  • Primitives3D
  • Toroid
  • Directional
  • TextureSphere