Slide 1

Slide 1 text

Animator As Code As JSON As Model kb10uy / 日下夏稀

Slide 2

Slide 2 text

はじめに (02:32:25) ● 各スライドを書きはじめた時刻を見出しに付与しています ● もう 19 時間しかないですね ● まず寝ます

Slide 3

Slide 3 text

自己紹介 (02:33:19) ● kb10uy / 日下夏稀 ● VRC-LT 登壇 2 回目 ● Rust や HLSL を書いたり、 オンゲキ15.7 や Arcaea11.6 をプレイしている ○ どっちもデカいアプデとエンディングがやってきて大変 ● Skeb 依頼納品数が 30 を超えた(今朝も納品された) ● Pixel 6a を買った

Slide 4

Slide 4 text

動機 (12:33:26)

Slide 5

Slide 5 text

僕のアバターセットアップについて (12:33:47) ● 表情はハンドサインではなく Action Menu からパーツごとに調整可能なように設計 している ● つまり Animator Controller のレイヤーが表情パーツ単位になる ● 更に BlendShape 単位で Animation が生える ● するとどうなる?

Slide 6

Slide 6 text

誰か助けてください (12:35:01) ● これら全て手作業で作っています ● 1 アバター あたり 2~3 時間 かかる

Slide 7

Slide 7 text

どう考えても自動化できる (12:47:05) ● BlendShape それぞれに対応する安全な名前の Animation を作る ● Expression Parameter をパーツごとに割り当てる ● Int/Bool に応じて Enter → Disabled → Enabled (No.*) → Exit という 流れの Animator Layer を作る ● 助けて Haï えも~ん!

Slide 8

Slide 8 text

Animator as Code (13:02:19) ● Haï~ 氏による UnityEditor 拡張 ● "Fluent" に Animator Controller などの 構成を記述できる ● むしろ今までなんで使ってなかったんだよ と言われればそうなんだが……

Slide 9

Slide 9 text

UnityEditor の C# コードを書きたくない (13:04:38) ● UI パネルとか作るのを考えるとダルそうすぎてやりたくなかった ● あと一旦 BlendShape とパーツ名の対応の情報を書き出してもう一回 JSON か何 かで戻してあげる必要があるのも美しくない ● 微妙に古い C# を書きたくない ● さてどうしよう?

Slide 10

Slide 10 text

そうだ! Blender 拡張だ! (13:07:07) ● 改変をするときは毎回 Blender を経由している ● ではその時点で Shape Key の情報を出力してあげればいいのではないか? ● まあオブジェクトのコンテキストメニュー生やすぐらいだし簡単やろ(適当) ● でも入力・生成部分で C# 書かなきゃいけないのは変わらなくない?

Slide 11

Slide 11 text

そうだ! Rust だ! (13:08:35) ● もはや Rust を書きたいだけでは? ● Blender で出力した情報を Rust で書いた専用アプリに食わせる ● 専用アプリから、「Animator as Code を使って Animator Controller を構築する C# コード」を吐かせる ● UnityEditor C# と格闘しなくて済む!やったね!(本当かな?)

Slide 12

Slide 12 text

今から実装します (13:10:28)

Slide 13

Slide 13 text

Blender プラグインができました (15:26:20) ● 選択したオブジェクトの Shape Keys をいい感じの構造 の JSON にしてログメッセージに出力する ● もはやファイルに出力すらしない ● アニメーション名やグループの編集だけは手動でやるし かない ○ 何らかのヒューリスティックな補助は実装できるかも ● あとはいい感じに階層構造を調整 ● ちなみに顔のオブジェクトだけで数百行の JSON が生成 されます

Slide 14

Slide 14 text

対応する serde 用構造体が定義できた (16:58:21) ● まあこれは大体書くだけ ● serde は本当によくできたシリアライゼーションフ レームワークなので他言語メインの人も適宜調べて みてね ● #[serde(flatten)] 本当にありがとう

Slide 15

Slide 15 text

AAC の生成メイン部分が生成できた (18:42:45)

Slide 16

Slide 16 text

まあこれだけでは動きませんが (18:43:30) ● Create() するべき中身だけ書いているので実際に MonoBehaviour として動かす にはもうちょっと細工が必要 ● でも多分動くでしょう(?) ● さすがにこれ以上動作を詰めてると間に合わないか?

Slide 17

Slide 17 text

間に合った (19:39:07)

Slide 18

Slide 18 text

まとめ ● やたら迂回して AnimatorController の生成を楽にした ● 人間やれば割と間に合う ● GitHub: kb10uy/sk2aac