去年秋天,我接手了一个高端护肤品牌的TVC项目,客户要求用CG制作一段“精华液滴落并泛起涟漪”的特写镜头,时长3秒,分辨率4K,最终要合成到实拍画面里。说实话,接到需求时我心想:这不就是Blender里建个液体域、丢个发射器、点一下Bake的事儿吗?结果后面两周的反复翻车让我彻底明白——Mantaflow的“简单”只是表象,真正要做出广告级的液体质感,你需要像调教一台精密仪器一样对待它。今天我就把这个项目的完整复盘拆开揉碎,从需求分析到最终交付,把踩过的坑和填坑的土一并倒给你。

一、需求分析与技术选型:为什么是Mantaflow而不是Flip Fluids?
客户的需求文档写得很明确:液体必须是“拉丝感强、表面张力明显、涟漪衰减自然”的精华液质感,而不是水。这意味着模拟不仅要准,更要“好看”。团队里有人提议用Flip Fluids插件,理由是它的网格化算法更成熟、飞溅细节更丰富。但我最终拍板用Blender原生Mantaflow,原因有三:
- 流程整合成本:项目周期只有两周,Mantaflow与Cycles的无缝衔接省去了导出ABC再导入的环节,且材质节点可以直接读取流体属性(如速度、密度),这对做粘稠液体的次表面散射至关重要。
- 控制粒度:Mantaflow的域设置里提供了Viscosity(粘度)和Surface Tension(表面张力)两个关键参数,虽然默认值很“水”,但通过调整它们可以模拟从蜂蜜到精华液的不同稠度。Flip Fluids的粘度模型更偏向于粒子间作用力,调起来反而间接。
- 渲染层支持:Mantaflow的流体网格自带velocity(速度场)属性,在Cycles里可以直接用属性节点驱动材质的各向异性高光,这能让液体在流动时产生真实的“湿润感”高光拉伸。这一点在后期的合成中救了我一命。
当然,Mantaflow的短板也很明显:网格化(Mesh)步骤容易产生锯齿和体积损失,尤其是高粘度液体。但这个问题可以通过分辨率(Resolution)与网格平滑(Mesh Smoothing)的配合来缓解,后面会细讲。
二、第一次翻车:当“水”变成“胶水”
按照常规流程,我建了一个立方体作为流体域(Domain),设置分辨率128,丢了一个球体作为发射器(Flow),类型设为液体,然后直接Bake。结果出来的东西像一滩融化的塑料——表面坑坑洼洼不说,液滴下落时拉不出丝,落地后直接摊成一张饼。客户看了预览说:“这不像精华液,像胶水。”
问题出在三个地方:粘度、表面张力、以及网格化精度。Mantaflow的液体模拟基于FLIP(Fluid Implicit Particle)方法,它混合了粒子(Particle)和网格(Grid)两种表示:粒子负责携带速度场,网格负责求解压力。当粘度调高时,粒子间的速度扩散会增强,但如果网格分辨率不够,这种扩散会被数值耗散吃掉,导致液体看起来“僵死”。
我的解决方案是:把分辨率提到256,同时开启Viscosity并设为0.15(默认是0,代表水),Surface Tension设为0.2。这里有个关键技巧:Mantaflow的粘度参数并不是物理单位,而是一个无量纲的系数,它影响的是粒子速度的拉普拉斯平滑强度。数值越大,液体越“粘”,但超过0.3后模拟会变得极不稳定,容易产生爆炸。所以我的经验法则是:
对于精华液这类中等粘度液体,Viscosity在0.1~0.2之间,Surface Tension在0.15~0.25之间,同时把Domain的Cache类型设为“Replay”以便随时调整参数而不必重新模拟。
另外,网格化步骤中我启用了“Use Speed Vectors”并调高了“Smooth”迭代次数到5,这能有效消除液体表面的阶梯状锯齿。但注意,平滑过度会让小液滴消失,所以需要配合“Particle Radius”调小(我设为0.002)来保留细节。

