3148 字
16 分钟
从零实现 Maya 樱花树绽放特效

前言#

这篇教程基于《Maya Visual Effects》经典案例,以n 粒子动力学 + 几何体实例化 + Mel 表达式为核心技术栈,一步步实现樱花树从花苞到完全绽放的动态效果。

一、项目准备:#

1.1 软件准备#

MAYA 2027(中文版)

1.2 基础场景文件准备#

我们需要提前准备以下素材,确保项目流程顺畅:

场景文件(cherryTreeStart.ma)。包含:

  • 樱花树模型:命名为cherryTree,确保模型无破面、无重复顶点,为后续顶点选择和粒子发射做准备。
  • 花朵绽放序列:命名为blossom00~blossom07,共 8 个模型,对应从花苞到完全绽放的 8 个阶段,按顺序排列。
  • 地面模型:用于场景环境搭建。

1.2 关键术语前置科普#

在开始操作前,我先理解了这几个核心概念:

术语通俗解释本项目中的作用
nParticleMaya 的动力学粒子系统,支持碰撞、表达式控制、实例化作为花朵载体,控制绽放时机和速度
几何体实例化(Instancer)用单个粒子控制多个模型序列切换,实现动画效果让粒子依次显示花苞到绽放的花朵模型
每粒子(Per-Particle)属性每个粒子独立拥有的属性,可通过表达式单独控制契合美术需求,实现每朵花独立的绽放进度
被动碰撞器(Passive Collider)不主动运动但能被粒子检测到的碰撞体控制花朵生成的时机,模拟从内到外绽放的效果

二、步骤 1:精准选择树枝顶点#

这一步是整个效果的基础,我们只希望树枝末梢发射粒子,避免树干也长出花朵。

2.1 操作步骤#

  1. 选中樱花树模型cherryTree,右键点击模型,在弹出菜单中选择「边(Edge)」模式,进入边组件编辑状态。此时,整棵樱花树的所有边都被选中。
  2. 打开顶部菜单栏「选择 → 使用约束选择」,点击右侧的小方块(选项盒),打开约束设置窗口。
  3. 在窗口中展开「几何图形 → 长度」,勾选「激活」,设置「最大值」为0.01(这个数值根据你的模型大小调整,目标是只选中树枝末梢的短边)。
  4. 此时只有树枝末梢的边被选中,右键点击模型,选择「转换选择 → 到顶点」,将边选择转换为顶点选择。
  5. 勾选「显示 → 题头显示 → 多边形计数」,查看视图左上角的「顶点」统计数的第三列,本例为5787,记下这个数字,后续设置粒子数量会用到。

2.3 进阶技巧:保存快速选择集#

为了后续能一键重新选中这些顶点,避免重复操作,我们创建一个快速选择集:

  1. 保持顶点选中状态,打开「创建 → 集 → 快速选择集」。
  2. 在弹出窗口中设置名称为branchVertices,点击「确定」。
  3. 后续需要重新选中这些顶点时,只需打开「选择 → 快速选择集 → branchVertices」即可。

三、步骤 2:创建花蕾粒子#

我们将在选中的树枝顶点上创建粒子,作为后续花朵的载体。

3.1 操作步骤#

  1. 确保仍处于「FX」菜单集(可通过顶部菜单栏的下拉菜单切换)。
  2. 保持树枝顶点选中状态,打开「nParticles → 从对象发射」,点击右侧的小方块(选项盒),打开发射设置窗口。
  3. 在设置窗口中配置关键参数:
    • 发射器名称:设置为budEmitter
    • 发射器类型:选择「泛向」
    • 发射位置:设置为「所有顶点」
    • 速率:设置为1(每秒发射 1 个粒子,后续会用最大数量限制总粒子数)
    • 速度:设置为0(粒子不会乱跑,固定在树枝顶点位置)
  4. 点击「创建」,完成粒子发射器的创建,大纲视图中会生成nParticle1节点,将其重命名为buds

3.2 粒子动力学基础设置#

