第1章 表达式 1
1.1 动画表达式 1
1.1.1 动画表达式 1
1.1.2 创建动画表达式 2
1.1.3 每个属性只有一个驱动程序 3
1.1.4 时间和帧关键词 3
1.1.5 找到之前创建的动画表达式 4
1.1.6 编辑动画表达式中的文本 6
1.1.7 使用文本编辑器编辑动画表达式 7
1.1.8 删除动画表达式 10
1.2 粒子表达式 10
1.2.1 关于粒子表达式 10
1.2.2 粒子表达式 11
1.2.3 创建表达式的执行 12
1.2.4 运行时间表达式的执行 12
1.2.5 设置动态开始帧 12
1.2.6 设置原始状态使用的属性 13
1.2.7 编写创建表达式 13
1.2.8 编写运行时间表达式 14
1.2.9 运行粒子属性 18
1.2.10 添加动态属性 18
1.2.11 了解每粒子和每对象属性 18
1.2.12 了解原始状态属性 19
1.2.13 赋值自定义属性 23
1.2.14 赋值不同长度的粒子排列属性 24
1.2.15 在运行表达式中使用创建表达式的数值 25
1.2.16 运行位置、速度和加速度 25
1.2.17 运行颜色 27
1.2.18 运行发散的粒子 28
1.2.19 运行碰撞 28
1.2.20 运行使用期 32
1.2.21 运行特定粒子 32
1.2.22 赋值矢量和矢量排列 35
1.3 常用函数 42
1.3.1 极限函数 42
1.3.2 指数函数 45
1.3.3 三角函数 46
1.3.4 矢量函数 54
1.3.5 转化函数 56
1.3.6 数组函数 58
1.3.7 随机数函数 59
1.3.8 曲线函数 64
1.3.9 通用命令 70
1.4 表达式编辑器 73
第2章 MEL脚本 76
2.1 背景情况 76
2.1.1 MEL概述 76
2.1.2 MEL和表达式手册 76
2.1.3 编程器的MEL 76
2.2 运行MEL 79
2.2.1 运行MEL命令 79
2.2.2 查看或记录与作用相关的MEL命令 81
2.2.3 为脚本制作一个工具栏按钮 81
2.2.4 从MEL命令上得到帮助 82
2.3 数值和变量 82
2.3.1 整数和浮点数 82
2.3.2 字符串 82
2.3.3 显式输入和隐式输入 83
2.3.4 变量 83
2.3.5 分配数值到变量和属性上 84
2.3.6 输出数值 85
2.3.7 选择任意数字 86
2.4 排列、矢量和矩阵 86
2.4.1 排列 86
2.4.2 获取和改变排列的大小 87
2.4.3 矢量 88
2.4.4 矩阵 89
2.5 类型 89
2.5.1 MEL合适类型 89
2.5.2 使用空白区域 90
2.5.3 添加注释 90
2.5.4 变量命名 91
2.5.5 程序和脚本 91
2.5.6 完美脚本 92
2.6 控制脚本流量 92
2.6.1 测试和比较数值 92
2.6.2 布尔值 93
2.6.3 if...else if...else 93
2.6.4 ?:运算符 94
2.6.5 switch...case 94
2.6.6 while 96
2.6.7 do...while 97
2.6.8 for 97
2.6.9 for-in 98
2.6.10 hreak 98
2.6.11 continue 99
2.6.12 测试命令、对象和属性的存在 99
2.6.13 =和==的不同 100
2.6.14 常见问题 100
2.7 属性 102
2.7.1 属性概述 102
2.7.2 属性名称 102
2.7.3 属性的数据类型 103
2.7.4 获取和设置属性 104
2.7.5 获取和设置多值属性 105
2.8 程序 107
2.8.1 程序 107
2.8.2 定义程序 107
2.8.3 调用程序 109
2.8.4 全局和本地变量 110
2.8.5 测试功能在MEL中是否可用 111
2.8.6 检查程序的来源 112
2.9 I/O和互动 112
2.9.1 用户互动 112
2.9.2 读取和编写文件 114
2.9.3 测试文件存在、权限和其他属性 115
2.9.4 控制文件 116
2.9.5 运行目录 116
2.9.6 执行系统命令 117
2.9.7 读取并写入系统命令管线 118
2.9.8 从AppleScript中调用MEL,反之亦然 119
2.10 调试、优化和疑难解答 120
2.10.1 MEL调试特点 120
2.10.2 优化脚本和表达式速度 122
2.10.3 疑难解答 125
2.11 创建界面 129
2.11.1 ELF命令 129
2.11.2 窗口 129
2.11.3 控件 130
2.11.4 布局 130
2.11.5 分组 134
2.11.6 菜单 135
2.11.7 集合 135
2.11.8 母代与子代 135
2.11.9 命名 137
2.11.10 UI命令模板 138
2.11.11 删除UI元素 139
2.11.12 连接命令到UI元素 139
2.11.13 简单窗口 141
2.11.14 模式对话框 142
2.11.15 使用系统事件和scriptJobs 143
2.12 脚本节点 145
2.12.1 MEL脚本节点 145
2.12.2 生成或编辑脚本节点 145
2.12.3 打开文件时阻止脚本节点的运行 146
2.13 高级版本 147
2.13.1 高级程序课题 147
2.13.2 高级动画表达式课题 150
2.14 句法 164
2.14.1 祈使句法 164
2.14.2 分隔符和空白区域 166
2.14.3 表达式、运算符和语句 167
2.14.4 运算符优先顺序 168
2.14.5 组块 168
2.14.6 注释 169
2.14.7 表达式和MEL句法之间的不同 170
2.15 疑难问题解答 171
2.15.1 任务 171
2.15.2 脚本与句法 172
2.15.3 建模 175
2.15.4 动画、动力学和渲染 176
2.16 脚本范例 178
2.16.1 从Maya自带的脚本文件中学习 178
2.16.2 从文档文件中读取动画参数值 178
2.16.3 粒子碰撞边界 179
2.16.4 点爆炸 181
2.16.5 测试附加粒子属性 184
2.16.6 测试动力学事件 187
2.16.7 动态时间播放 190
2.16.8 寻找着色对象 192
第3章 Python 194
3.1 Python in Maya 194
3.2 Python的使用 195
3.3 Python和线程 203
3.4 Python from an external interpreter 204
3.5 MEL与Python中的重要差异 205
3.6 当前限制条件 207
3.7 Tips and tricks for scripters new to Python 208
第4章 程序编译和导出端口 212
4.1 程序编译 212
4.1.1 程序编译简介 212
4.1.2 FBX文件程序编译 212
4.1.3 IGES程序编译插件 214
4.1.4 StudioImport插件程序和程序编译 216
4.1.5 导出插件程序 217
4.1.6 Maya OpenFlight导入端口/导出端口 220
4.2 游戏 230
4.2.1 简介 230
4.2.2 VRML2程序编译 233
4.2.3 RTG应用程序和文件格式 241
4.2.4 游戏交流2程序编译 243
4.2.5 MDt API 247
第5章 Maya API简介 253
5.1 简介 253
5.2 安装插件程序 255
5.3 卸载插件程序 255
5.4 编写简单的插件程序 256
5.5 重要的插件程序特性 257
5.6 与Maya组合 260
5.7 MObject 260
5.8 包装器 261
5.9 对象和函数集 261
5.10 命名惯例 262
5.11 添加参数 262
5.12 错误检查 263
5.13 MStatus类 263
5.14 错误记录 264
第6章 使用API选择 265
6.1 使用API选择概述 265
6.2 MGlobal∷setActive-SelectionList() 265
6.3 MSelectionList 265
6.4 MItSelectionList 266
6.5 setObject()方法 267
6.6 MFn∷Type列举 268
6.7 MGlobal∷selectByName() 268
第7章 命令插件 269
7.1 添加命令给Maya概述 269
7.2 注册命令 269
7.3 MFnPlugin 269
7.4 initializePlugin() 270
7.5 uninitializePlugin() 271
7.6 创建者方法 271
7.7 MpxCommand 271
7.8 返回结果到MEL 278
7.9 语法对象 278
7.10 标志 279
7.11 背景 281
7.12 MPxContext 281
7.13 MPxContextCommand 285
7.14 工具属性表 287
7.15 MPxToolCommand 287
7.16 连接插件到Maya菜单 296
7.17 第三方插件程序的安装 297
第8章 DAG层次 298
8.1 DAG层次概述 298
8.2 节点 298
8.3 变形和形状 299
8.4 DAG路径 299
8.5 一般化的实例化 301
8.6 多个形状的变形 301
8.7 DAG行走实例 302
第9章 编写阴影节点 309
9.1 阴影节点插件程序概述 309
9.2 编写阴影节点插件程序 309
9.3 阴影节点插件程序分析 310
9.4 InterNode实例编码走查 312
9.5 阴影节点分类 320
9.6 Hypershade的阴影节点图标 323
9.7 特殊的阴影节点 323
9.8 阴影节点里的超级采样 323
9.9 赋值渲染背景外的阴影节点 324
第10章 从属图表插件程序 325
10.1 从属图表插件程序概述 325
10.2 母代类别描述 325
10.3 基础 326
10.4 从属图表(DG)节点 330
10.5 节点 332
10.6 属性和塞子 333
10.7 复杂属性 333
10.8 资料区 335
10.9 数据句柄 335
10.10 数据创建式 336
10.11 计算方法 336
10.12 更复杂的实例 337
10.13 MPxNode及其衍生类别 339
第11章 操纵器和形 342
11.1 操纵器 342
11.1.1 操纵器是什么 342
11.1.2 基础操纵器 342
11.1.3 编写操纵器 344
11.1.4 操纵器容器 345
11.1.5 操纵器和节点间的信息交流 347
11.1.6 连接操纵器到Show Manipulator Tool 351
11.2 形状 354
11.2.1 Maya形状 354
11.2.2 形状分类 354
11.2.3 写出形状 355
11.2.4 绘图与刷新 356
11.2.5 选择 358
11.2.6 组件 358
11.2.7 调整和内部属性 360
11.2.8 几何体数据 361
11.2.9 文件IO 361
11.2.10 变形器 361
11.2.11 标记菜单 363
11.2.12 形状实例 363
第12章 编写节点和文件编译程序 365
12.1 编写硬件着色节点 365
12.1.1 硬件着色节点插件程序概述 365
12.1.2 执行硬件着色节点插件 366
12.1.3 一个硬件着色节点插件的实例 370
12.1.4 改进硬件着色器的运行 379
12.1.5 硬件着色节点插件实例 379
12.2 编写自定义变形节点 380
12.2.1 自定义变形概述 380
12.2.2 执行自定义变形 381
12.2.3 自定义变形实例 382
12.2.4 自定义变形节点实例 388
12.3 编写变形器节点 388
12.3.1 变形器概述 388
12.3.2 执行变形器节点 389
12.3.3 变形器节点实例 389
12.3.4 变形器实例 392
12.4 编写文件编译程序 392
12.4.1 文件编译程序概述 392
12.4.2 执行文件编译程序 393
12.4.3 文件编译程序实例 393
第13章 多线程插件 394
13.1 简介 394
13.2 数据和任务对应 394
13.3 线程 394
13.4 锁定 395
13.5 OpenMP 396
13.6 Intel线程建构模块(TBB) 398
13.7 线程任务 398
13.8 内存分配 402
13.9 线程和Maya 402
13.10 其他对应类型 408
13.11 蟒蛇线程和Maya 409
13.12 第三方工具 409
13.13 API类别和插件 410
13.14 Mac OS X平台特定线程库问题 411
13.15 供应商特定OpenMP问题 411
第14章 多边形API和Maya Python API 412
14.1 多边形API 412
14.1.1 多边形API概述 412
14.1.2 如何内部控制多边形 412
14.1.3 五个基本多边形API类别 418
14.1.4 构建历史和调整 422
14.1.5 polyModifierCmd实例 424
14.1.6 splitUVCmd实例 440
14.1.7 多边导出端口插件 452
14.2 Maya python API 453
14.2.1 Maya Python API简介 453
14.2.2 开发工具 453
14.2.3 使用Maya Python API 454
14.2.4 C++Maya API和Maya Python API的差别 466
第15章 建立创建环境 468
15.1 创建插件和应用程序简介 468
15.2 编译程序的要求 468
15.3 Linux环境(64位) 468
15.4 Linux编译程序需要 470
15.5 使用调试器调试插件 471
15.6 Windows环境(32位和64位) 472
15.7 安装Maya Plug-in Wizard 474
15.7.1 Maya Plug-in Wizard 2.0(32位的版本) 474
15.7.2 Maya Plug-in Wizard 2.0(64位的版本) 475
15.8 Mac OS X环境 475
第16章 分配Maya插件 478
16.1 分配单独文件 478
16.2 分配多个文件的模块 479
16.3 模块限制 480
16.3.1 共享库 480
16.3.2 渲染全能的着色器 481
第17章 实例插件 482
17.1 实例插件概述 482
17.2 独立应用程序举例 488
17.3 C++插件实例描述 488
17.4 独立应用程序的描述举例 526
17.5 着色器源代码举例 526
17.6 ASHLI着色器 533
17.7 脚本插件程序举例 536
第18章 附录 546
18.1 附录A:NURBS图形 546
18.2 附录B:相关图渲染节点 549
18.3 附录C:渲染属性 551
18.4 附录D:常见问题解答 556
18.5 附录E:API和Devkit限制条件 571
18.6 附录F:添加图像插件程序 573