肥花_时刻保持Q弹

技能树乱点。建模/绑定/k帧/代码/黑科技研究(?)
攻厨。老婆和老攻三年一换,一夫一妻自产自销。

古剑二MMD&绑骨教程(5)刚体,J点,物理。 [16-12-02微调]

注:本章出现的一切参数设置的具体数值不具备普适性。此教程是15年初写的了,我后来使用的谢衣模型跟这个物理并不完全一样。并且每一个不同的模型,物理都有微妙的变化,这个需要自己反复尝试之后获得经验,然后才能找到最合适的数值。


下面是我的一只阿阮(´・ω・`)


我们的模型在MMD中运 动的时候,身 体四肢是通 过调节骨骼来带动相应部位运 动的,但是一些类似于裙摆、长发、飘带等物,并不需要我们手动调节,而是通 过MMD中的物理演算功能自动计算出运 动状态。具体的运 动状态跟刚体和Joint点的属性设置有关。详细的概念解释在上面那个连接里有,在此就不多说了。我们还是直接开始实践。


用PMDEditor打开模型,将身 体相关的骨骼选中,包括头、首、上半身2、上半身、下 半 身、左/右肩,左/右腕,左/右ひじ、左/右足、左/右右ひざ、左/右足首。手和手指什么的就不管了,不必这么精细。然后在view界面点 击【编辑】-【选择骨骼】-【基础刚体作成-骨骼追从】。弹出窗口点确定。这个操作的意思是让PE为我们生成跟每一个所选骨骼关联的刚体。


然后将窗口下方的显示刚体图标点上。这样刚体就在窗口显示了。上方的【选择范围】也只选择【刚】,因为后面可能要选择刚体进行操作。


在编辑界面的【刚体】列表中能看到生成的刚体。每一个刚体都有一个关联骨骼。因为我们是用PE自动生成的,所以名字也自动设为了跟对应骨骼一样的名字,比如上半身2这个刚体的关联骨骼就是上半身2这根骨骼。

刚体类型有三种,一种是骨骼追从,即当骨骼运 动时,刚体就跟着运 动。比如我们刚刚建立的身 体躯干和四肢的刚体就是这一种。

第二种是物理演算,即刚体本身的运 动由MMD中的物理引擎模拟出类似真 实世界情况下的运 动,而骨骼反过来跟着刚体动,模型点再跟着骨骼动,从而模拟出真 实的三次元效果。物理刚体因为受重力影响,所以通常都必须有J 点将它们相互连接起来,不然就直接掉在地面上,模型也会跟着摊成一堆在地上。J 点的作用可以理解为铆钉,在PE中显示为黄 色的小正方体。

第三种是物理+骨骼位置配合,这种应该是刚体依然有真 实的物理计算,但是位置会相对固定在骨骼位置。我并没有使用过这种,这里暂时不讨论。

在PE中刚体有三种预设形状,球形、箱型(长方体)、胶囊形。自己根据情况选择,比如这里四肢通常用胶囊形。

大小一栏用来调整刚体的尺寸。

物理演算是用在物理演算型刚体上的,现在我们暂时不管。

注意刚体名称左边都有两个色块,第一个色块表示刚体类型,骨骼追随的刚体是绿色,物理演算的刚体是橙色,物理+骨骼位置的刚体是黄 色。第二个色块表示该刚体的分组。

分组和非冲 突是用来判定各个刚体之间是否能互相穿过。

然后,现在这些刚体都是身 体部位相关的,彼此可以互穿。我们把它们的【分组】选为1,【非冲 突分组】勾选1。这里的意思是,凡是勾选的分组中的刚体都可以跟这一组刚体互相穿过。(虽然骨骼跟随的刚体并不需要这个大概…… 但是意义上是这样)


将各个刚体的形状,大小,位置调好。刚体以能尽量遮盖住模型相应部位的全部点,并且略大一些为好,比如腿上的刚体,就设为比腿略粗一点。因为到时候这些刚体与裙子的刚体碰撞后弹开,以确保不会发生裙子穿过大 腿的问题,如果刚体太细,就会发生穿模。如果太粗,有可能彼此冲 突,刚体碰来碰去,表现为MMD中人物静止的时候全身衣服头发乱抖。刚体的大小以后在调试过程中也会再根据实际情况修改。

在编辑界面的刚体列表中可以选择,或者在view界面直接用鼠标点选或者框选。但是确保上方的【选择】有且只有【刚】,不要把骨骼也选进去了。

我目前调成了这样。当然这不是最终的,后面当做好裙子后,还可能需要细化。


剩下的大部分都是物理刚体了。我们试着绑一下谢波波的外袍。用曲面自动设定插件可以为选定的点自动生成骨骼、刚体、Joint点,并且自动刷好权重。

首先选择外袍下面部分的点,这些部分是将来会飘起来的部分。


假如是用我提 供的地址下载的PMDEditor,因为我已经装上了曲面自动设定插件,所以只要点 击【编辑】-【插件】-【User】-【曲面自动设定插件】。(没有的去上一贴找一下插件原配布地址(`・ω・´) 