选中buds粒子节点,打开右侧的属性编辑器(快捷键Ctrl+A),切换到budsShape标签页,配置以下关键参数:

  1. 动态属性:勾选「忽略解算器重力(Ignore Solver Gravity)」,避免粒子被 Nucleus 解算器的重力影响而下落。
  2. 自发光属性(另请参见发射器选项卡):展开卷展栏,设置「Max Count(最大数量)」为之前记下的顶点数(本例为5787),确保粒子数量和树枝顶点数完全匹配。

四、步骤 3:创建碰撞动画球#

我们将创建一个透明的碰撞球体,通过缩放动画控制粒子碰撞时机,实现花朵从内到外绽放的效果。(通过控制碰撞球体的transform属性,可以实现不同的绽放效果)

4.1 操作步骤#

  1. 打开「创建 → 多边形基本体 → 球体」,创建一个球体模型,命名为collider
  2. 将球体移动到樱花树的中部枝桠处,确保初始位置在树的底部之外。
  3. 为球体设置缩放关键帧,控制其从下往上逐渐扩大:
    • 第 1 帧:设置缩放为0.1,右键点击「Scale X/Y/Z」通道,选择「设置关键帧」。
    • 第 100 帧:设置缩放为10(根据树的大小调整,确保球体在第 100 帧能完全包裹整棵树),再次设置关键帧
  4. 选中球体,打开「nCloth → 创建被动碰撞器」,将球体转换为 n 粒子的碰撞体。
  5. 为球体赋予透明材质,让其在视图中不可见但仍能被粒子检测到:
    • 右键球体 → 「指定收藏材质 → Lambert」,打开材质属性编辑器。
    • 在「公用材质属性」中,将「透明度」设置为纯白色(RGB 均为 1),此时球体在视图中会变为透明状态。

五、步骤 4:粒子碰撞事件#

我们将设置粒子碰撞事件,让花蕾粒子碰到碰撞球体后,生成新的花朵粒子。

5.1 操作步骤#

  1. 选中buds粒子节点,打开「nParticles → 粒子碰撞事件编辑器」。
  2. 在编辑器中配置以下关键参数:
    • 事件类型:选择「分裂(Split)」(粒子碰撞后分裂生成新粒子)
    • 粒子数量:设置为1(每次碰撞生成 1 个新粒子)
    • 扩散:设置为0(新粒子不会散开,保持在碰撞位置)
    • 继承速度:设置为0(新粒子不继承原粒子的速度,保持静止)
  3. 点击「创建事件」,完成碰撞事件的设置,大纲视图中会生成新的粒子节点,将其重命名为blossoms

5.2 花朵粒子基础设置#

选中blossoms粒子节点,打开属性编辑器,切换到blossomsShape标签页,配置以下参数:

  1. 碰撞设置:展开「碰撞」卷展栏,取消勾选「碰撞」和「自碰撞」,避免花朵粒子与碰撞球体或其他花朵发生碰撞。
  2. 动力学设置:展开「动态属性」卷展栏,勾选「忽略解算器重力」,避免花朵粒子下落。
  3. 着色设置:展开「着色」卷展栏,将「粒子渲染类型」设置为「Point(点)」,「不透明度」设置为0。注意:这里不要直接关闭粒子的可见性,否则动力学解算会失效,通过设置不透明度为 0,既能让粒子不可见,又能保证后续实例化效果正常显示。

六、步骤 5:几何体实例化#

我们将用blossoms粒子实例化花朵序列模型,实现花朵从花苞到绽放的效果。

6.1 操作步骤#

  1. 在大纲视图中,按顺序选中花朵序列模型blossom00~blossom07(按住 Shift 键依次点击,确保顺序正确)。
  2. 打开「nParticles → 实例化器(几何体替换)」,点击右侧的小方块(选项盒),打开实例化设置窗口。
  3. 在设置窗口中,点击「添加选择」,将选中的花朵模型添加到实例化列表中,设置「循环」为「无」,点击「创建」,完成实例化器的创建,大纲视图中会生成instancer1节点。

七、步骤 6:表达式控制花朵绽放#

我们将通过自定义每粒子属性和 Mel 表达式,控制每个花朵的绽放进度,实现从花苞到完全绽放的动画效果。

