当前位置: 首页 > news >正文

Maya绑定案例:摆动、扭曲、拉伸(样条IK高级扭曲、表达式)

做一个拉伸旋转的效果

目录

一 基础模型搭建

1 创建立方体

2 创建骨骼

3 骨骼蒙皮

二 摆动效果

1 创建样条IK手柄

2 给线蒙皮

3 控制器 控制 大关节球:P

三 扭曲效果

1 上色

2 打开局部旋转轴

3 样条IK高级扭曲

四 拉伸效果

1 测量长度

2 表达式

3 优化表达式 y=x√

4 优化表达式 y= x^n


一 基础模型搭建

1 创建立方体

上下两个大盒子 相当于控制器,中间的小盒子相当于模型身体

2 创建骨骼

x 吸附创建骨骼 (让骨骼在一条直线上,骨骼的关节点在盒子中心)

3 骨骼蒙皮

选中骨骼和小盒子,蒙皮

测试 

二 摆动效果

1 创建样条IK手柄

会在骨骼链的中间创建一条线,当我们去改变这根线的形状的时候,就会改变骨骼的样子

选中曲线

右键 控制顶点,测试

2 给线蒙皮

创建2个关节球,调大点区分,吸附过去

 

选中这两个关节球 和 样条IK手柄的线,蒙皮

测试

3 控制器 控制 大关节球:P

就是上面那个大盒子 控制 上面那个大关节球:P

下面那个大盒子 控制 下面那个大关节球:P

测试

三 扭曲效果

1 上色

(为中间的立方体的一面上色,方便后面观察 扭曲效果)

打开渲染编辑器 hypershade,修改颜色为蓝色

选择模型 中间的5个立方体的 其中一个面

为当前选择指定材质

效果

2 打开局部旋转轴

菜单栏--显示--变换显示--局部旋转轴  
    中间 显示--全部
  

3 样条IK高级扭曲

选中样条IK handle, 属性编辑器--IK解算器属性--高级扭曲控制

        √ 启用扭曲控制

        世界上方向类型:对象旋转上方向(开始/结束) →  跟着物体的旋转走
        正向轴:小立方体指向控制器的轴
        上方向轴:旋转的方向(看下 骨骼小坐标轴,左右旋转,用x或z都行,这里用x)
        
        上方向向量:骨骼 上方向轴 对应的 世界上方向对象 的轴 用向量表示(小立方体x轴对应的下面的控制器大立方体是x轴正向,用1表示写在第一列方框处)
        上方向向量2:骨骼 上方向轴 对应的 世界上方向对象2 的轴 用向量表示(小立方体x轴对应的上面的控制器大立方体是x轴正向,用1表示写在第一列方框处)

        上方向向量 三列分别代表XYZ, 正向轴用1表示,负方向轴用-1表示
        
        世界上方向对象:根骨骼 对应的控制器 名称 (下面大立方体的名称)
        世界上方向对象2:骨骼末端 对应的控制器 名称 (上面大立方体的名称)

测试

四 拉伸效果

拉伸效果之前用的节点编辑器做的,这次用表达式做

1 测量长度

先创建一个节点

在下面的mel窗口输入命令

createNode curveInfo;

成功创建

大纲视图--展示--不勾选 仅DAG对象

大纲视图--展示--勾选 形状

用连接编辑器连接 创建的节点 和 样条IK的曲线 来测量长度

窗口--常规编辑器--连接编辑器

样条IK曲线的 worldSpace 和 curveInfo 的 inputCurve 连接

纲视图 双击 curveInfo,属性编辑器里 就能看到 曲线的长度,初始长度7.553

把曲线拉长,显示测量的弧长变了

2 表达式

现在要控制骨骼的高度 来控制高矮,即缩放Y

控制骨骼的胖瘦缩放X 和 缩放Z

//高矮

//骨骼1 的缩放y = 测量长度 / 初始长度  

joint1.sy= curveInfo1.arcLength/7.553;

//胖瘦

//骨骼1 的缩放X和缩放Z = 初始长度  / 测量长度 (就是高矮的倒数,scaleX可以简写为sx)

joint1.scaleX= 7.553/curveInfo1.arcLength;

joint1.scaleZ= 7.553/curveInfo1.arcLength;

7段骨骼的公式如下 (注意每行后面有分号)