在弹出的参数设定界面中,选择【PMX模型】,然后点 击【选择顶点·模型取得】。于是就会看到界面中部分内容被自动填写了。我们最好改一改。【分割数】是圆周方向和高方向各有多少排刚体。我为了能让刚体尽量整齐地排布在曲面上,圆周选了略大的数字。【接续】是指裙子跟哪个刚体和骨骼连接。这里我们的袍子跟裙子差不多,所以就默认接在下 半 身(视具体情况而定,其实我后来发现选的第一排点更接近上半身骨骼,于是又改成上半身了。还是看自己模型情况)。最下面的【header】是规定生成的骨骼、刚体、横纵Joint点的名称。这里我把默认的短裙改成外袍了。


然后切换【详细设定】标签,【制御面设定】选择板状。因为我们现在选的这个袍子是有开口的。如果是一整圈的裙子才选择筒状,比如阿阮。【制御线设定】是跟接下来如何用4~5个点决定出28x8个刚体的位置的计算方式有关,也就是一种补间的算法,贝塞尔曲线还是样条曲线之类的。不同的算法 会有微小的差别,一般就选【样条曲线制御点5个】,也可以在调试的时候切换。


然后【刚体】标签下,就把分组改成了第二组,非冲 突也第二组,其余默认。(线性补间那个选项其实挺好用的,不过第一次我们先不用了,熟练了以后自己尝试一下自然就知道是什么了。)


然后其余都默认,点 击【基本·详细设定适用】。


以下密集注意





等一会儿就有东西出来了。此时先不要关掉插件参数设定窗口。在view界面会看见密密麻麻的一堆J 点,刚体,骨骼。


我们点 击插件参数设定窗口下方的【制御点编辑开始】,就会发现view界面的 J 点突然少了好多。但其实它们都在,只不过现在只显示这些供我们调整的部分。

我们把view界面上方的【选择】改成有且只有【J】,即我们现在只能选择 J 点。下方的显示刚体关掉,只显示 J 点。我个人习惯把顶点也显示出来。


先用三视图中的俯视图确定一下粗略位置。将J 点们围绕袍子四周围一圈。注意别把J 点的顺序摆错了,不然最后生成一个扭曲的面。我图中红色箭头表示正确的位置。移动后如右图。


然后点 击插件设定界面下方的【制御点编辑完了】。在view界面查看一下结果,发现很不好(╯‵□′)╯︵┻━┻,完全没有贴合衣服边缘。


所以我们再点 击插件窗口的【制御点编辑开始】,修改一下。把两边的J 点往上移动一点。


再点【制御点编辑完了】。此时效果似乎好多了。如果还不行,可以自己反复试几次。也可以把【制御线设定】改成贝塞尔曲线。看实际情况,哪个算法效果好就选哪个。


但是还没完,因为这只是俯视图。我们再次点 击【制御点编辑开始】,在左视图和正视图中将J 点的位置调好,让他们整齐地贴在袍子上。


确认无误后,点 击【制御点编辑完了】。此时点开显示刚体,看一下刚体们是不是很整齐地贴在了外袍上。


如果觉得满意了,就关闭参数设定窗口。

此时保存了放进MMD里面加载个舞蹈动作,然后播放,发现谢波波的白袍子已经能运 动了。(注意物理刚体相关的部分在MMD中只有当物理计算打开的时候才显示,默认的是仅在播放时有物理计算。)