7.1 添加自定义每粒子属性#

  1. 选中blossoms粒子节点,打开属性编辑器,切换到blossomsShape标签页。
  2. 展开「每粒子(数组)属性」卷展栏,点击「添加动态属性 → 常规」,打开「添加属性」窗口。
  3. 在窗口中切换到「新建」标签页,配置以下参数:
    • 长名称:设置为instanceStep
    • 数据类型:选择「Float(浮点数)」
    • 属性类型:选择「每粒子(数组)」(核心设置!确保每个粒子都有独立的instanceStep值)
  4. 点击「确定」,完成属性添加,此时在「每粒子(数组)属性」卷展栏中会出现Instance Step属性。

7.2 创建表达式#

7.2.1 创建表达式(粒子出生时执行)#

  1. 打开「窗口 → 常规编辑器 → 表达式编辑器」。

  2. 在编辑器中,「对象」选择blossomsShape,「属性」选择instanceStep,「粒子」选项选择「创建」。

  3. 在下方的表达式输入框中,输入:

    instanceStep = 0;
  4. 点击「创建」,完成创建表达式的设置,确保表达式已保存。

7.2.2 运行时表达式(粒子存活的每一帧执行)#

  1. 同样在表达式编辑器中,「粒子」选项选择「运行时动力学前」。

  2. 在下方的表达式输入框中,输入:

    if (instanceStep < 9) {
    instanceStep++;
    }
  3. 发现软件似乎会在instanceStep前面自动添加blossomsShape.的前缀。但是并不影响实现。

  4. 点击「创建」,完成运行时表达式的设置,此时每个粒子的instanceStep值会从 0 开始,每帧增加 1,直到达到 8(对应花朵序列的最后一个模型)。

  5. 如果觉得花朵绽放速度过快,几帧就完成了,可以修改表达式,让instanceStep每几帧增加 1,例如:

    if (instanceStep < 9 && frame % 3 == 0) {
    instanceStep++;
    }

这样每 3 帧instanceStep才会增加 1,放慢绽放速度。

7.3 绑定表达式到实例化器#

  1. 回到blossomsShape标签页,展开「实例化器(几何体替换)」卷展栏。
  2. 找到「对象索引(Object Index)」选项,在下拉菜单中选择我们创建的Instance Step属性。这一步的作用是让实例化器根据每个粒子的instanceStep值,自动切换对应的花朵模型,实现绽放效果。

八、步骤 7:解决花朵颜色不显示问题#

效果实现之后,我发现花朵模型并不显示颜色,而场景中其他模型却能正常显示。

分析之后发现视图未开启纹理显示。解决:点击视图顶部的「着色」菜单,勾选「硬件纹理」,同时点击「对所有项目进行平滑着色处理」,确保模型以平滑着色模式显示。

九、最终效果调试与优化#

  1. 调整绽放时机:修改碰撞球体的缩放动画关键帧,控制球体扩大的速度,从而控制花朵从下往上绽放的节奏。
  2. 调整绽放速度:修改运行时表达式,通过增加条件判断(如frame % 3 == 0)放慢或加快instanceStep的增长速度。
  3. 调整花朵分布:修改树枝顶点的选择范围,或调整粒子发射器的速率,控制花朵的密度和分布位置。
  4. 添加灯光效果:为场景添加点光源或区域光,调整灯光强度和颜色,让花朵模型的颜色在视图中更清晰。

十、项目复盘#

这个樱花树绽放特效项目,练习并使用了以下关键技术:

  • 精准的顶点选择与快速选择集的应用,体现了对模型组件操作的熟练度。
  • n 粒子动力学系统的使用,包括发射设置、碰撞事件、被动碰撞器的创建。
  • 几何体实例化技术,实现了单个粒子控制多模型序列动画的效果。
  • 自定义每粒子属性与 Mel 表达式的结合,实现了粒子级别的独立控制,解决了序列动画同步的问题。
  • 透明碰撞体与关键帧动画的结合,实现了自然的从下往上绽放的效果。
从零实现 Maya 樱花树绽放特效
https://fuwari.vercel.app/posts/notes/maya/cherrytree/
作者
Ruby
发布于
2026-05-17
许可协议
CC BY-NC-SA 4.0