joint1.scaleY= curveInfo1.arcLength/7.553;
joint2.scaleY= curveInfo1.arcLength/7.553;
joint3.scaleY= curveInfo1.arcLength/7.553;
joint4.scaleY= curveInfo1.arcLength/7.553;
joint5.scaleY= curveInfo1.arcLength/7.553;
joint6.scaleY= curveInfo1.arcLength/7.553;
joint7.scaleY= curveInfo1.arcLength/7.553;joint1.scaleX= 7.553/curveInfo1.arcLength;
joint2.scaleX= 7.553/curveInfo1.arcLength;
joint3.scaleX= 7.553/curveInfo1.arcLength;
joint4.scaleX= 7.553/curveInfo1.arcLength;
joint5.scaleX= 7.553/curveInfo1.arcLength;
joint6.scaleX= 7.553/curveInfo1.arcLength;
joint7.scaleX= 7.553/curveInfo1.arcLength;joint1.scaleZ= 7.553/curveInfo1.arcLength;
joint2.scaleZ= 7.553/curveInfo1.arcLength;
joint3.scaleZ= 7.553/curveInfo1.arcLength;
joint4.scaleZ= 7.553/curveInfo1.arcLength;
joint5.scaleZ= 7.553/curveInfo1.arcLength;
joint6.scaleZ= 7.553/curveInfo1.arcLength;
joint7.scaleZ= 7.553/curveInfo1.arcLength;

窗口--动画编辑器--表达式编辑器

创建

加完表达式后属性这里变成紫色了

测试

3 优化表达式 y=x√

现在想要做类似于这种函数的变化

函数名称是sqrt() , 新的表达式 如下:

joint1.scaleY= curveInfo1.arcLength/7.553;
joint2.scaleY= curveInfo1.arcLength/7.553;
joint3.scaleY= curveInfo1.arcLength/7.553;
joint4.scaleY= curveInfo1.arcLength/7.553;
joint5.scaleY= curveInfo1.arcLength/7.553;
joint6.scaleY= curveInfo1.arcLength/7.553;
joint7.scaleY= curveInfo1.arcLength/7.553;joint1.scaleX= sqrt(7.553/curveInfo1.arcLength);
joint2.scaleX= sqrt(7.553/curveInfo1.arcLength);
joint3.scaleX= sqrt(7.553/curveInfo1.arcLength);
joint4.scaleX= sqrt(7.553/curveInfo1.arcLength);
joint5.scaleX= sqrt(7.553/curveInfo1.arcLength);
joint6.scaleX= sqrt(7.553/curveInfo1.arcLength);
joint7.scaleX= sqrt(7.553/curveInfo1.arcLength);joint1.scaleZ= sqrt(7.553/curveInfo1.arcLength);
joint2.scaleZ= sqrt(7.553/curveInfo1.arcLength);
joint3.scaleZ= sqrt(7.553/curveInfo1.arcLength);
joint4.scaleZ= sqrt(7.553/curveInfo1.arcLength);
joint5.scaleZ= sqrt(7.553/curveInfo1.arcLength);
joint6.scaleZ= sqrt(7.553/curveInfo1.arcLength);
joint7.scaleZ= sqrt(7.553/curveInfo1.arcLength);

修改表达式:选择过滤器,按表达式名称,找到刚才的表达式,修改好,点 编辑

测试,会有一种拉橡皮筋的感觉

4 优化表达式 y= x^n

y= x^n 函数名称是pow()

()里第一个参数是x,第二个参数是n

新的表达式如下:

joint1.scaleY= curveInfo1.arcLength/7.553;
joint2.scaleY= curveInfo1.arcLength/7.553;
joint3.scaleY= curveInfo1.arcLength/7.553;
joint4.scaleY= curveInfo1.arcLength/7.553;
joint5.scaleY= curveInfo1.arcLength/7.553;
joint6.scaleY= curveInfo1.arcLength/7.553;
joint7.scaleY= curveInfo1.arcLength/7.553;joint1.scaleX= pow(sqrt(7.553/curveInfo1.arcLength),1);
joint2.scaleX= pow(sqrt(7.553/curveInfo1.arcLength),1.5);
joint3.scaleX= pow(sqrt(7.553/curveInfo1.arcLength),2);
joint4.scaleX= pow(sqrt(7.553/curveInfo1.arcLength),3);
joint5.scaleX= pow(sqrt(7.553/curveInfo1.arcLength),2);
joint6.scaleX= pow(sqrt(7.553/curveInfo1.arcLength),1.5);
joint7.scaleX= pow(sqrt(7.553/curveInfo1.arcLength),1);joint1.scaleZ= pow(sqrt(7.553/curveInfo1.arcLength),1);
joint2.scaleZ= pow(sqrt(7.553/curveInfo1.arcLength),1.5);
joint3.scaleZ= pow(sqrt(7.553/curveInfo1.arcLength),2);
joint4.scaleZ= pow(sqrt(7.553/curveInfo1.arcLength),3);
joint5.scaleZ= pow(sqrt(7.553/curveInfo1.arcLength),2);
joint6.scaleZ= pow(sqrt(7.553/curveInfo1.arcLength),1.5);
joint7.scaleZ= pow(sqrt(7.553/curveInfo1.arcLength),1);

