Animator As Code のコードを Rust から作るために JSON を Blender から吐く話です。まわりくどすぎるだろ
https://github.com/kb10uy/sk2aac
Animator As CodeAs JSONAs Modelkb10uy / 日下夏稀
View Slide
はじめに (02:32:25)● 各スライドを書きはじめた時刻を見出しに付与しています● もう 19 時間しかないですね● まず寝ます
自己紹介 (02:33:19)● kb10uy / 日下夏稀● VRC-LT 登壇 2 回目● Rust や HLSL を書いたり、オンゲキ15.7 や Arcaea11.6 をプレイしている○ どっちもデカいアプデとエンディングがやってきて大変● Skeb 依頼納品数が 30 を超えた(今朝も納品された)● Pixel 6a を買った
動機 (12:33:26)
僕のアバターセットアップについて (12:33:47)● 表情はハンドサインではなく Action Menu からパーツごとに調整可能なように設計している● つまり Animator Controller のレイヤーが表情パーツ単位になる● 更に BlendShape 単位で Animation が生える● するとどうなる?
誰か助けてください (12:35:01)● これら全て手作業で作っています● 1 アバターあたり2~3 時間かかる
どう考えても自動化できる (12:47:05)● BlendShape それぞれに対応する安全な名前の Animation を作る● Expression Parameter をパーツごとに割り当てる● Int/Bool に応じて Enter → Disabled → Enabled (No.*) → Exit という流れの Animator Layer を作る● 助けて Haï えも~ん!
Animator as Code (13:02:19)● Haï~ 氏による UnityEditor 拡張● "Fluent" に Animator Controller などの構成を記述できる● むしろ今までなんで使ってなかったんだよと言われればそうなんだが……
UnityEditor の C# コードを書きたくない (13:04:38)● UI パネルとか作るのを考えるとダルそうすぎてやりたくなかった● あと一旦 BlendShape とパーツ名の対応の情報を書き出してもう一回 JSON か何かで戻してあげる必要があるのも美しくない● 微妙に古い C# を書きたくない● さてどうしよう?
そうだ! Blender 拡張だ! (13:07:07)● 改変をするときは毎回 Blender を経由している● ではその時点で Shape Key の情報を出力してあげればいいのではないか?● まあオブジェクトのコンテキストメニュー生やすぐらいだし簡単やろ(適当)● でも入力・生成部分で C# 書かなきゃいけないのは変わらなくない?
そうだ! Rust だ! (13:08:35)● もはや Rust を書きたいだけでは?● Blender で出力した情報を Rust で書いた専用アプリに食わせる● 専用アプリから、「Animator as Code を使って Animator Controller を構築するC# コード」を吐かせる● UnityEditor C# と格闘しなくて済む!やったね!(本当かな?)
今から実装します (13:10:28)
Blender プラグインができました (15:26:20)● 選択したオブジェクトの Shape Keys をいい感じの構造の JSON にしてログメッセージに出力する● もはやファイルに出力すらしない● アニメーション名やグループの編集だけは手動でやるしかない○ 何らかのヒューリスティックな補助は実装できるかも● あとはいい感じに階層構造を調整● ちなみに顔のオブジェクトだけで数百行の JSON が生成されます
対応する serde 用構造体が定義できた (16:58:21)● まあこれは大体書くだけ● serde は本当によくできたシリアライゼーションフレームワークなので他言語メインの人も適宜調べてみてね● #[serde(flatten)] 本当にありがとう
AAC の生成メイン部分が生成できた (18:42:45)
まあこれだけでは動きませんが (18:43:30)● Create() するべき中身だけ書いているので実際に MonoBehaviour として動かすにはもうちょっと細工が必要● でも多分動くでしょう(?)● さすがにこれ以上動作を詰めてると間に合わないか?
間に合った (19:39:07)
まとめ● やたら迂回して AnimatorController の生成を楽にした● 人間やれば割と間に合う● GitHub: kb10uy/sk2aac