Skip to content

04 · 高效工作流与表达式

本章聚焦专业动效师每天在用的工作流技巧:MoGraph Tag、表达式、Python 自动化、Team Render 协作。


一、MoGraph 五大 Tag 速查

核心 Tag 决策表

Tag作用适用场景
Plain通用动画标签单个对象做位置/旋转动画
Delay延迟效果涟漪/接力/序列
Random随机动画抖动/散布
Target朝向/对齐凝视动画/路径
Step离散化阶梯效果/跳帧

实战:用 Plain Tag 代替 XPresso

100 个小球要"错位落下"

每个小球挂 Plain Tag:
  Position = (0, -100, 0)
  时间偏移 = Manual (每球 +1 帧)

不需要 XPresso 节点,10 秒搞定。


二、表达式(Expressions)速查

表达式入口

对象属性 > 右键小圆点 > Set Expression(或拖到 XPresso 节点)

内置变量速查

变量类型含义
tfloat当前时间(秒)
id / indexint克隆索引
posvec3克隆位置
id_in_clint嵌套克隆中的索引
countint总克隆数
timefloat与 t 相同
fpsfloat帧率
frameint当前帧

函数速查

函数作用示例
sin / cos / tan三角函数sin(t * 2)
pow(x, y)pow(0.95, id)
mod取模mod(id, 5)
if()条件if(id % 2, 1, 0)
clamp(v, min, max)截断clamp(t, 0, 1)
mix(a, b, t)插值mix(0, 100, t)
dot / cross向量运算dot(pos, vec(0,1,0))
noise(x)Perlin Noisenoise(pos * 0.01 + t)
step(threshold, x)阶跃step(0.5, noise(t))
smoothstep(a, b, x)平滑阶跃smoothstep(0, 1, t)

表达式实战 10 例

1. 弹性脉冲

javascript
scale = 1 + 0.3 * sin(t * 4 - id * 0.1)

2. 螺旋上升

javascript
angle = t * 2 + id * 0.3
position.y = id * 5
position.x = sin(angle) * 50
position.z = cos(angle) * 50

3. 抛物线跳

javascript
h = max(0, sin(t * 3.14 - id * 0.05))
position.y = h * 100

4. 颜色循环

javascript
r = 0.5 + 0.5 * sin(t + id * 0.1)
g = 0.5 + 0.5 * sin(t + id * 0.1 + 2.09)
b = 0.5 + 0.5 * sin(t + id * 0.1 + 4.18)
color = vec(r, g, b)

5. 指数衰减

javascript
scale = pow(0.9, id)

6. 距离场(中心衰减)

javascript
d = length(pos)
scale = smoothstep(500, 0, d)

7. 噪点抖动

javascript
position.x += noise(t * 10, id) * 5
position.y += noise(t * 10, id + 100) * 5

8. 错位生长

javascript
visible = step(id, t * 30)  // 前 30 帧依次出现
scale = visible

9. 颜色梯度

javascript
color = vec(0, pos.x / 1000, pos.y / 1000)

10. 旋转群

javascript
rotation.y = sin(t * 2) * 0.5 + id * 0.05

三、Python 自动化(R21+)

MoGraph 常用 Python API

python
import c4d

# 拿到当前文档
doc = c4d.documents.GetActiveDocument()

# 找 Cloner
def find_cloner(obj):
    if obj is None: return None
    if obj.GetType() == c4d.Ocloner: return obj
    return find_cloner(obj.GetDown())
    # 实际遍历用 GetChildren()

# 批量改 MoGraph 缓存
for effector in doc.GetObjects():
    if effector.GetType() == c4d.OmgEffector:
        effector[c4d.MG_BASEEFFECTOR_POSITION_ACTIVE] = True

实战:批量改克隆种子

python
import c4d
doc = c4d.documents.GetActiveDocument()
seed = 0
for obj in doc.GetObjects():
    if obj.GetType() == c4d.Ocloner:
        obj[c4d.MG_CLONER_SEED] = seed
        seed += 1
c4d.EventAdd()

Python vs 表达式

维度表达式Python
性能极快较慢(每帧调用)
灵活性中(数学)高(任意逻辑)
调试易(print)
学习曲线
使用场景90% 动效数据处理/工具开发

四、MoGraph Cache 速查

何时必须挂 Cache

  • ⚠️ 必须挂

    • Matrix 生成器
    • 5000 个克隆

    • 复杂 Shader/Formula 效果器
    • 实时音频驱动
    • Time 效果器 + 复杂公式
  • 💡 可选挂

    • < 1000 克隆 + 简单效果器

关键参数

参数作用
ModeAuto (智能) / Manual (手动) / All Frames (全烘焙)
Range烘焙帧范围
Subframes子帧精度(推荐 1~5)
Per Object是否每个子对象独立烘焙

性能优化配方

Mode = Manual
Range = 0 ~ 250 (项目实际帧数)
Subframes = 1 (先试 1,卡顿再加 5)

烘焙后视图/渲染都会显著变快。


五、Team Render 与缓存协作

团队协作工作流

主项目文件 (.c4d) → 共享盘 (Dropbox/网盘)

        每个动画师本地工作

    导出 Alembic (.abc) 缓存 → 共享

       最终场景用 ABC 引用组装

Alembic vs MoGraph Cache 选谁

场景推荐
仅 MoGraph 动画MoGraph Cache (C4d 自家)
跨软件(Blender/Maya)Alembic (.abc)
几何拓扑变化Alembic (MG Cache 不支持)
文件大小敏感MG Cache (通常更小)

六、命名与组织约定

专业动效师的项目结构

项目名/
├── scenes/
│   ├── 001_main.c4d
│   ├── 002_explosion.c4d
│   └── 003_composite.c4d
├── assets/
│   ├── models/
│   ├── textures/
│   └── hdri/
├── caches/
│   ├── mograph_cache/
│   ├── alembic/
│   └── particles/
├── previews/
│   └── frame_*.png
└── renders/
    └── output_*.exr

命名规范

  • 场景:PREFIX_NNN_description.c4d(如 TVC_001_hero_shot.c4d
  • 材质:MAT_材质名_颜色(如 MAT_ground_grey
  • 克隆器:CLN_数量_描述(如 CLN_1000_dots
  • 效果器:EFF_类型_通道(如 EFF_plain_pulse
  • 缓存:CACHE_场景名_v001

七、常用快捷键速查

操作快捷键
创建克隆Alt + 拖动
单独显示克隆子对象选中克隆器按 O
切换 Cloner Mode属性面板顶部
烘焙 MoGraph Cache选中克隆 → 顶部菜单 MoGraph > Cache
实时播放加速数字键 0-9
视口显示模式1-5 切换线框/实体/着色

八、推荐参考资源

资源类型链接
Maxon 官方文档文档maxon.net/c4d-manual
GreyscaleGorilla教程greyscalegorilla.com
Eyedesyn教程eyedesyn.com
School of Motion课程schoolofmotion.com
C4D Cafe社区c4dcafe.com

下一步

Released under the MIT License.