vrchat庇护所吧 关注:217贴子:2,417
  • 12回复贴,共1

宝宝巴士之解决模型身体拧麻花的问题(形态键)

只看楼主收藏回复


总之先写个标题


IP属地:中国澳门1楼2024-11-20 16:10回复
    去去去去去去年、小斩酱、Yuukini. . . 被楼主禁言,将不能再进行回复
    省流:拧麻花是身体形态键动画导致的
    ~
    选中人物的身体网格(躯干,不是面部),检查器Inspector里找到蒙皮网格渲染器Skinned Mesh Render,有一项【BlendShapes】,这个就是该网格(模型)的【形态键】列表
    如果你是新工程,该项默认是收起来的,点一下旁边的三角▲就能展开
    ~
    一般情况下,【身体】的形态键的值为0时表示对应的身体部位正常显示,为100时收缩成一条线,目的是减少身体与衣装的穿模,避免穿插
    可以看到,图里有相当数量的形态键的值并不为0,在模型上的表现就是这些部位被缩小到几乎看不见的程度,也就是所谓的“拧麻花、“收成一条线”


    IP属地:中国澳门2楼2024-11-20 16:19
    收起回复
      手动调整形态键的值后,进Playmode又还原回去了,怎么办?
      本质上都是【身体形态键的调整跟衣装穿脱绑定】导致的
      ~
      一种可能是原因是,人物原本的【FX】(Playable Layers下的动画控制器,人物的各种噱头基本都是由它控制和实现)内使用的衣装开关动画,包含了身体形态键的调整

      以一组开关裤子的动画为例,动画内不止录制了裤子网格的开或关,还包括了大腿的形态键值的调整
      图中的打开裤子的动画中,红框的部分就是人物身体形态键的调整,属性是【Skinned Mesh Renderer】,最前有很明显的蒙皮网格的图标,值都为100,表示隐藏该部分网格
      综合以上内容,这份动画最终会导致:打开裤子+隐藏大腿到胯部的身体+对其他两个关联网格的调整,并且是同时进行的
      ~
      *解释一下上面的超纲部分,萌新绕晕了可以不看:
      动画对于另外两个关联网格的处理是,关闭底裤(减少穿模)+调整衬衫的收紧程度(契合脱裤时的状态)


      IP属地:中国澳门3楼2024-11-20 16:40
      回复
        另一种可能的原因,作者在【衣装】网格上使用了类似LI Prop(lilycalInventory)的组件,在用轮盘开关衣装时,组件会同时修改身体形态键的值
        ps.这个组件,一般是衣装制作者使用,没见哪个人物模原作者用的

        除了上面提到的LI组件,【MA】(Modular Avatar)也有可能,特别是MA Merge Animator
        它的实际功能是在Playmode下自动混合动画控制器,也就是将新控制器内的动画添加到人物FX内
        而这些动画内,可能就包含了上文所说的身体形态键调整,导致拧麻花


        IP属地:中国澳门4楼2024-11-20 16:53
        收起回复
          开始讲解决办法
          ~
          对于LI Prop组件:
          1.一刀切法,直接右键移除组件,但开关功能也会被一起带走
          2.稍微进阶一点的办法,【联动更改(高级)-修改形态键】,直接删除【网格体】,移除该衣装网格的开关与身体的关联,相比上一条,能保留开关功能,但增加了穿模的可能
          ~
          ps.这个组件,我接触的不多,试了一下发现并没有想象中好用
          大家还是换其他自动化插件吧


          IP属地:中国澳门5楼2024-11-20 17:04
          回复
            对于MA:
            1.移除,但是不仅是开关,所有噱头也会跟着被移除
            2.删除该动画控制器内,跟开关衣装有关的层Layer
            ~
            以下还是超纲部分:
            第二点的基础上,可能还需要删除身体形态键相关层
            有些作者会单独录一份调整身体形态键值的动画,并用Parameter Driver来实现联动
            该VRC组件附在FX的动画上,当条件满足、运行到该动画时,会触发该组件,使其指定的参数发生变化,从而触发另一层的相关动画
            ~
            以图中为例,当运行到Pants_on(打开裤子)时,组件会让参数【uplegL_hide】(Bool类型)变为True(Value打勾),满足了身体形态键层的条件,让左腿uplegL隐藏
            ~
            ps.这种方法是真的少见,因为有个致命的缺陷,Parameter Driver组件的网络同步优先级很低,经常会出现后进房间的人看不到相关变换的情况,可能会导致一些很尴尬的情况🫠
            那什么高优先级的呢?轮盘就是最高优先级,轮盘里的参数直接对应的那组动画一定能同步


            IP属地:中国澳门6楼2024-11-20 17:26
            回复
              对于人物原本的FX:
              1.切了,整个删除,让FX一栏空着,这样绝对不会有Playmode前后不一致的问题(除非有上文提到的组件)
              2.跟MA的情况类似,删除动画控制器内相关的层
              想要保留开关功能,得自己重新录动画重新写FX才行
              ~
              超纲部分:
              那么如何新建一个FX呢?
              资产Assets内(平时存放文件的地方),右键,新建Create-动画控制器Animator Controller,可以作为新FX使用
              ps.新的菜单和参数也可以这样创建,在Create-VRChat-Avatars下,Expression Parameters是参数、Expressions Menu是菜单


              IP属地:中国澳门8楼2024-11-20 17:54
              回复
                接下来讲讲修改动画的办法
                无论怎么修改,都建议先复制一份原文件备用,包括FX和动画
                ~
                1.选择人物当前的FX,单击,在资产Assets中找到对应的文件,双击打开
                2.找到开关衣装相关的层,如果你有困难可以用翻译软件,命名一般是衣装部件的英文/日文或是图上这种toggle_xxx
                3.单击该层,再选中动画,点击右边Motion中关联的动画,找到资产Assets中的动画文件

                4.将动画拖给人物(注意层级,参考图上),人物会自动生成一个控制器,此时就可以修改动画了

                5.切到【动画Animation】选项卡,如果你的工程还没调出来过,按Ctrl+6,或者上方白色栏窗口Windows-动画Animation-动画Animation
                6.删除动画内所有跟人物【身体形态键】有关的项目,以图中为例,蓝色部分全部都要删除

                7.重复2~6步,将所有涉及的动画都修改掉
                8.现在所有衣装开关/切换动画都不会影响身体形态键了
                ~
                MA Merge Animator的场合:
                大体上和上文相同,只不过第1步中的FX要从组件内寻找


                IP属地:中国澳门9楼2024-11-20 17:56
                回复
                  解决办法最终省流版:移除FX并重做开关动画,或是删除动画内形态键相关项


                  IP属地:中国澳门10楼2024-11-20 17:58
                  回复
                    如果不用lilycalInventory或者MA这样的工具,自己做动画同步形态键更改是很麻烦的,即使用了Parameter Driver也会有网络同步的问题
                    最优解是有的,也就是减少需要用形态键的场合,少缝点东西,或者干脆优化掉开关,这样形态键只需要调个固定值就ok😙


                    IP属地:中国澳门11楼2024-11-20 18:07
                    回复