×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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