在世界这作里,骨架是天然存在064、067这两个裙子辅助骨的;但在荒野里,这类辅助骨全都是依赖jcns定义的,所以你就算给模型加了辅助骨骼,没有jcns的话它也不会动。
然后呢,jcns还需要有pfb的调用才会生效,不是放上去就能生效的(卡表的优化你就学吧),所以还要改pfb、或者用固定的那几套衣服(如刺花蜘蛛)。
要说有什么好处的话,那就是——jcns的辅助骨是比较自由的,可以让它完全跟随腿部抬起、也可以等腿抬到一定角度后再抬起、还可以让它抬起腿部的一半或者是两倍。
如果看到这里,你还是觉得做辅助骨利大于弊,可以接着往下看,我会讲jcns是什么、该如何编辑,以及如何通过改pfb让jcns正常生效。
jcns,全名joint constraint(关节约束),它的作用是把一个骨骼的旋转映射到其他目标上,包括但不限于其他骨骼的旋转/位移/缩放、形态键数值、材质参数等等。
我们常见的用法一般是把一个骨骼的旋转映射到其他骨骼的旋转上,也就是辅助骨。
你可以在万字教程里、或者我发的微调版jcns看到,当你使用jcns且添加了指定的一些辅助骨后,你就可以把裙子骨骼绑上去,这样就会让裙子有更好的表现。
上面两个帖子的辅助骨,都是在大腿骨抬起的0~120度内,原地复刻大腿骨的旋转;往后转,或者往前超过120度就不跟着了:
这个旋转角度,甚至包括映射的比例,都是可以自定义的。具体而言,它是通过三组坐标构成的双折线,来具体定义是如何映射的:

三个坐标分别为A=(0,0)、B=(-25,0)、C=(-100,-100),连成A-B-C:

当你的输入角度作为x落在上面的时候,算出来的y,就是映射过去的角度。比如在这里面x=-62.5解出y=-50,最终效果就是大腿抬起62.5度,裙子骨对应抬起50度。
A-B和B-C这两个折线顺序先后无所谓,A可以在左边,C也可以在右边。
但是不能出现垂线,垂线会直接被忽略掉:

如果AB与BC两条线投影重叠(夹成"<"或者">"的锐角),那么整个映射都会失效:

听上去非常抽象?那我们来举个具体的例子:

这个是我荒野的赛希mod所用到的其中一个辅助骨。
可以看到,是L_Thigh(左腿)的本地X轴驱动L_Dress_HJ_00(左裙辅助骨)骨骼的本地X轴。这个本地轴和平时你旋转的方向不太一样,在blender里按R之后,按两次X、Y或者Z,才是局部轴,可以自己试试。
辅助骨只要名字对上了就行,不需要从其他模型里面拿,直接从原有的骨架里复制出一个骨骼然后改名也是可以的。
由于抬起是负角度,所以实际上是,当左腿抬起0~25度时,左裙辅助骨不动;当左腿抬起25~120度时,左裙辅助骨才跟随抬起0~120度。
因为左腿抬起25度时,裙子辅助骨才开始抬起,所以它抬起的速度会比左腿略快一点(速度差不多是120/95=1.26倍左右)。
再举一个例子,假如说我做的模型的裙子是个大裙子,本身就和腿有一定距离,我想让裙子抬起的角度只有腿的一半,那要怎么做?

(拿迷子火烈鸟的一个mod作为图例)
假如说我只想让辅助骨最多抬起60度,输出范围就得是0~60度。裙子抬起只有腿的一半,换句话说就是腿抬起的角度要是裙子的2倍,所以来源范围就得是0~120度。因为抬起是负角度,所以就得这么设置:

不考虑做双折线的话,只要写终点就行了,这样可以简单理解为 0~120度 -> 0~60度。最终效果就是这样的:
jcns是可以同时映射XYZ三个方向的,也就是你可以做到在抬腿的同时,让骨骼也实现外张。
首先我们要确定外张的轴是哪一个——因为局部坐标系和全局是不一样的,选到辅助骨,点R之后按两下Y或者Z,来确定哪个是外张:

这里我们通过按了两下Z确定它是骨骼的左右旋转(注意右上角,左右旋转在全局系中是Y,但是局部系中却是Z),然后大于0是外张。
然后我们新建一个约束:

写一下目标骨骼和来源骨骼的的名字,改一下映射的轴向。
我们想要腿的抬起(-X)映射到裙子的外张(+Z),所以驱动源的要改成X、目标的要改成Z:

最后填一下要映射的数值。腿抬起是负值(-X),裙子外张是正值(+Z),所以来源我们要填负的、目标要填正的:

最后的效果就是0~30度外张(最大张开15度),25~120度抬起(最大抬起120度):
这里的外张15度不完全对,它只有在腿没有完全抬起的时候才会外张;因为旋转全都是局部系,当腿抬起的时候因为万向锁问题,外张的这个角会逐渐缩到0。
换句话说,坐下的时候因为腿完全抬起来了,裙子会完全无法外张,因此坐下时裙子左右侧的穿模通过jcns是无法解决的。
如果pfb里没有调用jcns,就算放了jcns文件也是无法生效的,所以需要检查pfb里面有没有jcns的调用。我们用REECE来打开刺花蜘蛛腰部的pfb:

可以看到pfb里是明确有(打勾)JointConstraints组件的,展开它:

这里写了jcns的调用路径。
所以如果你想让jcns生效,要么就用刺花蜘蛛腰部这种自带jcns调用的装备,要么就自己改一个pfb出来,要有jcns调用且打了勾、写了路径。
除此之外,jcns和chain2物理还有结算顺序之分,jcns先生效和chain2先生效,两个最终结果是不一样的。比如jcns先于chain2结算,那么物理就会被辅助骨的运动甩起来;但是chain2先于jcns结算的话,就不会。
我们打开chain2组件,看看Update Timing这个属性:

ConstraintsBegin、ConstraintsEnd指的就是在jcns作用之前/之后再计算物理,Last就是在最后计算物理。这三个的最终效果是不一样的,可以自己尝试改改,看哪一种更好用。
会用emv的话也可以在游戏内调整chain2的这个属性,当场就能看出结果:

jcns组件本身也有一个Update Timing,这个对效果应该也有影响,但我没有试过,感兴趣的也可以自己试试。
blender安装,建议4.3或者5.1,安装后把jcns直接拖入窗口就能导入:

这里建议先导入mesh、再导入jcns,选上mesh的骨架,之后就能在bl里用驱动器绑定,提前预览效果(像上面几个动图那样):

导入后点文件头,在这里点应用全部驱动器,就能够把辅助骨的映射效果绑到骨骼上了。不过这个预览仅供参考,还是请以游戏实际效果为准。
点击对应的约束就可以编辑了,不想要的直接删掉即可。如果你想让两个来源映射到同一个目标上(一个目标指的是骨骼、轴向、变换完全一样,有一个不一样都算两个目标),不要创建新的约束(如果创建新的约束,后面的约束会覆盖前面的),在这里点添加:

按上面的三个例子修改数值,就可以导出了:

映射是可以任意骨骼的任意旋转,映射到任意骨骼的任意旋转、位移、缩放的,所以说不定能实现一些意想不到的效果。
by 谛听 · 来自踩蘑菇PC端
更新于 2026-08-21