[文字版][VRCHAT改模教程]开关动画原理和思路分享 您所在的位置:网站首页 vrchat怎么用画笔什么键 [文字版][VRCHAT改模教程]开关动画原理和思路分享

[文字版][VRCHAT改模教程]开关动画原理和思路分享

2023-10-08 17:24| 来源: 网络整理| 查看: 265

简介

大家好,在改模的时候是不是经常遇到穿衣麻烦和相关动画不知道怎么就出了bug的情况?本视频将会详细的告诉你为什么以及介绍我自己的相关思路。

本视频适用于自己动手打开过unity,也看过一些操作上手视频但是有困惑疑问的人使用。会对原理和策略都做一个介绍。

参考和概念解释

首先建议大家去看下官方文档

这个是unity的,https://docs.unity3d.com/cn/2019.4/Manual/AnimationStateMachines.html

这个是vrc官方的,https://docs.vrchat.com/docs/avatars-30

建议其实有空除了链接指向的章节,其他很多都值得粗略看一遍,尤其是vrc官方的,包括下面Avatar Dynamics,这样很多疑问和原理自然而然就有了概念,到时候再回头详细看来找答案,而不是出了问题一个一个群问人。

一些重要的概念和作用。

默认状态:即当前场景和层次结构中的所处的状态,包括但不限于对象object的打开关闭,对象上脚本的打开关闭,对象上形态键的数值,当前材质球,其他设置相关数值等。上传时生成的样子就是默认状态的。

播放层(Playable Layers):vrc avatar descriptor里面通常包含以下几个播放层(Playable Layers),每个对应一个动画控制器。一般我们绝大多数修改是在FX层。

动画控制器(.controller):包含动画层和参数列表,动画层含有顺序,从上到下依次覆盖(一般权重为1),参数列表则是动画层中状态转移中条件要用到的参数。每个动画层中任意时间点都只能有一个状态,当条件满足时会触发状态转移。动画控制器还有个作用,管理所有的动画,我们可以新建一个动画控制器将归类的动画放到对应的动画控制器里,不然一个动画控制器有太多的动画不方便选择编辑。

动画(.anim):动画是一个时间序列,其中包含了需要操作的对象如何变化。一般有一些关键帧,其他地方则是过渡。关键帧记录了对应帧的对象变化,比如数值变化,节点开关,脚本开关,材质球更换,shader数值调整等等。一般我们录制开关动画的话,通常情况下只需要录制一帧即可。

参数:指的是模型Avatar上的参数,也有模型自带的,如手势等,见官方文档。这里主要指的是自定义的参数列表。这里主要标明了参数的类型,默认值和是否需要保存。

菜单:自定义菜单,主要作用是改变参数。

最终呈现效果由什么决定

默认状态叠加播放层修改,其中播放层内部则是按照每个层叠加修改。

首先是默认状态,然后依次往下经过这几个播放层(Playable Layers)对状态的更改,这里的每个层对应一个动画控制器,需要注意,大多数情况下我们只更改FX层。

在每个播放层对应的控制器内部,按照从上到下的顺序依次看每个层(Layer,注意这里的层和上面的不是一个概念,这个是动画控制器内部的)是什么状态,以及这个状态对应的是什么动画。

而动画出问题查bug则是反过来的,从下面的层开始查起来,最终查到默认状态。

需要注意,这里有个概念是写默认值(write defaults),建议写逻辑的时候,这个值保持一致。他的功能是,当关闭时,这个层所有改变过的值在转移状态后如果未标注修改,则保留。如果开启,则这个层当前状态对应的动画如果未标注所有修改的值,则不做任何修改。比如两个动画,先经过放大2倍的动画,在停留在一个右移200的动画状态上。在关闭write defaults的情况下,最终结果是放大两倍同时右移200,而开启的情况下则只右移200。

穿衣

接下来介绍的就是简单的穿衣,首先说明下,所有预制体(.prefab)拖动到层次结构后是蓝色最好先解包不然会修改预制体,除非你本身就是想复用,统一修改,否则记得先解包。

我使用的是约束穿衣,用的工具是BerettaTool.BerettaDressTool 他的功能是给衣服和avatar本体的同名骨骼设置绑定约束关系。

不使用拖动骨骼穿衣的原因有几点:1. 怕漏了骨骼拖动;2. 相关关系信息,衣服的部件零散分开了。不太方便管理。

我现在除了头部影响视野的骨骼会手动拖动,其他都是父约束绑定,头部推荐是改名后手动拖动结构。使用很简单,适配的衣服先拖动到avatar上,再使用工具即可。

需要注意,很多衣服可能自带了一个动画控制器,在非vrc description中的动画控制器不能使用参数,只能有一些简单的旋转光环之类的动画,如果是空的,需要删掉,不然录制动画的时候会比较麻烦,容易跳出来。

动画层逻辑