不过还有些不自然。于是更多细节的东西还要在刚体和 J 点的属性里设置。接下来的设置是按照我个人喜好来的,最后的谢波波的袍子比较飘逸。

先来看刚体的物理性质。编辑界面的【刚体】列表下,我们看到外袍的刚体是箱型,也就是一块块长方体。有幅(长度)、高(高度)、奥行(厚度)三个参数。

分组和非冲 突与刚才在插件里设定的一样。

然后还有物理刚体专有的【物理演算参数】,包括质量、移动衰减、回转衰减、反弹力、摩擦力等等。

这几百个刚体命名和排列是有规律的,一层一层的,很容易看出来。为了防止裙子穿过大 腿,我们把刚体厚度加大些。最上面一圈刚体我设定厚度只有0.1,因为将来里面的裙子,以及其他条条带带什么的要设定刚体,为了防止冲 突了乱撞。下面的几圈从0.2-0.4都有。

刚体的质量,主要在调裙子时,尤其是长裙,通常设定刚体质量从上到下依次减小。这样会跟全部设成相同质量的效果有明显差别,表现为裙子下层更容易被上层带动,在模型迅速转圈的时候会更容易展开而防止穿腿。比如我一般是最上层的质量1,第二层0.9,然后0.8,这样。如果是不转大圈,而是跳慢舞,想要有垂感的裙子,那就不用这样设定了,让刚体质量都差不多。

移动衰减和回转衰减,(这个参数的值域是0~1),我的理解这个就像惯性一样,设为0的时候甩的特别不羁,设为1的时候粘滞感特别强几乎不动。按照裙摆的特点,通常是由上到下衰减值越来越大。这里我将最上面两圈的刚体衰减量设为0.1,然后向下过渡到0.3,0.5,0.9。假如想 做出粘滞感强的,可以设定0.99,0.999,这样。我一般0.999最下层。

摩擦力这组刚体与其他组刚体触 碰时的摩擦力,就跟三次元的理解差不多。反弹力也是跟三次元的理解差不多。我个人喜欢把摩擦力都改成0。有人喜欢真 实的摩擦效果就设大一些。


现在再放进MMD里面跳舞,应该会比之前好一些了。但是更细节的设置需要在J 点属性中完成。我们切换到【Joint】选项卡,发现J 点的名字很长。不过是有规律的:J 点名|接续刚体A->接续刚体B。

这里J 点有两种,纵 J 点和横 J 点,横 J 点会在名称后面有个“横”字后缀。以裙子或袍子为例,纵 J 点连接上下两个刚体,横 J 点连接左右两个刚体。横 J 点在很多时候并不需要,但是裙子类物体必备,因为裙子要展开的时候,横排相邻的两个刚体彼此之间的相对运 动也有限 制,需要有 J 点来设定。


然后看一下右边的各属性。【接续刚体A】和【接续刚体B】是该J 点连接的两个刚体,例如第一层J 点的接续刚体A都是下 半 身,接续刚体B是袍子第一层对应的刚体。第二层 J 点连接的是袍子第一层的某个刚体和第二层在同一列的刚体。

横J 点也有接续刚体A和接续刚体B,但连接的是裙子同一层的相邻两个刚体。

【位置/回转】一栏是该J 点本身的坐标和旋转信息,不必改动。

【限 制】是规定这个J 点所连接的两个刚体的相对运 动时的角度和距离限 制。


以下图的这个纵J 点为例,如果X、Y、Z方向的移动和回转都是0的话,那么它连接的上下这两个刚体就永远只能保持现在的这个相对位置关系。但是为什么刚才我们的谢波波在MMD中跳舞的时候衣摆还是动了呢?这个黄 色的J 点是带弹力属性的,尽管设置为0,但是在运 动的时候还是会微微产生相对位移和旋转。然后每一排刚体都有这么一点点的偏移量,整体就很大了。我以前第一次绑谢波波的时候给这个袍子设定14x7个刚体,然后放进MMD里就明显非常僵硬。


那么这个【限 制】里分别的旋转和移动该如何理解呢?

建议大家用0222版的PMXEditor来打开了看,选中J 点后,会在每个 J 点上看到它自己对应的坐标轴。