修改表达式后,测试


文章转载自:

http://pRKaCKN0.Lwbhw.cn
http://K8wIXDMF.Lwbhw.cn
http://j15BXFKk.Lwbhw.cn
http://9K86vJXl.Lwbhw.cn
http://03h9CHwF.Lwbhw.cn
http://yjNPNCAZ.Lwbhw.cn
http://ndfHMh32.Lwbhw.cn
http://Bs3GwKOy.Lwbhw.cn
http://SeqpU5vR.Lwbhw.cn
http://0rQpjxBd.Lwbhw.cn
http://LyPVXy4F.Lwbhw.cn
http://iF1cNCue.Lwbhw.cn
http://n7JENNDC.Lwbhw.cn
http://vzh6TOrJ.Lwbhw.cn
http://W5xVu1MU.Lwbhw.cn
http://CF11JTLZ.Lwbhw.cn
http://wbkcwyl4.Lwbhw.cn
http://nAISZhHD.Lwbhw.cn
http://KIO2MpGN.Lwbhw.cn
http://KtyUtWHP.Lwbhw.cn
http://MvSaa6E8.Lwbhw.cn
http://iejG6pay.Lwbhw.cn
http://2WunZZKO.Lwbhw.cn
http://2pzOR75g.Lwbhw.cn
http://bKk7aBnI.Lwbhw.cn
http://DYvR2PV5.Lwbhw.cn
http://yOVYF8t1.Lwbhw.cn
http://OFW9nuSM.Lwbhw.cn
http://fLSAQ2PF.Lwbhw.cn
http://5jr4W1mD.Lwbhw.cn
http://www.dtcms.com/a/386378.html

相关文章:

  • FOG钻井多花数倍成本?MEMS陀螺定向短节如何为成本做“减法”?
  • 性能分析工具的使用
  • DNS-Windows上使用DNS
  • Go 语言开发京东商品详情 API:构建高并发数据采集服务
  • 通用计算流体力学CFD软件VirtualFlow 2025发布,5大亮点
  • 趣味学RUST基础篇(实战Web server)完结
  • 机器人导论 第六章 动力学(1)——牛顿欧拉法推导与详述
  • Android U 浮窗——整体流程介绍(更新中)
  • Pytest+request+Allure
  • Android 反调试攻防实战:多重检测手段解析与内核级绕过方案
  • [vue.js] 树形结点多选框选择
  • websocket python 实现
  • 使用代理访问网络各项命令总结
  • 信创电脑入门指南:定义、发展历程与重点行业部署详解
  • PostgreSQL——元命令
  • PHP 连接池详解:概念、实现与最佳实践
  • nginx + php-fpm改用socket方式代理可能遇到的问题
  • 一篇文章说清【布隆过滤器】
  • 「数据获取」《中国教育经费统计年鉴》(1997-2024)
  • 产品开发周期缩写意思
  • Keil5安装教程保姆级(同时兼容支持C51与ARM双平台开发)(附安装包)
  • [deepseek]Python文件打包成exe指南
  • 2025最新超详细FreeRTOS入门教程:第二十章 FreeRTOS源码阅读与内核解析
  • 一种基于最新YOLO系列优化策略的缺陷检测方法及系统
  • 「英」精益设计第二版 — AxureMost落葵网
  • esp32_rust_oled
  • 贪心算法应用:前向特征选择问题详解
  • 微信小程序禁止下拉
  • 概率思维:数据驱动时代的核心技术引擎与方法论修炼
  • Docker在欧拉系统上内核参数优化实践