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 节点)
内置变量速查
| 变量 | 类型 | 含义 |
|---|---|---|
t | float | 当前时间(秒) |
id / index | int | 克隆索引 |
pos | vec3 | 克隆位置 |
id_in_cl | int | 嵌套克隆中的索引 |
count | int | 总克隆数 |
time | float | 与 t 相同 |
fps | float | 帧率 |
frame | int | 当前帧 |
函数速查
| 函数 | 作用 | 示例 |
|---|---|---|
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 Noise | noise(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) * 503. 抛物线跳
javascript
h = max(0, sin(t * 3.14 - id * 0.05))
position.y = h * 1004. 颜色循环
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) * 58. 错位生长
javascript
visible = step(id, t * 30) // 前 30 帧依次出现
scale = visible9. 颜色梯度
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 克隆 + 简单效果器
关键参数
| 参数 | 作用 |
|---|---|
| Mode | Auto (智能) / 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 |
下一步
- 渲染卡、视图卡、文件大?→ 05 · 性能优化与常见坑点