问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

VRChat改模:如何从模型上拆分部件(不涉及权重修改)

创作时间:
作者:
@小白创作中心

VRChat改模:如何从模型上拆分部件(不涉及权重修改)

引用
1
来源
1.
https://www.bilibili.com/read/cv35016892/

本文是一篇关于如何在VRChat中使用Blender和Unity拆分模型部件的教程。文章详细介绍了使用Blender 2.93进行模型拆分的步骤,包括导入FBX文件、删除多余网格、调整变换属性、处理骨骼等。同时,文章也简要介绍了在Unity中进行模型拆分的方法。文章内容详尽,步骤清晰,适合VRChat改模的初学者参考学习。

作业环境

  • Blender 2.93(blender点org,官网下载,steam版没有2.93)
  • Blender-cats-blender-plugin(可选)
  • Unity 2019.4.31f1

Blender拆分部件

通用处理部分:

  1. 将所需模型的.fbx文件复制并粘贴一份到新建文件夹
  • 不要直接修改该FBX
  • 如果zip中没找到.fbx或仅有Unitypackage文件,则导入后在Assets对应文件夹内找到FBX,右键-Show In Explorer,打开对应路径文件夹,复制.fbx即可(无需.meta)
  • Unity-Assets中的fbx文件路径示例,带有展开箭头的模型就是FBX
  1. 打开Blender,新建文件-常规,删除自带的3个物体

  2. 左上角文件-导入-FBX,选择复制出来的FBX文件,导入设置默认

  3. 默认布局下,右上角展开Armature,找到需要拆分的部件,或者直接在场景中点击对应网格


衣装是Love Tulip,整套就蝴蝶结比较有用

  1. 删除其余网格
  • 需要几个就留几个,可以一次拆分多个;萌新最好还是一次只拆一个
  • 集合内按Ctrl+J可以合并网格,前提是UV贴图命名必须相同且使用同一贴图;如果UV不同,则合并后无论怎么上贴图换材质,模型都只会有纯色,也就是最严重的UV丢失问题(只能全部重做)
  • 如果该网格上有自己不需要的地方,可以进网格编辑模式,随意选择几个顶点,Ctrl+L选择所有相连元素,再右键删除;也可以手动选择,按W切换选择模式,有框选、笔刷等;注意前后面是否都选上了

调整变换属性

虽然对于萌新来说,Unity内的调整操作更熟悉也更方便,但有些模型的原点与质心有偏差(经典表现为旋转时并不以物体为中心),或是缩放并不统一为1(子级的Transform-Scale并不是X 1,Y 1,Z 1),导致调整困难,这是FBX本身的问题引起的,所以最好还是在Blender中进行

Unity与Blender在同数值下对网格的作用大体上相等,可以先在Unity内用预制体调整,获得大概的数值,并应用在Blender中

前提为模型无上述问题(原点、缩放等);如有,将模型导入Blender处理

两者间坐标轴大致的互换:(默认状态下)

  • Unity的+Z=Blender的-Y —— 大体为前进
  • Unity的+Y=Blender的+Z —— 大体为上升

Unity内的坐标系,前进为+Z,上升为+Y

Blender内的坐标系,前进为-Y,上升为+Z

Unity内处理要点:

  • 调整的应该是模型父级/最高级
  • 本文中模型父级/最高级的定义为包含了模型所有骨骼与网格的项目,如图所示,一般为模型的名字,如Simple Skirt for xxx、LongWavyHair for xxx,而不是Armature或下面的网格
    模型的父级/最高级示例
  • X、Y、Z都最好调整到同一数值,防止模型变形
  • 衣装,如连衣裙等,先调整Y轴缩放值,使领口和袖子大致能符合人物比例,再将X和Z也调成相同的数值;之后根据领口、袖子,以及裙子中线来调整位置,使人物大约在正中
  • 如果调整时模型并不按自身中心旋转,建议直接放弃,进Blender再调整调起来太折磨了
  • 如果旋转时变形严重,同上
  • 有时候调整子级骨骼即可解决问题,但对于萌新来说比较困难,所以pass

Blender内处理要点:

  • 一定要先应用全部变换
    变换属性,应用全部变换,使位置、旋转全部为0,缩放全部为1
  • 萌新可以开着Unity对照着做
  • 保持全选(骨架+网格)再调整,因为Blender的父子级逻辑与Unity有差异
  • 调整的方法与标准可参考上文Unity部分,互通
  • Unity内对应预制体也要套用相应数值,使PB及其碰撞属性适应人物(大小、位置等)
  • 调整完成后再应用一次变换;可以在应用前先备份一次工程