而实际操作过程中,我是根据J 点自带的那个小坐标轴来判断相连刚体运 动的相对方向。移动方向正负很好理解。旋转方向,可以用右手法则来帮助判断。

上个图,帮助理解旋转的方向:


比如,假设你的右手握住了X轴,拇指朝X正方向,那么四指弯曲方向就是沿X轴正方向旋转的方向。然后再假定刚才那两个刚体,上面的那个刚体(也就是接续A)是不动的,那么下面的刚体(接续B)相对上面的刚体(接续A)沿X轴正方向旋转是什么样子?这下就能想象出来了。

大家应该也注意到了,J 点自带的小坐标跟整个PE中的世界坐标系有所不同,是根据J 点自己的【位置/回转】栏的数值而定的。

比如我们自己生成的 J点,J 点自身的回转都是0,这种情况下J点自身坐标系就是和世界坐标保持一致。


或者利 用曲面自动插件做出来的带有旋转数值的 J 点,就会和世界坐标系不一致了。


但是我们不用管【位置/回转】里面那些数值的含义了,因为只要选中一个J 点,就会在J 点上显示那个小型坐标轴,也就是该J点的自身代 表的坐标系,此时判断它所连接的刚体的移动与旋转方向应该是按照这个小的坐标轴来,然后设定【限 制】栏的项目即可。

比如仔细看下图,每一个选中的J点上都有一条细红线和细蓝线,就是这个J 点自己的X轴和Z轴。以这条裙子为例,假如我给这些J 点的【限 制】的【回转】栏都设置X方向0~90度,那么就相当于这条裙子每一条边都在向外展开。(啊窝捉急的语言表达能力。。。大家伸出你们的右♂手,自己试一试)


然而即便如此,给这几百个刚体一个一个决定它们在实际的运 动中沿着哪些方向在什么范围内旋转比较合理,也是人干事。所以这里我还是偷懒了,直接选定袍子的第一层所有刚体,然后【限 制】栏的设置参数如下。批量给它们较大的活动范围。(这个并非我最后的谢衣的数据。物理的参数总是需要反复修改的。。。)


选中第二层刚体,【限 制】栏的参数设置如下。值小一些。


然后剩下的我就不改了,就保持0。如果觉得需要,可以再改。

假如想让裙子更加酥 软自然,应该给横J点也设置旋转。也就是横向相邻的两个刚体也会有相对旋转。同样是根据J点自己的坐标系来判断方向。(如果你实在是捉急可以XYZ全都一样)

然而这次谢波波的裙子已经够软 了,所以我就没有设定。

。。。再强调一遍,以上参数不一定科学不一定准确更不具备普适性,如果有谁套用了发现不对不要殴 打作者 。

然后我们在MMD看看目前的结果如何,发现似乎差别不大。打开显示刚体看一下(你们不一定要打开,我这里是为了说明原理。MMD的具体操作以后的教程会讲。)

站立的时候,袍子上的刚体是彼此紧密挨着的。


蹲下的时候,刚体们还是紧紧挨着的。


但是为了让袍子更飘逸,在一些瞬间它应该可以变成这样。(虽然下图夸张了些,因为我之前把袍子打开过所以显得很宽大。但是对于一些妹子们的长筒裙,这一点非常重要。)


也就是说,这些刚体可以彼此拉开一段距离,或者重合一部分,从而带动整个裙子/袍子展开和收缩。

这个效果是通 过修改J点的【移动】属性值,使被这个J点连接的两个刚体可以在指定方向指定范围内相对移动。

这里我选中了第一层的横J点,批量设定了较小的移动数值。


然后逐层增大,最后一层的横J点我设了每个方向-2~2的移动范围(其实太大了,正负1就差不多了,比刚体的宽度大太多了容易穿模)。


这个数值也是视具体情况而定,因为这里的刚体多而小,每一个移动的范围也小。

注意这里改的都是横J点,因为我要的是同一排相邻的刚体能够相对位移。纵向的通常不太需要。不过阿阮的长裙我设定了少量纵向的移动。

