スクリプト

VRM Toolkit for AviUtl2

スクリーンショット

概要

VRMモデルを3D配置して表示するカスタムオブジェクト(VRMA対応)

詳細説明

VRM Toolkit for AviUtl2

VRM Toolkit for AviUtl2 は、AviUtl2 上で VRM モデルを 3D 配置し、VRMA 再生と Expression / LookAt 編集を行うためのツールキットです。

含まれる主なコンポーネント:

  • VRMToolkitModel.obj2
    • AviUtl2 の 3D 空間に VRM を配置するカスタムオブジェクト
  • VRMToolkitBridge.mod2
    • VRM / VRMA の解析、スキニング、モーフ、制約、SpringBone などを行うネイティブモジュール
  • VRMToolkitExpressionEditor.aux2
    • Expression / LookAt の JSON タイムラインを編集する専用エディタ

概要

このツールキットは obj2 を表示層として使い、重い処理をできるだけネイティブ側へ寄せる構成です。

主な用途:

  • VRM 0.x / 1.0 モデルの表示
  • VRMA によるアニメーション再生
  • JSON による Expression / LookAt タイムライン制御
  • Expression Editor による専用編集

導入方法

配布物は .au2pkg.zip 形式です。

  1. VRM-Toolkit-for-AviUtl2.au2pkg.zip を入手します。
  2. .au2pkg.zip を AviUtl2 のプレビュー画面へドラッグ&ドロップしてインストールします。
  3. 導入後、以下が利用可能になります。
    • VRM Toolkit Model
    • VRM Toolkit Expression Editor

手動配置する場合の配置先:

  • Plugin/VRMToolkit/VRMToolkitExpressionEditor.aux2
  • Script/VRMToolkit/VRMToolkitBridge.mod2
  • Script/VRMToolkit/VRMToolkitModel.obj2

キャッシュについて

本ツールキットは、実行時に展開画像や加工済みテクスチャのキャッシュをユーザー環境の一時フォルダ配下へ生成します。

主な保存先:

  • %TEMP%\aviutl2\VRMToolkitCache

通常、この一時フォルダは AppData\Local\Temp 配下です。

使い方

1. モデルを配置する

  1. VRM Toolkit Model を追加します。
  2. VRMファイル.vrm を指定します。
  3. 必要に応じて VRMAファイル.vrma を指定します。

2. Expression / LookAt を指定する

VRM Toolkit Model には以下の制御があります。

  • 表情JSON
    • Expression / LookAt の時系列 JSON
  • VRMAとJSON
    • 合成
    • 上書き

上書き はカテゴリ単位です。JSON にそのカテゴリの要素が 1 つでも含まれていれば、そのカテゴリでは VRMA を参照せず JSON を優先します。

カテゴリ:

  • 表情
  • リップシンク
  • 瞬き
  • 視線
  • カスタム

表情JSON の形式:

  • ルートは {"v":1,...} です
  • e
    • Expression トラックの配列です
    • 各要素は ["名前", [[時刻, 値], ...]] です
  • l
    • LookAt トラックです
    • y が水平角度、p が垂直角度です
    • 形式は {"y":[[時刻, 角度], ...], "p":[[時刻, 角度], ...]} です
  • 時刻の単位は秒です
  • Expression の値は通常 0.0 から 1.0 です
  • l.y / l.p は正規化値ではなく角度値です

最小例:

{"v":1,"e":[["happy",[[0,0],[0.5,1],[1,0]]]],"l":{"y":[[0,0],[1,20]],"p":[[0,0],[1,-10]]}}

例の意味:

  • happy を 0 秒で 0、0.5 秒で 1、1 秒で 0 に補間
  • 視線を 1 秒かけて水平 20 度、垂直 -10 度へ移動

補足:

  • VRM Toolkit Expression Editor はこの compact JSON を直接編集します
  • 上書き は「JSON にそのカテゴリのトラックが存在するか」で判定され、定義区間だけでなくカテゴリ全体に適用されます

3. Expression Editor を使う

VRM Toolkit Expression Editor では、Expression / LookAt の JSON タイムラインを編集できます。

主な機能:

  • 時系列ベースのキーフレーム編集
  • カテゴリごとの表示切替
  • 視線の水平 / 垂直編集
  • AviUtl2 の現在フレーム位置の表示

