虚拟形象遮罩
原始页面:https://notes.sleightly.dev/animator-masks/
Unity Behaviour
遮罩会根据遮罩中启用和禁用的内容,屏蔽更改人形肌肉值、材质切换和变换值的功能。
如果某一层有一个遮罩,且该遮罩的某个值被启用,那么动画就可以对该值进行动画处理。
如果某一层有一个遮罩,且该遮罩的某个值被禁用,那么动画就不能对该值进行动画处理。具体来说:
- 如果某一层有一个遮罩,且该遮罩的 humanoid 值(如左手)被启用,那么该人形肌肉就可以被该层动画修改。
- 如果某一层有一个遮罩,且该遮罩的 humanoid 值(如左手)被禁用,那么该人形肌肉就不能被该层动画修改。
- 如果某一层有一个遮罩,且该遮罩的变换值被启用或未指定,那么该变换的位置、旋转和缩放就可以被该层动画修改,同时还可以修改第一个材质槽的材质交换。
- 如果某一层有一个遮罩,且该遮罩的变换值被禁用,那么该变换的位置、旋转或缩放,或者第一个材质槽的材质交换就不能被该层动画修改。
如果某一层有任何遮罩,那么它就不能对第一个材质槽之外的任何材质槽进行材质交换动画,或者对带有动画器的对象的根变换进行动画。
任何其他内容(混合形状和任何其他组件)都不受遮罩影响。
我们之所以使用遮罩,是因为如果你在一个图层上为一个人形肌肉制作动画,然后在另一个图层上为另一个人形肌肉制作动画(无论是更低层的动画器还是另一个可播放图层),那么第一个动画的内容将被第二个动画覆盖(除非第二个图层是添加层,如果是,则将两个动画相加)。
对于变换,这只会在第二个动画使用 WD 关闭并且是在更晚应用的可播放图层上发生时发生。
所以,例如,如果我们没有遮罩,如果你在手势层上为手部移动制作一个人形肌肉动画,然后在特效层上使用另一个动画来制作面部表情,而这个动画也恰好为人形肌肉制作动画,那么手部移动的值将被特效层覆盖。
注意:
这意味着,如果你有一个人形动画,如果不只是屏蔽你想要启用的人形肌肉,而其他部分被禁用,那么所有其他的人形肌肉都将被覆盖。
这也意味着,如果你在手势层上有变换动画,而你在特效层上有一个未加遮罩的 WD 关闭变换动画,那么所有手势层变换动画都将被覆盖。
默认的 VRChat 特效层使用了一个未加遮罩的 WD 关闭混合树。这可能会导致变换动画在 VRChat 中无法播放,只要你在使用默认特效层。如果你想在手势层上制作变换动画,你必须使用自己的特效层或者删除默认的并设置为空。