现在袍子变的更飘了。但是当袍子展开时,刚体之间有了缝隙,此时就容易被别的刚体钻入,发生穿模。比如腿,将来要绑的里层的裙子,还有其他的条条带带之类的,会穿进来。所以我们再把刚体的宽度调大些。我的效果如下图,横排相邻刚体之间都有很大的重合,如果展开,仍然能覆盖住整个袍子而不被其他刚体穿过。当刚体太多看不清的时候,可以打开刚体轮廓线显示。


现在这个袍子的物理就改好了。

然后里层的下裳也是用类似的方法设定,这里就不重复说了。

稍微讲一下其他部位的物理。

还是以充电器为例,在建好骨骼并且刷好权重之后,选择这些骨骼,


然后点 击view界面菜单【编辑】-【选择骨骼】-【基础刚体/连接Joint作成】。


然后就自动生成了与骨骼绑定的物理刚体和连接这些刚体的J点。

效果还可以,接下来我们去编辑界面的刚体列表里面把它们的大小调整的更合适。并且把分组换一个跟之前的刚体都不一样的,比如我这里是4。非冲 突也勾选4。


刚体的物理性质自己也稍微设置一下。

然后检 查一下J点,在Joint列表中,我们发现生成的第一个J点没有规定好接续刚体。因为辫子上的第一个J点连接的是头刚体和第一截辫子刚体,所以我们手动修改如下图。(记住每一个J点一定都要连接两个刚体,不然模型放进MMD里面就会报错强退。)


因为辫子刚体只有一列,这里就没有横J点了。我不需要辫子的上下两块刚体发生相对位移,所以纵J点的【移动】我都默认0。【旋转】的参数根据个人想要的效果来设置。

下面还有一栏是设置旋转和移动时的弹力,这个的意思就是这个J点链接的两个刚体需要受到多大的外力才会发生旋转和移动。


其余的部分也用合适的方式建立物理刚体和J点。具体就不举例了。以下只说一下常见问题的解决方式。

如果刘海甩的太过不羁,那就把J点的角度改小了,刚体的衰减调大。

如果辫子或者胸前的两条头发钻到身 体里去了,有可能是身 体的刚体太小,没有覆盖模型的整个身 体,或者是身 体刚体太大,辫子的旋转范围太小,碰到身 体刚体的时候甩不开,只能进入身 体卡在里面(。)。多数情况还是刚体太大或太小的原因。PE提 供的刚体形状也确实没有一个合适的。不过我们可以给上半身2多建几个刚体,拼在一起。方法是在编辑界面的刚体列表,右键上半身2刚体,选择【这个位置追加 (Ctrl+I)】,然后会出现一个新的刚体。我们将它的【关联骨骼】设为上半身2。用类似的方法再建立1-3个刚体,调整大小位置,使它们刚好盖住上半身。我的结果如下图。


上图的袖子,是我当初为了让袖子自然于是用曲面插件做的,围了一圈。不过在跳剧烈动作的时候,袖子会有点蛋疼…… 而且刚体多了MMD压力也很大。于是我后来的模型都是只用两个刚体做谢勃勃的袖子了。如果是布线精细点的,或许还能尝试别的方法,但是谢勃勃的袖子布线太蛋碎_(´ཀ`」 ∠)_

谢波波的两层裙子(。)老是互相穿模,有的时候还跟大 腿穿。这种情况可能有但不限于以下三种原因:

  • 刚体厚度不够,没有完全覆盖模型材质,模型的布线又特别少,于是刚体旋转的时候模型未必是完全一样的形状,于是前后两层裙子发生透过。这个,减少J点旋转数值和加大刚体厚度可以缓解。

  • 连接刚体的纵J点旋转范围太小或者横J点移动范围小,裙子碰撞后需要展开的时候展不开,只能互相打架甚至卡在一起。乍一看仿佛和上一条互相矛盾,但这就是调 教物理最tricky的地方,你需要自己找到一个平衡,因模型而异。

  • 刚体宽度不够,展开的时候彼此之间出现缝隙,被其他刚体穿入。这个,加宽刚体就有显著效果了。

下面是我绑的阿阮长裙效果,这个是做到了大幅度动作尽力不 穿模的同时保持一定的裙子垂坠感,也是反复尝试数值做的。

(Motion:MON)

(Motion: yurie)



评论(35)

热度(234)

  1. 共6人收藏了此文字
只展示最近三个月数据