VRM 仕様対応

要素 VRM0 VRM1 現状 詳細
基本表示 対応 対応 glTF 読み込み、メッシュ表示、スキニング、基本マテリアル表示に対応 専用ビューアーと完全同一の見た目は保証しません。
Humanoid 定義の解釈 対応 対応 VRM 0.x の humanoid.humanBones 配列形式と、VRM 1.0 の VRMC_vrm.humanoid.humanBones に対応 VRMA リターゲットの基礎として利用しています。
VRMA humanoid リターゲット 対応 対応 VRM1 に加えて VRM0.x にも適用可能 VRM0.x では基準姿勢差を吸収する補正を入れています。
Expression: morph target bind 対応 対応 morph target 反映に対応 主要な表情変化はここで処理します。
Expression: texture transform bind 対応 対応 UV の offset / scale を反映 CPU 側で UV を組み替えて obj2 へ渡しています。
Expression: material color bind 未対応 未対応 なし VRM0 materialBind と VRM1 MaterialColorBind は未対応です。obj2 のテクスチャ描画では、テクスチャ色と材質色変更を自然に合成しづらいためです。
Expression: isBinary 対応 対応 isBinary の 0/1 判定を反映 サンプルモデルで確認済みです。
Expression: procedural override 対応 overrideMouth / overrideBlink / overrideLookAt を反映 VRM0 側の仕様外要素です。
LookAt: bone type 対応 視線入力から目ボーン回転を反映 VRM0 側の仕様外要素です。
LookAt: expression type 対応 視線入力を lookLeft / lookRight / lookUp / lookDown に変換 VRM0 側の仕様外要素です。
VRMC_node_constraint 対応 roll / aim / rotation を処理 VRM0 側の仕様外要素です。
VRMC_springBone 対応 VRM 1.0 の SpringBone に対応 VRM0 側は secondaryAnimation で別対応です。
secondaryAnimation 対応 VRM0 の旧揺れ物仕様を内部 spring 表現へ変換して処理 VRM1 側では VRMC_springBone を使用します。
KHR_texture_transform 対応 対応 base UV の offset / scale / rotation を反映 マテリアルの基本 UV 変形に対応しています。
baseColorTexture * baseColorFactor 対応 対応 テクスチャと baseColorFactor の乗算を反映 見た目差が大きかったため優先して実装しています。
MToon: alpha mode / transparentWithZWrite / render queue / UV animation 一部対応 一部対応 alphaMode / alphaCutoff / transparentWithZWrite / renderQueueOffsetNumber / uvAnimationScrollXSpeedFactor / uvAnimationScrollYSpeedFactor / uvAnimationRotationSpeedFactor を反映 この行に含めていない MToon プロパティは、下の「MToon: 詳細仕様」にまとめています。
MToon: toon shading / rim lighting / outline 未対応 未対応 なし 現在は obj2 を表示層にしており、専用材質シェーダー前提の描画経路を持っていないためです。
MToon: 詳細仕様 (uvAnimationMaskTexture など) 未対応 未対応 なし 現時点で未対応なのは、少なくとも shadeColorFactorshadeMultiplyTextureshadingShiftFactorshadingShiftTextureshadingToonyFactorgiEqualizationFactormatcapFactormatcapTextureparametricRimColorFactorparametricRimFresnelPowerFactorparametricRimLiftFactorrimMultiplyTexturerimLightingMixFactoroutlineWidthModeoutlineWidthFactoroutlineWidthMultiplyTextureoutlineColorFactoroutlineLightingMixFactoruvAnimationMaskTexture です。

実装方針上の制約

  • 描画は obj2 ベースです。
  • そのため、AviUtl2 の 3D 空間との整合を優先しており、専用 VRM ビューアーと完全に同一の描画結果を保証するものではありません。

開発者向け情報

ビルド方法、SDK 配置、ディレクトリ構成などの開発者向け情報は DEVELOPMENT.md を参照してください。

ライセンス

このリポジトリのソースコードは MIT License の下で提供します。

免責

本ソフトウェアの利用、導入、改変、再配布、およびこれらに関連して生じた一切の結果について、作者は責任を負いません。利用者の責任で使用してください。