骨骼处理部分:

  1. 选中骨架Armature或其中任意骨骼,左上角进入姿态模式

  2. 展开骨架,或直接在场景中选择该网格附近的骨骼,按R旋转或者按G移动,观察网格是否整体相应运动,准备整理骨骼并将多余骨骼合并/删除

转动该骨骼,蝴蝶结整体跟着旋转

  • 以上图的蝴蝶结为例,因为是头部装饰,所以要找的那根骨骼应该在Head附近,场景中是在两边蝴蝶结的中间,为单独一根骨骼,父级为Head
  • 有时候并没有单独的一根骨骼,而是散装在Head内,那么此时应保留Head
  • 如果拆分的是头发,则有可能是Neck而不是Head,因为网格有一些地方会被Neck影响;也可以用cats的Merge Weights将Head合并到Neck,并将Neck骨骼改名为Head
  • 可以在右下角的视图显示中打开骨骼名称

打开骨骼名称显示

  1. 按Alt+R / Alt+G还原旋转/移动,左上角进入编辑模式

  2. 将该骨骼重新指定父级为最高一级的骨骼

  • 保持选中某一骨骼的情况下,按小键盘.可以快速导航至右上角集合内对应项(需要鼠标放在集合内而不是场景里)
  • 先选中需要重新指定的骨骼,再按Ctrl加选最高级骨骼(一般是Hips),Ctrl+P-创建父级-保持偏移量(鼠标放在场景内)
  • 以图中为例,最高级骨骼为Hips,而不是Armature;Armature可以理解为一个总括,或者说是该骨架的名称

Ctrl+P创建父级,保持偏移量

  1. 删除其余骨骼
  • Shift+G可以快速选择一条骨骼,选择相似元素-子级(鼠标放场景里)
  • 以图中为例,需要删除Spine、Upper_leg.L、Upper_leg.R、Skirt以及它们对应的所有子级

删除多余骨骼以优化骨骼数量

  • 可以复制一份Hips骨骼(Shift+D,右键),将其余骨骼的最高级指定父级为Hips.001,然后选择Hips.001,Shift+G一次性删除所有

复制一份骨骼并把其余骨骼重新指定父级,方便一次性清除

  1. 姿态模式内移动、旋转最高级骨骼,观察网格是否能完全跟随骨骼运动,确保网格没有被扯向原点的部分(丢失/缺少权重)

特别地:

如果拆分的是裙子等涉及多个身体骨骼权重的部件,则需要慢慢确认骨骼是否会影响网格(带有相应权重),千万不能多删

不需要的部分可以用上文的办法归总到某一根骨骼内,最后一起删除;或者用cats的merge weights合并到父级(更加保险)

想了解权重原理的,可以看我的穿着不适配衣装的文章:网页链接

有两种确认办法:

① 姿态模式移动骨骼

  • 进入骨骼姿态模式,移动/旋转裙子内的骨骼,观察网格是否有变化
  • 以图中的连衣裙为例(仅裙子,无其他配件如腿环、短裤等),移动Upperarm.L时,裙子的袖子处相应运动,说明该骨骼会影响网格(有权重),保留
  • 移动、旋转完后记得Alt+G / Alt+R还原

移动上臂骨骼时,网格变化,说明该骨骼有权重

  • 建议打开透显方便观察,Shift+Z,或者右上角切换视图着色方式

切换成透显

  • 裙骨,如Hips下的Skirt.001等,一定会带有权重,无需检查
  • 如有额外装饰,例如胸前的领结等,相关骨骼也要保留,如tie.001、chestribbon.001
  • 一般情况下裙子不会带有腿部的权重,如果有,则保留 尊重原作者权重刷法吧虽然这并不是最好的,萌新也改不来这个

② 查看顶点组权重

  • 物体模式下选中网格,左上角进入权重绘制
  • 右上角,视图叠加层,将零权重改为活动项,这样零权重的地方会变成黑色而不是深蓝色,方便区分

零权重-活动项

  • 打开透显,在右边顶点组里选择,观察网格是否带颜色;如有,说明有权重,同名的骨骼需要保留
  • 建议切到采样权重(吸管)工具防止误操作

查看顶点组权重

  • 在物体模式下,先选骨架(骨骼)再加选网格,然后进入权重绘制,此时用Ctrl+左键可以快速选择骨骼并切到对应顶点组(需要关闭顶点选择)

左上角关闭顶点选择时,可以用Ctrl+左键快速选择骨骼并切换

  • 如果网格为紫色,说明该骨骼完全不会影响网格,没有权重

