Skip to content

Commit ffe3bda

Browse files
authored
docs: add Authored Motion avatar guide (#122)
Add a setup guide for the Basis Authored Motion component under the Avatar section: adding the component, the Movements inspector, the six movement kinds, baking an AnimationClip into a Sequence clip, runtime toggling, and validating with Test in Editor. Wire the page into the avatar nav across all locale meta files.
1 parent 55bd099 commit ffe3bda

29 files changed

Lines changed: 968 additions & 11 deletions
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
---
2+
title: Authored Motion
3+
description: Authored Motion 通过单个批处理作业(而非每个 Avatar 一个 Animator)来驱动尾巴、耳朵、配饰等装饰性和次要动作,因此即使在拥挤的实例中也能保持低开销。
4+
---
5+
6+
import { Callout } from 'fumadocs-ui/components/callout';
7+
8+
`Basis Authored Motion` 适用于 Avatar 自行播放的循环、环境性动作:摆动的尾巴、抽动的耳朵、旋转的配饰、手工 K 帧的姿态。传统上你会用 Unity Animator 来驱动这些,但 Avatar 的每个复制副本都要为该 Animator 支付固定的每实例开销——在繁忙的实例中这会迅速累积。Authored Motion 将相同的动作声明为纯数据,并在单个批处理作业中一起评估所有 Avatar 的动作,因此随着实例填满,开销几乎不增加。
9+
10+
它只驱动人形 rig 和 IK 不触及的 transform——尾巴和耳朵链、额外的骨骼、独立的配饰。
11+
12+
<Callout type="info">
13+
Authored Motion、Jiggle Physics 和联网骨架是叠加而非竞争的关系:骨架是主要姿态,Authored Motion 提供动画基础,[Jiggle Physics](/docs/avatar/jiggle) 在其上叠加物理跟随。Authored Motion 在每帧 jiggle 采样之前写入,因此同一尾巴上的 jiggle rig 会自动与之合成。
14+
</Callout>
15+
16+
## 添加组件
17+
18+
- 在 Avatar 根层级下的任意 GameObject 上添加 `Basis Authored Motion` 组件(在 **Add Component** 菜单中搜索“Authored Motion”)。一个组件持有一个 **Movements** 列表;将要一起切换的动作分组到同一组件上,如果需要独立的切换组,则添加多个组件。
19+
20+
![显示 Basis Authored Motion 的 Add Component 菜单](/img/authored-motion/1.png)
21+
22+
- 点击 **+ Add Movement** 添加一个条目,然后选择它的 **Kind**(类型)。Inspector 只显示该类型实际使用的字段,因此切换类型时卡片会随之变化。使用 **▲ ▼** 按钮重新排序,使用 **** 移除。**Label** 仅是面向作者的名称,对运行时没有影响。
23+
24+
![展开了一个动作卡片的 Movements Inspector](/img/authored-motion/2.png)
25+
26+
<Callout type="info">
27+
将鼠标悬停在任意字段上可查看其功能说明。下面的每个字段都在 Inspector 的工具提示中有文档说明。
28+
</Callout>
29+
30+
## 动作类型
31+
32+
| 类型 | 作用 | 驱动对象 | 关键字段 |
33+
|------|--------------|--------|-----------|
34+
| **Oscillate** | 周期性摆动(正弦 / 三角 / 方波 / 脉冲)。单根骨骼是简单摆动;一条链则成为行波。 | `Chain` | `Axis`, `Amplitude`, `Frequency (Hz)`, `Waveform`, `Chain Phase Step`, `Chain Falloff` |
35+
| **Rotate** | 原地匀速旋转。 | `Target` | `Axis`, `Speed (deg/sec)` |
36+
| **Orbit** | 使目标围绕一个枢轴公转。 | `Target` | `Pivot`, `Axis`, `Radius`, `Orbit Speed (deg/sec)` |
37+
| **Noise** | 有机的单纯形噪声漂移——比 Oscillate 更平滑,更少重复。 | `Chain` | `Axis`, `Amplitude`, `Noise Speed`, `Seed`, `Chain Falloff` |
38+
| **RandomSelect** | 以固定间隔选取一个加权姿态(或空闲)并淡入/淡出。适合耳朵抽动和眨眼。 | `Options` / `Select Target` | `Options` (+`weight`), `Idle Weight`, `Interval Range`, `Attack`, `Release` |
39+
| **Sequence** | 在多根骨骼上播放已烘焙的 AnimationClip。 | `Baked Clip` | `Baked Clip`, `Sequence Root`, `Loop` |
40+
41+
<Callout type="warn">
42+
**Oscillate 和 Noise 由 `Chain` 列表驱动,而不是 `Target`** 单根骨骼的简单摆动是只有一个条目的 `Chain`——对这些类型请将 `Target` 留空。`Target` 仅由 Rotate 和 Orbit 使用。
43+
</Callout>
44+
45+
### Oscillate——摆动的尾巴
46+
47+
将尾巴骨骼分配到 **Chain**,链顶端的骨骼在前。使用一根骨骼会得到简单摆动;使用多根时,`Chain Phase Step` 会沿链对每根骨骼进行延迟以产生行波,而 `Chain Falloff` 会逐根缩放振幅(1 = 无衰减)。当 `Channel` 为 Rotation 时,`Amplitude` 以度为单位。
48+
49+
![在尾巴骨骼链上设置的 Oscillate 动作](/img/authored-motion/3.png)
50+
51+
### RandomSelect——抽动的耳朵
52+
53+
为每个姿态添加一个 **Option**,并为每个设置 `Target``Axis``Angle``Weight`。将 `Target` 留空的选项会回退到 `Select Target`,因此一个动作可以用多种方式摆放单根骨骼,**为每个选项驱动不同的骨骼。`Idle Weight` 是在某个周期内什么都不做的相对概率——提高它可让抽动变得偶尔而非持续。
54+
55+
![带有加权耳朵姿态选项的 RandomSelect 动作](/img/authored-motion/4.png)
56+
57+
## 用 Sequence 播放已烘焙的剪辑
58+
59+
当动作过于复杂、无法用基本类型描述时——例如手工 K 帧、卷曲整条骨骼链的循环——将 AnimationClip 烘焙为共享的 `Basis Motion Clip` 资源,并用 **Sequence** 动作播放它。
60+
61+
- 打开 **Basis ▸ Authored Motion ▸ Bake Clip**
62+
63+
![Basis Authored Motion Bake Clip 菜单](/img/authored-motion/5.png)
64+
65+
-**Animation Clip** 设为源剪辑,将 **Root (in scene)** 设为该剪辑所基于创作的 Avatar——骨骼路径会相对于此根进行烘焙。除非需要更精细的采样,否则将 **Frame Rate** 保持为 60。点击 **Bake** 并选择资源的保存位置。
66+
67+
![Bake Authored Motion Clip 窗口](/img/authored-motion/6.png)
68+
69+
<Callout type="info">
70+
此版本的烘焙仅处理旋转,并且无论 Avatar 的静止姿态如何,都能精确重现剪辑的姿态。
71+
</Callout>
72+
73+
- 在 Sequence 动作中,将已烘焙的资源分配给 **Baked Clip**,并将 **Sequence Root** 设为与剪辑烘焙时相**的根。为循环空闲启用 **Loop**,或将其禁用以进行单次播放。
74+
75+
![引用已烘焙剪辑的 Sequence 动作](/img/authored-motion/7.png)
76+
77+
## 运行时切换
78+
79+
一个动作组跟随组件自身的 `enabled` 状态。任何能开启或关闭该组件的方式——包括 [HVR.Vixxy](/docs/avatar/animation-rigging) 激活——都会开关其动作,且无需逐帧轮询。将应一起切换的动作分组到一个组件上。
80+
81+
## 测试你的设置
82+
83+
Authored Motion 只在 Avatar 完成校准后才会启动,而普通的 **Play** **不会**触发校准。请使用 `Basis Avatar` 组件的 **Test in Editor** 按钮——它会通过真正的本地玩家路径加载 Avatar 并对其进行校准,从而让你的动作运行。
84+
85+
<Callout type="warn">
86+
如果在普通 Play 模式下没有任何动作,这是预期的——组件从未注册。请始终用 **Test in Editor** 进行验证。
87+
</Callout>
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
---
2+
title: Authored Motion
3+
description: Authored Motion treibt kosmetische und sekundäre Bewegungen — Schwänze, Ohren, Accessoires — über einen einzigen gebündelten Job statt eines Animators pro Avatar an und bleibt so auch in einer überfüllten Instanz günstig.
4+
---
5+
6+
import { Callout } from 'fumadocs-ui/components/callout';
7+
8+
`Basis Authored Motion` ist für die sich wiederholende, ambiente Bewegung gedacht, die ein Avatar von selbst abspielt: ein wedelnder Schwanz, zuckende Ohren, ein sich drehendes Accessoire, eine handanimierte Geste. Traditionell würden Sie diese mit einem Unity Animator antreiben, aber jede replizierte Kopie des Avatars zahlt die feststehenden Kosten dieses Animators pro Instanz — was sich in einer belebten Instanz schnell summiert. Authored Motion deklariert dieselbe Bewegung als reine Daten und wertet die Bewegung aller Avatare gemeinsam in einem gebündelten Job aus, sodass die Kosten kaum steigen, wenn sich die Instanz füllt.
9+
10+
Es treibt nur die Transforms an, die das humanoide Rig und IK nicht berühren — Schwanz- und Ohrenketten, zusätzliche Knochen, eigenständige Accessoires.
11+
12+
<Callout type="info">
13+
Authored Motion, Jiggle-Physik und das vernetzte Skelett ergänzen sich, statt zu konkurrieren: Das Skelett ist die primäre Pose, Authored Motion liefert die animierte Basis, und [Jiggle-Physik](/docs/avatar/jiggle) legt die physikalische Nachbewegung darüber. Authored Motion schreibt jeden Frame, bevor Jiggle abtastet, sodass ein Jiggle-Rig auf demselben Schwanz sich automatisch damit verbindet.
14+
</Callout>
15+
16+
## Hinzufügen der Komponente
17+
18+
- Fügen Sie einem beliebigen GameObject unter dem Stamm Ihres Avatars eine `Basis Authored Motion`-Komponente hinzu (suchen Sie im Menü **Add Component** nach „Authored Motion"). Eine Komponente enthält eine Liste von **Movements**; gruppieren Sie die Bewegungen, die zusammen umgeschaltet werden sollen, auf derselben Komponente, und fügen Sie mehrere Komponenten hinzu, wenn Sie unabhängige Umschaltgruppen benötigen.
19+
20+
![Add Component-Menü mit Basis Authored Motion](/img/authored-motion/1.png)
21+
22+
- Klicken Sie auf **+ Add Movement**, um einen Eintrag hinzuzufügen, und wählen Sie dann seinen **Kind** (Typ). Der Inspektor zeigt nur die Felder, die dieser Typ tatsächlich verwendet, sodass sich die Karte ändert, wenn Sie den Typ wechseln. Verwenden Sie die **▲ ▼**-Schaltflächen zum Umsortieren und **** zum Entfernen. Das **Label** ist nur ein autorenseitiger Name ohne Laufzeitwirkung.
23+
24+
![Movements-Inspektor mit einer ausgeklappten Bewegungskarte](/img/authored-motion/2.png)
25+
26+
<Callout type="info">
27+
Bewegen Sie den Mauszeiger über ein Feld, um eine Beschreibung seiner Funktion zu sehen. Jedes Feld unten ist im Tooltip des Inspektors dokumentiert.
28+
</Callout>
29+
30+
## Bewegungstypen
31+
32+
| Typ | Was es tut | Treibt an | Wichtige Felder |
33+
|------|--------------|--------|-----------|
34+
| **Oscillate** | Periodisches Schwingen (Sinus / Dreieck / Rechteck / Puls). Ein einzelner Knochen ist ein einfaches Schwingen; eine Kette wird zu einer Wanderwelle. | `Chain` | `Axis`, `Amplitude`, `Frequency (Hz)`, `Waveform`, `Chain Phase Step`, `Chain Falloff` |
35+
| **Rotate** | Konstante Drehung auf der Stelle. | `Target` | `Axis`, `Speed (deg/sec)` |
36+
| **Orbit** | Lässt ein Ziel um einen Drehpunkt kreisen. | `Target` | `Pivot`, `Axis`, `Radius`, `Orbit Speed (deg/sec)` |
37+
| **Noise** | Organische Simplex-Drift — sanfter als Oscillate, weniger repetitiv. | `Chain` | `Axis`, `Amplitude`, `Noise Speed`, `Seed`, `Chain Falloff` |
38+
| **RandomSelect** | Wählt in einem festen Intervall eine gewichtete Pose (oder Leerlauf) und blendet sie ein/aus. Gut für Ohrenzucken und Blinzeln. | `Options` / `Select Target` | `Options` (+`weight`), `Idle Weight`, `Interval Range`, `Attack`, `Release` |
39+
| **Sequence** | Spielt einen gebackenen AnimationClip über mehrere Knochen ab. | `Baked Clip` | `Baked Clip`, `Sequence Root`, `Loop` |
40+
41+
<Callout type="warn">
42+
**Oscillate und Noise werden durch die `Chain`-Liste angetrieben, nicht durch `Target`.** Ein einfaches Schwingen eines einzelnen Knochens ist eine `Chain` mit einem Eintrag — lassen Sie `Target` für diese Typen leer. `Target` wird nur von Rotate und Orbit verwendet.
43+
</Callout>
44+
45+
### Oscillate — ein wedelnder Schwanz
46+
47+
Weisen Sie die Schwanzknochen der **Chain** zu, oberster Knochen zuerst. Mit einem Knochen erhalten Sie ein einfaches Schwingen; mit mehreren verzögert `Chain Phase Step` jeden Knochen entlang der Kette, um eine Wanderwelle zu erzeugen, und `Chain Falloff` skaliert die Amplitude pro Knochen (1 = kein Abfall). `Amplitude` ist in Grad, wenn `Channel` auf Rotation steht.
48+
49+
![Oscillate-Bewegung auf einer Schwanzknochenkette eingerichtet](/img/authored-motion/3.png)
50+
51+
### RandomSelect — zuckende Ohren
52+
53+
Fügen Sie pro Pose eine **Option** hinzu und geben Sie jeder ein `Target`, `Axis`, `Angle` und `Weight`. Eine Option, die ihr `Target` leer lässt, fällt auf `Select Target` zurück, sodass eine Bewegung einen einzelnen Knochen auf mehrere Arten posieren *oder* pro Option einen anderen Knochen antreiben kann. `Idle Weight` ist die relative Wahrscheinlichkeit, in einem Zyklus nichts zu tun — erhöhen Sie ihn, um das Zucken gelegentlich statt konstant zu machen.
54+
55+
![RandomSelect-Bewegung mit gewichteten Ohrenpose-Optionen](/img/authored-motion/4.png)
56+
57+
## Abspielen eines gebackenen Clips mit Sequence
58+
59+
Wenn die Bewegung zu komplex ist, um sie mit einem Primitiv zu beschreiben — eine handanimierte Schleife, die eine ganze Knochenkette krümmt — backen Sie den AnimationClip in ein gemeinsames `Basis Motion Clip`-Asset und spielen Sie ihn mit einer **Sequence**-Bewegung ab.
60+
61+
- Öffnen Sie **Basis ▸ Authored Motion ▸ Bake Clip**.
62+
63+
![Basis Authored Motion Bake Clip-Menü](/img/authored-motion/5.png)
64+
65+
- Setzen Sie **Animation Clip** auf den Quellclip und **Root (in scene)** auf den Avatar, auf dem der Clip erstellt wurde — die Knochenpfade werden relativ zu diesem Stamm gebacken. Lassen Sie **Frame Rate** bei 60, sofern Sie keine feinere Abtastung benötigen. Klicken Sie auf **Bake** und wählen Sie, wo das Asset gespeichert werden soll.
66+
67+
![Bake Authored Motion Clip-Fenster](/img/authored-motion/6.png)
68+
69+
<Callout type="info">
70+
Das Backen erfolgt in dieser Version nur für Rotationen und reproduziert die Pose des Clips exakt, unabhängig von der Ruhepose des Avatars.
71+
</Callout>
72+
73+
- Weisen Sie bei der Sequence-Bewegung das gebackene Asset dem **Baked Clip** zu und setzen Sie **Sequence Root** auf denselben Stamm, gegen den der Clip gebacken wurde. Aktivieren Sie **Loop** für einen sich wiederholenden Leerlauf oder deaktivieren Sie es für einen einmaligen Durchlauf.
74+
75+
![Sequence-Bewegung, die auf einen gebackenen Clip verweist](/img/authored-motion/7.png)
76+
77+
## Umschalten zur Laufzeit
78+
79+
Eine Bewegungsgruppe folgt dem eigenen `enabled`-Zustand der Komponente. Alles, was die Komponente ein- oder ausschaltet — einschließlich einer [HVR.Vixxy](/docs/avatar/animation-rigging)-Aktivierung — schaltet ihre Bewegungen ein und aus, ohne Abfrage pro Frame. Gruppieren Sie die Bewegungen, die zusammen umgeschaltet werden sollen, auf einer Komponente.
80+
81+
## Testen Ihrer Einrichtung
82+
83+
Authored Motion startet erst, sobald der Avatar kalibriert ist, was bei einem einfachen **Play** **nicht** geschieht. Verwenden Sie die Schaltfläche **Test in Editor** der `Basis Avatar`-Komponente — sie lädt den Avatar über den echten lokalen Spielerpfad und kalibriert ihn, sodass Ihre Bewegungen laufen.
84+
85+
<Callout type="warn">
86+
Wenn sich im einfachen Play-Modus nichts bewegt, ist das zu erwarten — die Komponente wurde nie registriert. Validieren Sie immer mit **Test in Editor**.
87+
</Callout>

0 commit comments

Comments
 (0)