三、第二次翻车:涟漪为什么像“塑料片”?
液滴落地的涟漪是镜头的核心。第一版模拟中,涟漪扩散得太快、衰减太慢,看起来像一块塑料片在震动。我意识到问题出在表面张力模型上。Mantaflow的表面张力是基于CSF(Continuum Surface Force)模型实现的,它把表面张力作为体积力施加在界面附近的网格单元上。这个模型的精度依赖于网格分辨率,如果分辨率不足,张力会被过度平滑,导致涟漪“发飘”。
我的调整策略是:将域的分辨率进一步提升到320,同时把Surface Tension降到0.12,并开启“Real World Size”(真实世界尺寸),把域的大小设为实际物体的1/10(因为模拟的是特写镜头,液体滴很小)。这里有个容易被忽略的细节:Mantaflow的时间缩放(Time Scale)参数。默认是1,但如果你的场景尺度很小,需要适当降低时间缩放(我设为0.6),否则液体运动看起来会像快进。这个参数直接影响的是模拟的CFL条件(Courant-Friedrichs-Lewy条件,数值稳定性的判据),调低它相当于减小时间步长,让模拟更稳定、细节更丰富。
经过这一轮调整,涟漪的衰减终于自然了,液滴落地时能拉出细丝并回弹,客户看了直说“有那味儿了”。但新的问题又来了:渲染时液体表面出现了大量噪点,尤其是在高光区域。
四、渲染与材质:让精华液“贵”起来
广告级液体质感的核心是次表面散射(SSS)和各向异性高光。我用了一个Principled BSDF,把Subsurface设为0.3,Subsurface Radius调成偏红的数值(模拟精华液的淡琥珀色),Roughness设为0.05,IOR为1.45。关键一步是:用Attribute节点读取流体的“velocity”属性,连接到Bump节点的Height输入,制造出流动带来的微观凹凸感。这个技巧能让液体在运动时高光产生拉伸,静态时又恢复平滑,非常提气。
渲染设置上,我用了Cycles的GPU渲染,采样数开到512,并开启了“Denoise”(OptiX降噪)。这里有个教训:Mantaflow的网格在渲染时容易产生“Fireflies”(萤火虫噪点),尤其是在液体边缘。我的解决办法是在材质里加一个Light Path节点,把“Is Glossy Ray”连接到Mix Shader,混入一点透明BSDF,这样能减少高光噪点,但会轻微损失一点反射强度——对于特写镜头来说,这个取舍是值得的。
| 参数 | 第一版(翻车) | 最终版(交付) | 作用 |
|---|---|---|---|
| 分辨率 | 128 | 320 | 决定模拟精度和细节保留 |
| Viscosity | 0 | 0.15 | 控制液体粘稠度 |
| Surface Tension | 0.2 | 0.12 | 影响涟漪和液滴形态 |
| Time Scale | 1.0 | 0.6 | 适配小尺度场景的运动速度 |
| Mesh Smoothing | 2 | 5 | 消除网格锯齿 |
| Particle Radius | 0.005 | 0.002 | 保留小液滴细节 |
五、交付与复盘:那些没人告诉你的细节
最终渲染输出的是OpenEXR序列,多通道包含了Z深度和速度矢量,方便后期在Nuke里做运动模糊和景深。合成时我把CG液体和实拍背景做了色彩匹配,并加了一层轻微的“Lens Distortion”来模拟实拍镜头的畸变。客户最终非常满意,这个镜头后来还被他们用在了其他产品的宣传里。
回顾整个项目,我最大的感触是:Mantaflow的“自动化”其实是个陷阱。它把很多物理参数暴露给你,但默认值都是为“水”设计的,直接套用必然翻车。你必须理解每个参数背后的数学模型——比如粘度对应的是速度场的扩散方程,表面张力对应的是界面曲率的拉普拉斯算子——才能调出想要的效果。另外,模拟前的场景尺度校准至关重要,很多人忽略Real World Size,导致时间缩放和重力不匹配,液体看起来像在月球上流动。

最后给进阶学员一个建议:不要迷信高分辨率。分辨率翻倍,计算量是立方级增长。我的做法是先用低分辨率(比如128)快速迭代参数,确定大形后再提到320做最终Bake。这能节省至少70%的试错时间。
关于火星人教育:这篇文章里的很多“坑”,其实都是我在火星人教育带项目实训时和学员们一起踩出来的。火星人教育创办24年来,一直专注数字艺术与AIGC实战职业技能培训,课程覆盖AI漫剧创作、AIGC视觉设计、UE5游戏特效、室内全屋定制、MAYA三维动画、C4D动态设计、工业设计、NUKE影视后期、摄影摄像实训等方向。我们在北京、深圳双校区开设线下面授班,面向美术生、在校大学生及意向转行的职场人群,坚持项目化实训教学,把真实商业项目拆解成可复用的技术模块,帮学员夯实专业技能,助力就业与职业提升。如果你也想做出广告级的流体特效,欢迎来聊聊,咨询电话:010-65918670。








评论(0)