网格变紫,说明该顶点组没有权重

  • 部分骨骼的同名顶点组权重虽然很少但不是没有,例如Head,只会在领子附近有一点点
  • 小键盘1/3/7切换到正交图,9为当前相反视角,2/4/6/8分别对应旋转

后续修正及导出:

  1. 回到物体模式,按A全选,包括骨架和网格,左上角物体-应用-全部变换,或者Ctrl+A

  2. 左上角文件-导出-FBX,变换部分,应用缩放一定要选择FBX全部,否则Unity内材质描边以及PB半径等都会受影响

  • 正常情况下,场景内现在应该只有网格及对应骨架,Limit to选定的物体可以不勾,将会导出场景内所有东西为一个FBX

导出设置

Unity内修正:

  1. 将新FBX导入Unity(拖入即可)

  2. 选中FBX,Inspector检查器中勾选Read/Write Enabled以及Legacy Blend Shape Normals,再点击右下角Apply应用

  • 这两条必须勾选,否则不允许上传,也可以在SDK面板中Auto Fix,但是不提前勾选Legacy Blend Shape Normals时,使用形态键会导致网格阴影变化,所以建议自己提前做好

FBX设置

  1. 拖出该FBX到场景中,找到原模的材质,并拖给FBX
    拖出材质球到Materials(展开,Elements),或者直接拖给场景中的物体
  • 如果描边炸了(liltoon的轮廓),检查上一部分中导出时缩放是否选择了FBX全部
  1. 复制并粘贴原模的PB数据
  • 如果要调整缩放,在复制PB前做好,因为模型内的碰撞体等也会对应变化
  • 需要打开Gizmos才能看到PB的范围
  • 右键PB脚本,Copy Components,再到新FBX对应骨骼,Transform处右键-Paste Component As New
  • 以图中为例,只需粘贴头部蝴蝶结的PB即可

copy PB,最好打开Gizmos对照

  • 如果PB半径和原模的相差甚远,还是导出时FBX缩放的问题,见上文
  • 如果原PB有Ignore,需要自己重新指定新FBX内的对应同名骨骼才会生效;同理Root Transform,有些PB是从第二节开始的,可以直接粘贴到新FBX内的第二级骨骼,省去处理该项的麻烦
  • 碰撞体直接从原模拖到对应骨骼就好
  • 如果新FBX内已经没有对应骨骼了(如放在Chest的Collider),可以在FBX下新建一个空物体,把碰撞体拖进去,用MA Bone Proxy(作为子级,保持原有位置和旋转),目标选择对应骨骼;如果MA内没有对应位置的骨骼(如Breast.002,第二节胸骨),则更改子路径Sub Path,如Hip/Spine/Chest/Breast.001/Breast.002

用MA组件将碰撞体绑定给对应骨骼

  • 图中我将原模移出原点一些位置,方便观察和参考,但处理碰撞时需要把原模位置归零,否则碰撞还在外面
  • PB相关可以看我的文章,有详细的参数介绍:Physbone参数讲解/数值设置【VRChat】
    网页链接
    Booth上的无料Physbone复制插件(3919818):
    【無料】PhysBone/Colliderを別アバに移植(コピー)するUnity拡張ツール - PhysCopy -
    作者:せぃが君のおみせ屋さん
    PB Copy插件
  • 该插件的缺点是只认同名路径,差一点都不行,且PB内的Root Transform、Ignore等数据并不会自动变更为新路径下的骨骼,需要手动修正
  • 第一行放已有PB的原模预制体,第二行放需要被复制PB的模型(目标模型)
  • 功能区依次为:清除目标模型内的PB以及相关Collider、清除目标模型内的DB以及Collider、不检测目标模是否有AvatarDescriptor(衣装类需要勾选)、复制前进行备份
  • 点击实行后,下方文本框内会显示复制失败的项目的路径

Unity拆分部件

仅使用Unity也可以做到拆件,类似的操作我在穿着不适配衣装的文章中详细写过,这里就简单提一下要点
详见【Unity内穿着不适配衣服】部分:
VRChat改模:如何让角色穿上不适配衣服
Booth上的有料拆分插件(5372808,800JPY) :
【VRChat】Cloth Separator (Unity Tool) 作者:cooki
精准删除和保留相关骨骼 且PB和碰撞也会设置好 但只能按照FBX内划分好的网格进行拆分
Unity内拆分(手动,简易版):
1.复制一份模型(预制体即可,不需要从FBX开始做),删除多余网格
2.进入Playmode,移动骨骼以确认骨骼是否会影响网格
3.退出Playmode,删除多余骨骼,以及多余的碰撞体、PB等
4.完成,建议保存为预制件,备份

拆分篇完结

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号