Blender 3.0 asset browserへMMDモデルを登録する方法

2021/12/19

**blender 3.0**

* コレクションを作成し、mmd\_toolsでPMXをインポート
* MMDタブのAssemble ALLでMMDの物理やモーフをBlender用に変換 (これはアセット化とは関係ない通常のMMD設定です。またモーフのBindはモデルによっては非常に重い場合がありマテリアルモーフを使わない割り切りをしてAsemble ALLではなく物理だけ設定などでも問題はありません)
* アウトライナーからコレクションを"**シーンにインスタンス作成**"でインスタンスを作成
* その**インスタンスを**"アセットをマーク”でアセット化
* 自分の設定したアセットフォルダにblendファイルを保存

* アセットブラウザからドラッグドロップでアセット追加すると、モデルの実体のあるコレクションとインスタンスの２つが作成されます（インスタンスは不要なので削除してください）
* MMDタブの"**Update Rigid Body World**" でリジッドボディの物理を有効化
* MMDの可視性はアペンド時にすべて可視状態になっているため、MMDタブの可視性：リセットでリジッドボディ・ジョイントなどを不可視化

**blender 3.1** ( 2021/12/19現在の挙動のため変わる可能性があります)

1. コレクションを作成し、mmd\_toolsでPMXをインポート
2. MMDタブのAssemble ALLでMMDの物理やモーフをBlender用に変換 (これはアセット化とは関係ない通常のMMD設定です。またモーフのBindはモデルによっては非常に重い場合がありマテリアルモーフを使わない割り切りをしてAsemble ALLではなく物理だけ設定などでも問題はありません)
3. コレクションを"アセットをマーク"
4. 自分の設定したアセットフォルダにblendファイルを保存
5. アセットブラウザからドラッグドロップでアセット追加すると、モデルの実体のあるコレクションとインスタンスの２つが作成されます（インスタンスは不要なので削除してください）
6. MMDの可視性はアペンド時にすべて可視状態になっているため、MMDタブの可視性：リセットでリジッドボディ・ジョイントなどを不可視化

**2021/12/23追記**：　2021/12/23現在のバージョンでは、**3.0でインスタンスをアセット化したものを3.1で利用する場合、インスタンスのみがAppend**されます。CTRL-A　インスタンスを実体化、F9で「ペアレント」「階層を維持」にチェックすると利用可能になります。

以下は古い情報です。

★2021/12/4追記：

・mmd\_tools 1.02で3.0対応になったため、１の手順は不要です。

・3.0正式版では、コレクションのアセット化ができなくなっており３の手順の該当部分は実行出来ません。その代わり、コレクションを右クリックで「シーンにインスタンスを作成」してそのインスタンスをアセット化し利用することがきます。

・3.1alpha (2021/12/4現在）では、プリファレンス＞実験的＞アセットブラウザーを展開にすることで以下の手順は再現できるようです。しかし、仕様は確定していないため、せっかく手間をかけてアセット化しても無駄になる可能性があり、お勧めしません。

・手順3のリジッドボディ関連コレクションの手順は全てスキップしてアセット化せず、アセット利用時にMMDタブのオペレーター、モデルを作成・モデルを変換の右にあるupdate rigid bodyすることで物理シミュレーションを有効にすることが出来ます。

Blender 3.0 Alpha (2021/10/9現在）のAsset Browserで、MMDモデルを登録・利用する方法のメモです。
Alpha版であるため最終版では変わる可能性が高いことにご注意ください。
また私の知識不足による誤り、無駄な手順などもあるかもしれません。ご指摘、修正いただければ幸いです。

**１．mmd\_toolsを3.0Alphaで利用可能にする**

* mmd\_tools 1.01はBlender 3.0に対応していないためそのままではインポート時に以下のエラーが出ます

bpyutils.py", line 197, in makeSphere
bmesh.ops.create\_uvsphere TypeError: create\_uvsphere: keyword "diameter" is invalid for this operator

* 以下のファイルを手動で、201行目を"diameter=radius,"から"radius=radius,"に修正してください。

　C:\Users\（ユーザー名）\AppData\Roaming\Blender Foundation\Blender\3.0\scripts\addons\mmd\_tools\bpyutils.py

**２．アセットブラウザーの設定を行う**

* プリファレンス＞実験的からAsset Browserを有効にする

* プリファレンス＞ファイルパスでアセットライブラリのパスの設定を行う 　デフォルトだけ設定しても動作しますが、以下のようにサブフォルダを作成すると利用時便利です

**３．MMDをインポートし、アセットとして登録する**

* MMDモデルをアセット化するためのトップレベルコレクションを作成する
* import pmxでそのコレクションの下にMMDモデルをインポートする
* ボーン適用 ・物理演算構築
* アウトライナーをビューレイヤーからBlenderファイルに変更し、RigidBodyConstraintsとRigidBodyWorldをドラッグしてトップレベルコレクションの下に持っていくる（コレクション内でリンク)

* Blenderファイルでは表示は変わらないが、ビューレイヤーに戻るとRigidBodyConstraintsとRigidBodyWorldがキャラクターのコレクション内に入っている

* アセットとして利用したときに、どのキャラクターのRigidBodyConstraints、RigidBodyWorldかをわかりやすくするため別の名前にする
* トップレベルのコレクション（図の例ではalicia)を選択し、右クリックしてアセットとしてマークする

* ファイル＞コピーを保存で、アセットのフォルダ（上図のフォルダ構成ではC:\bData\asset3.0\charactor\）に保存する

**４．アセットを利用する**

* 新たにBlenderを起動し、アセットブラウザーを開く（これまでのBlenderは終了して良い） 　"Current File"からDefault、もしくはCharactorなど保存したフォルダを選択するとアセットが表示される

* キャラクターを3D viewportにドラッグドロップするとキャラクターがAppendされる

* 現時点では（不具合と思われるが）コレクションが２つAppendされる
* 図の下のほうの空のコレクションは削除してよい
* また、Append後は、リジッドボディ他が全て表示状態になっている
* MMDモデルのトップレベル（Empty)を選択し、その他タブのMMD表示で、リジッドボディ、ジョイント、テンポラリオブジェクト、リジッドボディ名、ジョイント名を一旦表示にし、非表示にすることで正常になる

後は通常のMMDモデルとして利用できます。

上記のように若干の手間はかかりますが、MMDモデルインポート後、メッシュ修正、クロスシミュレーション化、Rigify化など様々な修正をしたモデルを再利用したい人には有用かもしれません

また、アセットブラウザではなく単純にAppendで再利用する際も上記に準じた手順が参考になるかもしれません。

**参考：**

複数キャラクターをAppendする場合は、それぞれのRigidBodyConstraintsとRigidBodyWorldを、一つのコレクションにまとめ、シーンのリジッドボディワールドのフォルダをまとめたコレクションに指定することで両方の物理が動作するようになります。