六六の魔法世界

注册

技术分享 - 绑定技术贴 - 2022年5月15日

裙子跟随运动绑定

裙子跟随运动绑定

一、概念原理

当物体一快碰撞到物体二之前,让物体二开始受到变动。首先要在两者物体之间裂作一个圆圈,利用圆圈简单表示为裙子的构造,让物体一移动的过程在这圆圈上找到物体一和这圆圈的距离和角度,并利用这角度使的物体二产生碰撞。物体也要计算和圆圈的距离是多少才能开始受到碰撞。

、具体操作

  • (1)∶计算物体一与圆圈之间的距离

首先在每一个物体上新增骨头,并裂作一个圆圈(如图),

由于要得知物体一在移动时与圆圈的距离是多少,创立一个Locator (loc_hand_sp),将放置在长条物体的骨头底下,利用这个Locator 与圆圈上的点做计算。在计算之前,必须先知道圆圈上的点目前是处于多少。

创立一个Locator(loc_cuv)加选上圆圈线,到Constrain > Motion Paths > Attach to Motion Path。在MotionPath Attribute可以看到U Value被锁起来,这时候可以解除锁定,在移动UValue可以看到Locator在圆圈里面移动。
接著计算loc_hand_sp和圆圈线(Cuv_skirt)的点:
1.在 Maya里面到 Windows> Node Editor,在编辑区新增NearestPointOnCurve节点;
2.loc_hand_spShape的worldPosition连结至该节点的position Cuv_skirtShape的worldspace连结至该节点的curve;
3.再将此结点的参数输出至UValue的值。如图

如果你对Maya的节点不太熟悉,可以到Autodesk 官网上得知资讯https:/knowledge.autodesk.com/support/maya/learnexplore/caas/CloudHelp/cloudhelp/2019/ENU/Maya-LightingShading/files/GUID-DA9707D2-8AOD-4911-A010-8274C57D3FD3-htm.html

  • (2)∶计算物体二(裙子)与圆圈之间的距离

在Maya里面到:Create > Measure Tools > Distance Tool。将裙子的骨头与圆圈线上的locator(loc_cuv)测量距离。

  • (3)︰判断物体二(裙子)和圆圈之间距离产生变化

在Node Editor新增2个multiplyDivide计算距离多少内开始进行变动,此两节点的计算改为Divide,距离线
(DDL skirt 02 DistShape)连结至multiplyDivide1上的input2,此节点上的input1设为1,再将此节点连结上multiplyDivide2的input1,将复制input1的值到input2。
·得出此数值之后,要判定此数值是否介于距离之内,如果数字是在距离内,可产生变动,如果不是,那就保持原地。创立一个remapValue,这个节点可以放置以判断出的数值和自己设定的最大和最小的数值,如果数字介于之间就开始产生计算出结果,如果数值不是介于之间就输出想要的最大和最小的值,在这边最小值以0,最大值以1输出。将multiplyDivide2输出至remapValue的值,并更改最低数值。

  • (4):计算物体的角度并产生碰撞

创立一个新的multiplyDivide,将刚刚remapValue的值输出此节点(multiplyDivide3)的input1再将此节点输出至裙子骨头上,等等要使用mutiplyDivide3的input2作为物体的角度判定。如果角度超过一个数值,那就可以开始转动裙子的骨头。对每一个裙子的骨头重复上述步骤。

角度判定:
·创建两组骨头,并将各自的底端骨头放置在locator上(如图),

在将其中一组的骨头(直的)放置在另一组底下,由于骨头旋转值会自动转到骨头方向,将此数字祯裂到骨头的旋转上,这样就可以得知此两组骨头的角度为多少。
·在骨头(斜的)加上IK Handle并将它放置在圆圈线上的locator。
·利用之前所创立的loc hand sp加选上骨头(直的)做aim constraint,将world up type改为Object rotation up并将另一组骨头名称放上。根据此locator的轴向,更改up vector and world up vector数值。只要两个相碰再一起此角度就归0,继续在超过角度,就进行裙子骨头转动。
·创立clamp节点,将刚刚骨头(直的)连上clamp的inputR,并在MaxR调整数值,此角度如果介于此就输出为0,否则为1。将clamp值输出multiplyDivide3的input2。
由于为了让自己方便能够调整角度可以旋转为多少,再新增一个multiplyDivide,将multiplyDivide3输出是此点,然后就可以在相关控制器连接上input2。