Anime2.5DRig

July 6, 2026 · View on GitHub

デモ: https://852wa.github.io/Anime2.5DRig/

パーツ分けPSDをブラウザにドロップするだけで、自動リギングされて動き出す 2.5D アバターツールです。 従来は手作業だったセットアップ(メッシュ分割・変形・物理設定)を自動化します。インストール不要・全処理クライアントサイド。

デモ / 使い方

  1. このリポジトリを GitHub Pages で公開(Settings → Pages → Branch: main / root)するか、ローカルで:
    python -m http.server 8000
    # → http://localhost:8000
    
  2. ページを開き、パーツ分けPSDをドロップ(または「sample.psd を読み込む」)。
  3. 自動リグが走り、その場でアイドルモーション・まばたき・口パク・髪物理付きで動きます。

カメラ追従(MediaPipe FaceMesh)とマイク口パクは https または localhost でのみ動作します(ブラウザの権限仕様)。file:// 直開きでもドロップ再生は可能です。

自動で行われること

  • see-through の出力PSDをそのまま受け入れ(mouthmouth_open 自動リネーム)
  • 閉じ目・閉じ口差分が無い場合、汎用差分を自動生成(アンカーに合わせてスケール・配置し、まつ毛/口の色に自動調整。専用バーで位置・角度を微調整可能)
    • 差分の元絵はリポジトリ直下の eye_close.psd(左右両目を1枚・間を空けて)/ mouth_close.psd を優先使用。無ければ内蔵データを使用
  • 低アルファノイズ除去(連結成分フィルタ)
  • 目・眉・まつ毛・閉じ目の左右自動分離(連結成分の重心で判定)
  • まぶた位置・虹彩中心・口・首ピボットなどアンカーの自動検出
  • 髪の房(ストランド)自動検出(毛先輪郭のピーク検出、1レイヤーにつき最大6房)
  • レイヤーごとの深度割当てによる擬似3D首振り(パララックス+シアー)
  • 房ごとの2重バネ物理(根元は固く・毛先はふわふわ)、胸の揺れ、呼吸
  • 閉じ目/閉じ口差分のクロスフェード、瞳のステンシルクリップ(白目内に制限)

レイヤー命名規約

レイヤー名(日本語の「のコピー」や全角文字は自動正規化されます):

レイヤー名内容必須備考
face顔ベースアンカーの基準。これだけは必ず
eyewhite白目(左右両方)左右は自動分離
irides虹彩(左右両方)視線移動・瞳スケール対象
eyelashまつ毛(開き目)
eye_close閉じ目まばたきでクロスフェード
eyebrow眉(左右両方)角度・上下操作対象
mouth_open開き口開度で顎が下がる
mouth_close閉じ口
nose
ears
earwear耳飾り
neck上端は頭に追従
topwear上半身の服呼吸・胸の揺れ対象
bottomwear下半身の服
handwear腕・手腕の高さ操作対象
headwear帽子・カチューシャ等
front hair前髪房物理+3ブロック操作
back hair後髪房物理
  • 髪を複数レイヤーに分ける場合: front hair_1, front hair_2, back hair_1 … のように `_連番$ を付けると、各レイヤーが独立した房グループとして物理演算されます(房数はレイヤー幅から自動決定)。
  • 規約にない名前のレイヤーも読み込まれます(位置から頭部/胴体を推定して追従のみ)。
  • レイヤーグループ(フォルダ)は未対応です。フラットな構成にしてください。
  • 首(\text{neck})と胴体(\text{topwear})について: \text{see}-\text{through} の出力をそのまま使うと首と胴体の前後関係の解決が難しく、動かした際に境目が破綻することがあります。うまくいかない場合は、首を胴体レイヤーに統合した一体型(\text{neck}レイヤーなし、\text{topwear}に首まで含める)にした方が成功しやすいです。
  • キャンバスは正方形推奨(768 \times 768〜2048 \times 2048で動作確認)。

機能

表情プリセット(笑顔/驚き/ジト目/ウインク左右)、左右独立の目の開き、眉角度(左右独立+対称)、視線、瞳スケール、目/口の「閉じやすさ」しきい値、前髪3ブロック操作と前髪専用の揺れ・柔らかさ、腕の高さ/位置、胸の揺れ(強さ・位置調整可)、体の傾き、アイドル/ランダムモーション、ランダム口パク、マイク口パク、マウス追従、ウェブカメラ追従(頭\text{XYZ}・まばたき左右・口・視線)、背景切替(透過/グリーンバック)。

構成

$`` index.html アプリ本体(UI + WebGLランタイム) lib/rigger.js 自動リグ生成(純TypedArray実装、Node でもテスト可能) lib/ag-psd.min.js PSDパーサ(ag-psd, MIT) lib/genericparts.js 汎用閉じ目・閉じ口差分(内蔵フォールバック) eye_close.psd 閉じ目差分の元絵(任意・差し替え可) mouth_close.psd 閉じ口差分の元絵(任意・差し替え可) sample.psd サンプルモデル(各自で配置)


ランタイムは WebGL1(メッシュワープ+ステンシル)。外部通信はカメラ追従を有効化した時の MediaPipe CDN 読み込みのみです。

## 既知の制限

- 一枚絵の分解はアプリ内では行いません。[see-through公式デモ(HuggingFace Space)](https://huggingface.co/spaces/24yearsold/see-through-demo)等で分割したPSDをドロップしてください(後処理は全自動)
- 口の開きは差分切替+変形の簡易表現(中間差分が増えると滑らかになります)
- 深度は名前ベースの固定テーブル(レイヤー順は PSD のまま尊重)

## License

MIT(同梱の ag-psd も MIT、MediaPipe は Apache-2.0 を CDN 参照)。

一枚絵のレイヤー分解には [shitagaki-lab/see-through](https://github.com/shitagaki-lab/see-through)(Apache-2.0, SIGGRAPH 2026)の利用を想定しています。本ツールは同プロジェクトの出力PSDの後処理・リギングを担う独立したサードパーティ製ツールであり、see-through のコード・モデルは同梱していません。
**サンプルPSD の絵の権利は各作者に帰属します。** 自作モデルを配布する場合はご自身の権利物をお使いください。