【上級者向け】Live2D アバターファイルを編集して、セリフに応じた感情表現・モーションをさせる方法
最終更新日
Live2D アバター仕様 v2.0
0-1. セリフ内容に応じた表現をさせる仕組み
NoLang では、「感情」や「ジェスチャー」のタグを用意しています。
Live2D には、表情(Expression)や動き(Motion)があらかじめ設定されているものがあります。そのような Live2D であれば、あなたが Expression / Motion を NoLang の「感情」「ジェスチャー」のタグと対応づけることで、NoLang がセリフから「感情」や「ジェスチャー」を連想した時に、対応する Expression / Motion が呼び出されるようになっています。

感情タグ一覧
| Tag | 日本語例 |
|---|---|
| happy | 嬉しい/楽しい |
| amused | 笑い |
| proud | ドヤ顔 |
| sad | 悲しい |
| disappointed | がっかり |
| angry | 怒り |
| annoyed | ムッ |
| fear | 恐れ/青ざめ |
| surprise | 驚き |
| disgust | 不快感 |
| gentle | 優しい/穏やか |
| excited | 興奮 |
| thinking | 考え中 |
| embarrassed | 照れ |
| confused | 困惑/はてな |
| tired | 眠い/疲れ |
| serious | 真剣 |
| love | ハート目 |
| sweating | 汗/緊張 |
ジェスチャータグ一覧
| Tag | 用途例 |
|---|---|
| point | 指差し |
| nod | うなずき |
| shake_head | 首振り(否定) |
| bow | お辞儀 |
| wave | 手振り/バイバイ |
| clap | 拍手 |
| thumbs_up | グッドサイン |
| thumbs_down | バッドサイン |
| fist_pump | ガッツポーズ |
| facepalm | 顔を覆う |
| head_tilt | 首かしげ |
| jump | 跳ねる |
| spin | 回転 |
| shrug | 肩すくめ |
| emphasize | 強調(二重線・ひらめき等) |
0-2. 準備
Live2D ファイルが入ったフォルダから、拡張子が .model3.json のファイルを探し出し、開きます。
例えば、以下のような中身になっています
{ "Version": 3, "FileReferences": { "Moc": "hoge_0001.moc3", "Textures": [ "hoge_0001.4096/texture_00.png" ], "Physics": "hoge_0001.physics3.json", "DisplayInfo": "hoge_0001.cdi3.json", "Expressions": [ { "Name": "expression1", "File": "animation/costume_v0001.exp3.json" } ], "Motions": { "Idle": [ { "File": "motions/default1.motion3.json", "FadeInTime": 0.5, "FadeOutTime": 0.5 }, { "File": "motions/default5.motion3.json", "FadeInTime": 0.5, "FadeOutTime": 0.5 }, { "Type": "SL", "File": "motions/default3.motion3.json", "FadeInTime": 0.5, "FadeOutTime": 0.5 } ] } }, "Groups": [ { "Target": "Parameter", "Name": "LipSync", "Ids": ["ParamMouthOpenY"] } ]}1. Expressions(表情・装着品・エフェクトなど)の設定
1-1. 常に適用される Expression
拡張子が .exp3.json のファイルで記述された Expressions(表情・装着品・エフェクトなど)を、動画再生中に常に適用することができます。
"FileReferences" → "Expressions" を必要に応じて作成し、そこに以下のように Expression の "Name" に "NOLANG_P_<任意名>" を記述してください。
"Expressions": [ { "Name": "NOLANG_P_<任意名>", "File": "<PATH to .exp3.json>" }]NoLang では、「"Name" が "NOLANG_P" で始まる、ある一つの Expression」を動画再生中、最初から最後まで適用します。
1-2. セリフ内容に応じて適用される Expression
セリフ内容に応じて適用される Expression を設定することもできます。
以下のように各 Expression の "Name" に "NOLANG_E_<emotion>_<任意名>" の形式で「0-1. 仕組み」の「感情タグ一覧」に記載されているタグのいずれかを記述してください。
"Expressions": [ { "Name": "NOLANG_E_happy_<任意名>", "File": "<PATH to .exp3.json>" }, { "Name": "NOLANG_E_amused_<任意名>", "File": "<PATH to .exp3.json>" }]複数の Expression を 1 つの emotion に紐づけることも可能です。その場合、NoLang で毎回適切な Expression が選択されます。
2. Motions の設定
2-1. ベース適用される Motion
拡張子が .motion3.json のファイルで記述された Motions を、動画再生中に適用することができます。
"FileReferences" → "Motions" → "Idle" を必要に応じて作成し、そこに以下のように各 Motion の "Type" に "S", "L", "SL" のいずれかを設定してください。
"Motions": { "Idle": [ { "Type": "S", "File": "<PATH to .motion3.json>", "FadeInTime": 0.5, "FadeOutTime": 0.5 }, { "Type": "L", "File": "<Another PATH to .motion3.json>", "FadeInTime": 0.5, "FadeOutTime": 0.5 }, { "Type": "SL", "File": "<Another PATH to .motion3.json>", "FadeInTime": 0.5, "FadeOutTime": 0.5 } ]}NoLang では、モーションを 3 つのタイプに分類し、処理しています。
"Type": "S"→ 話している時にのみ適用される Motion"Type": "L"→ 聞いている時にのみ適用される Motion"Type": "SL"→ 話している時にも聞いている時にも適用される Motion
"S", "L" の各々について、複数の Motion が含まれている場合は、適切なものが呼び出されます。一つも Motion が含まれていない場合は、別途アルゴリズムによりモーションが割り当てられます。
2-2. セリフ内容に合う「感情」に応じて適用される Motion
同様に、セリフ内容に合う「感情」に応じて適用される Motion を設定することもできます。
以下のように各 Motion の "Type" に「0-1. 仕組み」の「感情タグ一覧」に記載されているタグのいずれかを記述してください。
"Motions": { "Emotion": [ { "Type": "happy", "File": "<PATH to .motion3.json>", "FadeInTime": 0.5, "FadeOutTime": 0.5 }, { "Type": "amused", "File": "<Another PATH to .motion3.json>", "FadeInTime": 0.5, "FadeOutTime": 0.5 } ]}2-3. セリフ内容に合う「ジェスチャー」に応じて適用される Motion
同様に、セリフ内容に合う「ジェスチャー」に応じて適用される Motion を設定することもできます。
以下のように各 Motion の "Type" に「0-1. 仕組み」の「ジェスチャータグ一覧」に記載されているタグのいずれかを記述してください。
"Motions": { "Gesture": [ { "Type": "point", "File": "<PATH to .motion3.json>", "FadeInTime": 0.5, "FadeOutTime": 0.5 }, { "Type": "nod", "File": "<Another PATH to .motion3.json>", "FadeInTime": 0.5, "FadeOutTime": 0.5 } ]}3. NoLang へのアップロード
編集・保存を終えたら、関連ファイルと一緒に zip ファイルにまとめ、NoLang にアップロードしてください。
最終的に .model3.json のファイルの中身は、例えば以下のようになります。
完成形の .model3.json の例
{ "Version": 3, "FileReferences": { "Moc": "hoge_0001.moc3", "Textures": [ "hoge_0001.4096/texture_00.png" ], "Physics": "hoge_0001.physics3.json", "DisplayInfo": "hoge_0001.cdi3.json", "Expressions": [ { "Name": "NOLANG_P_1", "File": "animation/costume_v0001.exp3.json" }, { "Name": "NOLANG_E_happy_1", "File": "expressions/smile.exp3.json" }, { "Name": "NOLANG_E_amused_1", "File": "expressions/laugh.exp3.json" } ], "Motions": { "Idle": [ { "Type": "S", "File": "motions/default1.motion3.json", "FadeInTime": 0.5, "FadeOutTime": 0.5 }, { "Type": "L", "File": "motions/default5.motion3.json", "FadeInTime": 0.5, "FadeOutTime": 0.5 }, { "Type": "SL", "File": "motions/default3.motion3.json", "FadeInTime": 0.5, "FadeOutTime": 0.5 } ], "Emotion": [ { "Type": "happy", "File": "motions/Happy_Pose.motion3.json", "FadeInTime": 0.5, "FadeOutTime": 0.5 }, { "Type": "amused", "File": "motions/amused_Pose.motion3.json", "FadeInTime": 0.5, "FadeOutTime": 0.5 } ], "Gesture": [ { "Type": "point", "File": "motions/Point_Hand.motion3.json", "FadeInTime": 0.5, "FadeOutTime": 0.5 }, { "Type": "nod", "File": "motions/Nod_Head.motion3.json", "FadeInTime": 0.5, "FadeOutTime": 0.5 } ] } }, "Groups": [ { "Target": "Parameter", "Name": "LipSync", "Ids": ["ParamMouthOpenY"] } ]}