开关动画为什么容易出问题,很可能是因为你原先对这样的开关动画没有逻辑上的定位分析。

我在做一个开关之前首先会考虑我要修改的对象,它的默认状态是什么,会在几个层中出现,这几个层为什么要修改它,层内又应该是一个什么样的变换。考虑清楚了,再录制动画和写动画层。

首先是为了保证未打开我的动画时仍然是穿着衣服的,因此默认状态下的模型不是裸体。头发和衣服套装不做绑定处理。衣服套装之前相互互斥,有一些单独的配件另外做逻辑处理。开关类的主要是为了最终一致性,参数列表中的参数会自动同步,则我的衣服状态也会一样同步。

首先在编辑动画的时候,最好先把要操作的动画控制器选中位置。

下面介绍衣服的整套逻辑思路。关于衣服,我录制的主要动画和对应的动画层有以下3类。

脱掉默认衣服。

穿上指定整套衣服。

脱掉整套衣服的某个部件/做了修改。

使用的参数主要有两种。这里就涉及到了两点,动画控制器种的参数和参数列表,这两个需要完全对应。

整套衣服参数clothes,使用整形,每一个数值对应一套具体的衣服。其中0对应默认衣服。

部件参数,比如Jacket, Shoes等部件,采用bool类型,表示切换,不同可以使用同一个参数进行控制。

我使用的层是default_clothes_off将脱掉默认衣服和穿上指定衣服分离的原因是为了保证脱衣动画这件事只在一个动画里面做,而不是在多个动画中录制,这样假如你对默认状态有修改,就只用修改一个动画,而不是多个,造成不同步等容易出错的行为。注意这里是有关闭骨骼以及其他衣服的,这是为了避险。对应的动画层如下。首先是默认状态不做任何修改,然后是一个脱掉默认衣服的状态。条件是clohtes=0则回到default,其他情况下在是脱掉的状态。动画时间我根据习惯改成了0.

切换条件

clothes层穿上指定整套衣服,基本上都是只打开整套衣服的节点,如果有搭配,则还需要做只打开需要的部件。并做形态键的修改,部分有需求的还有材质球更改等等。这里的动画层对应的同样默认状态default是不做修改的,所有的套装切换都是用的是Any State转换,其中clothes为0则切换到default状态,其他则切换的指定的衣服状态,一般这种Any State的转换除了动画时间选到0之外,一般会去掉Has Exit Time,以及 Can Transistion To Self。另外就是要注意,同时,条件要互斥,不能有同时满足的,否则状态会在同时满足的状态中反复横跳,在游戏中的表现就是对应的部位反复高频闪现。

整套衣服切换条件

脱掉整套衣服的某个部件/做了修改。这个的前提是已经穿上了整套衣服,并在此基础上做部件修改,绝大部分是关闭部件和对应骨骼。对应的动画层如下,同样是默认是个default状态不对外做修改。这里解释下,同一个转换的条件之间的关系是并且(and),而两个转换之间的关系是或者(or)。

以鞋(Shoes)这个部件为例,使用参数叫Shoes,布尔类型。从Any Stats转移过来的条件是当前穿着的整套衣服不包括该部件,或者该部件是打开的。这里解释下,我是把true当作穿上的状态,参数列表中也对应参数是默认状态为true。这里这么设计的逻辑是考虑两种情况,当整套服装不涉及该参数时:为了防止该层处于非默认状态,造成材质球/形态键卡住等情况,因此,只要套装不涉及该部件,则置为default状态不对外做任何修改。当整套服装包含该参数时:因为整套服装已经穿上了所有必须部件,因此该参数为打开状态时不做任何修改,保持default状态,当关闭时为false,则做切换,当时参数中还要叠加上是穿了这套衣服的条件(clothes=xxx)

穿上时本层不做修改如果当前整套衣服不需要修改该部件则该层默认状态不对外输出当且仅当穿上这套衣服,且脱下部件时做修改

好,在梳理下,当我切换一套新衣服,并且关闭了一个部件的情况下为什么正常工作。比如我脱掉了某件衣服的鞋子。

首先默认状态的衣服经过default_clothes_off 层,关闭了默认衣服,再经过clothes 层穿上指定整套衣服。再经过Shoes 层脱掉该鞋子,并修改对应形态键。你也注意到了,这里有个顺序关系,因此,动画层的摆放顺序也是有说法的,首先是关闭默认衣服层,再然后是穿上整套衣服的层,之后是各部件关闭修改的层。

菜单组织

菜单的话,我是把每个衣服都做了一个子菜单,这样创建,里面填上应该有的修改。

其他独立开关

比如手上拿东西,则不涉及上述若干层,一般放到最下方,防止被覆盖形态键等,单独录制开关即可。

原则上是互斥的可以使用同一个整形参数做互斥,如果不需要互斥,简单的布尔开关即可。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有