ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Blender流体模拟入门:从核心原理到实战渲染全解析

2026/8/13 3:40:25 拓冰建站 浏览量
Blender流体模拟入门:从核心原理到实战渲染全解析 1. 从“一滩水”开始为什么流体模拟是CG创作的质变点几年前我接手一个需要制作咖啡倒入杯中、液面晃动并泛起泡沫的镜头。当时的第一反应是找现成的视频素材或者用贴图动画“硬扛”结果不是角度不对就是质感塑料完全无法融入三维场景。就在几乎要放弃这个镜头时我决定硬着头皮研究一下Blender的流体模拟。从第一次点击“域Domain”物体到看着一堆粒子在框里乱窜再到最终渲染出那杯带着真实涡流和表面张力的咖啡整个过程虽然踩坑无数但那种“创造物理”的成就感是无与伦比的。流体模拟就是把CG创作从“雕刻静态形状”提升到“模拟动态规律”的质变点。它不再是美术层面的工作而是介乎于艺术与科学之间的实验。对于很多刚接触Blender的创作者来说“模拟”这个词听起来就有点门槛让人联想到复杂的物理公式和漫长的计算等待。但我想说Blender的流体系统特别是自2.8版本以来集成的MantaFlow引擎已经足够友好它把复杂的Navier-Stokes方程封装成了几个直观的参数面板。你不需要是物理学家也能通过调节“粘度”、“表面张力”来让蜂蜜流淌得更粘稠或者让水珠更圆润。本篇内容就是带你绕开我当年走过的弯路从零开始理解Blender流体模拟的核心逻辑、掌握关键参数的“手感”并最终渲染出可信的流体效果。无论你是想制作倾泻的瀑布、杯中晃动的红酒还是科幻场景中的能量流这套基础都能成为你的起点。2. 流体模拟的核心拼图域、流与障碍物在Blender里启动一次流体模拟就像在桌子上规划一个物理实验。你需要明确三样东西实验发生的空间域、被研究的物质流以及影响实验的物体障碍物。这是最核心的三个角色理解它们的关系就理解了整个模拟的骨架。2.1 域Domain流体的舞台与边界域就是那个划定模拟范围的透明框子。你可以把它想象成一个装满无形“计算力”的鱼缸流体所有的行为都只在这个鱼缸内部被解算。创建一个域非常简单在场景中新增一个立方体ShiftA - Mesh - Cube然后在物体属性面板中找到“物理属性”Physics Properties标签点击“流体”Fluid并选择类型为“域”Domain。这时立方体会变成一个半透明的框它的尺寸直接决定了你的“鱼缸”有多大。这里有几个至关重要的细节决定了模拟的成败分辨率精度与耗时的博弈在域的流体设置里“分辨率”是最关键的参数没有之一。它决定了这个“鱼缸”被划分成多少个小格子来进行计算。分辨率64意味着长、宽、高每个方向都被分成64格总共是64x64x64262,144个计算单元。分辨率128则变成超过200万个单元。注意分辨率的提升对计算量的增加是指数级的。从64到128格子数变为8倍所需内存和计算时间可能增加10倍以上。我的经验是对于学习和小样测试分辨率64完全足够看清基本行为。对于最终渲染通常需要100-150的分辨率才能获得平滑的表面但这意味着你需要为一次数秒的模拟准备好喝杯咖啡甚至吃顿饭的等待时间。时间尺度控制流体的“性格”时间尺度Time Scale参数常常被忽略但它能极大地改变流体的“性格”。默认值是1.0代表模拟时间与现实时间1:1。如果你觉得流体下落得太慢像在月球上可以把值调到1.5或2.0它会计算得更“快”。反之调到0.5流体会像在粘稠的介质中一样缓慢运动。这个参数非常适合快速调整流体的整体速度感而不用去改动重力等全局物理参数。边界类型流体能逃出去吗域的六个面都可以单独设置边界类型。默认是“域”Domain意味着流体碰到边界会被挡住。你也可以设置为“流出”Outflow这样流体碰到这个面就会消失非常适合制作水龙头出水口的效果。或者设置为“流入”Inflow让流体从这个面持续生成。在制作瀑布时我会将顶面设为“流入”正面和侧面设为“域”底面设为“流出”这样水流就会源源不断地生成、落下并消失在底部。2.2 流Flow流体的诞生与形态流物体定义了流体的来源和初始属性。任何一个网格物体都可以被指定为“流”。同样在物理属性中选择“流体”类型为“流”Flow。流类型你是泉眼还是冰块这里有三个核心选项对应三种完全不同的流体行为逻辑流入Inflow这是最常用的“源头”。被指定为流入的物体会持续不断地向外喷射流体粒子。你可以用它来做水龙头、喷泉、倒出的酒瓶口。关键参数是“流量”Flow Rate值越大单位时间内喷出的流体越多。流出Outflow与域的流出边界类似但这是物体级别的。任何接触到这个物体的流体都会被“吸走”消失。可以把它想象成一个下水道口或排水孔。液体Liquid这是将物体本身作为一块“已经存在”的流体。点击烘焙后物体会被转化为流体粒子。这是制作“一滩水”、“一个水球”或者“融化的冰淇淋”的常用方法。它没有持续生成的能力其形状就是流体的初始形状。初始速度给流体一个“推力”在流体的“初始速度”Initial Velocity选项里你可以给新生成的流体一个初始的运动方向。例如做一个侧向喷出的水柱除了调整流入物体的喷口方向还可以在这里设置一个朝向侧面的速度矢量比如X: 5.0, Y: 0, Z: 0。这个功能在制作爆炸、溅射等效果时非常有用。2.3 障碍物Obstacle与流体互动的万物障碍物是场景中与流体发生碰撞的物体。任何复杂的流体交互本质都是流体与各种障碍物的碰撞。指定一个物体为障碍物后流体在模拟时会“知道”它的存在并绕开或沿着它流动。表面厚度解决“渗漏”的利器这是新手最容易踩坑的地方。在障碍物的流体设置底部有一个“表面厚度”Surface Thickness参数默认是0.0。在低分辨率模拟下流体粒子可能会因为计算精度不足从障碍物网格的缝隙中“渗”过去。适当增加这个值比如0.02m相当于在障碍物表面包裹了一层无形的碰撞体能有效防止渗漏让流体更服帖地沿着表面流动。影响因子是海绵还是钢板“影响因子”Effect Factor控制障碍物对流体影响的强度。默认1.0是完全的固体碰撞。如果你把它调到0.5流体会更容易“推开”这个障碍物或者表现出更滑的摩擦。调到0则该物体对流体完全无效虽然很少这么用。这个参数可以用来模拟一些非刚体的、能被流体推动的物体比如漂浮的软木塞。3. 参数调校从“像水”到“是蜂蜜”的艺术当基础拼图搭建好后决定流体最终视觉特性的是一系列物理参数。Blender把这些参数藏得比较深在域的“流体世界”Fluid World设置里。调整它们就像在厨房调配不同质感的液体。3.1 粘度Viscosity流体的“粘稠度”粘度是流体内部摩擦力的度量。水的粘度很低大约1 mPa·s所以它流动顺畅。蜂蜜的粘度很高所以它流动缓慢甚至能拉丝。在Blender中粘度参数有两个模式“真实值”Real和“自定义”Custom。对于初学者我强烈建议使用“自定义”模式因为它提供了更直观的滑块。“线性”Linear值从0像空气到1像沥青。制作水可以设置在0.1到0.3之间。制作蜂蜜或糖浆则需要0.8以上。我制作熔岩效果时甚至会用到0.95并配合极低的“表面张力”让它看起来浓稠而柔软。高粘度流体模拟时有个技巧由于流动慢你可以适当降低模拟的“结束帧”End Frame因为不需要太多帧数就能看到其缓慢移动的过程这样可以节省大量烘焙时间。3.2 表面张力Surface Tension让水珠“站”起来表面张力是液体表面收缩的趋势它使得小体积的液体比如水滴趋向于形成球形。这个参数对表现流体的“质感”至关重要。Blender的表面张力值也是“自定义”模式更易用。值越高流体越倾向于团聚成球状。做一颗从叶片上滴落的水珠需要较高的表面张力0.5以上。而模拟一大片水域如海洋表面张力几乎可以忽略0.05左右因为在大尺度上重力主导了形态。一个常见的误区是认为高表面张力会让所有流体都变成完美球体。实际上它是在与流体的惯性速度和粘度竞争。一个高速喷射的水流即使表面张力设得很高也会因为惯性而被拉成柱状只有在末端速度减慢时才会碎裂成球状水珠。这个动态过程正是模拟迷人的地方。3.3 浮力与重力流体的“重量感”重力是默认存在的全局力你可以在场景属性Scene Properties的“重力”Gravity中修改。标准的-9.8 m/s²是地球重力。如果你想做太空中的流体可以设为0。浮力Buoyancy参数在流体世界设置里它控制着密度差异导致的上升或下沉力。对于大多数液体模拟水、油保持默认值1.0即可。但如果你在模拟烟雾在空气中这个值就非常关键。热空气上升就是因为浮力为正。你可以通过给流体的“初始温度”Initial Temperature设置一个高值并配合浮力来模拟烟雾上升的效果。这里有一个结合使用的例子模拟水中倒油。你需要创建两种流体。水作为背景流体一种复杂用法通常用高粘度障碍物模拟油作为流动流体。将油的密度在“高级”设置中可以找到相关参数通常通过粘度等间接影响设置得比水低并确保浮力为正油就会漂浮在水面上。这需要更精细的网格和粒子设置但原理正是基于浮力。4. 网格化与渲染从粒子到视觉盛宴烘焙完成后你看到视图里的可能只是一大堆点粒子显示模式。如何把这些点变成可以渲染的、光滑的液体表面这就是网格化Meshing的工作。4.1 网格化参数在平滑与性能间取舍在域的流体设置中切换到“网格”Mesh面板。点击“烘焙网格”Bake MeshBlender会根据你烘焙好的粒子数据生成一个连续的液体表面网格。粒子半径与细节尺寸网格化的核心逻辑是围绕每一个流体粒子生成一个“水滴”形状默认为球体然后将所有重叠的“水滴”融合成一个光滑的表面。因此“粒子半径”Particle Radius决定了这个基础水滴有多大。它通常与你在烘焙时设置的粒子尺寸相关联。更重要的参数是“细节尺寸”Detail Size它决定了网格生成的精度。这个值会除以域的“分辨率”来得到最终用于生成网格的体素大小。例如分辨率128细节尺寸1.0则用于网格化的体素大小就是域尺寸的1/128。如果细节尺寸设为0.5体素大小就变成域尺寸的1/256网格会更精细但计算更慢文件更大。提示永远不要先烘焙高精度网格。我的工作流是先用极低的网格细节比如细节尺寸4.0快速烘焙一次在视图里检查流体的运动轨迹和基本形态是否正确。确认无误后再逐步提高细节尺寸2.0, 1.0, 0.5进行局部帧的测试烘焙观察细节提升程度与时间成本的增加是否值得。最后才针对需要渲染的帧范围烘焙最终精度的网格。平滑与压缩优化网格质量“平滑”Smoothing参数可以柔化网格的锯齿让表面看起来更自然通常1-2的值就足够。“压缩”Compression则尝试简化网格在视觉变化不大的情况下减少面数对提升后续渲染速度有帮助。4.2 材质与着色赋予流体灵魂一个完美的流体网格如果没有好的材质看起来依然像塑料。流体的材质核心在于折射、透射和凹凸。基础设置玻璃BSDF对于清澈的水最直接的方法是使用“玻璃BSDF”着色器。将其连接到材质输出节点的“表面”。调整“粗糙度”Roughness为0 “IOR”折射率为1.33水的折射率。这样你就能得到基本的折射效果。但真实的水不是完美的玻璃。它会有微妙的颜色变化浅水偏绿深水偏蓝内部有杂质导致的浑浊感以及表面因微小波纹产生的凹凸。进阶原理化体积与层权重颜色与吸收在玻璃BSDF前面可以添加一个“原理化体积”Principled Volume节点用“颜色”来控制光线在流体内部传播时的吸收。给一个淡淡的蓝绿色并增加“密度”可以模拟游泳池或深海的水体感。表面凹凸绝对光滑的水面看起来很假。我们需要添加细微的波纹。使用“噪波纹理”Noise Texture节点缩放Scale调到很大如500连接到“凹凸”Bump节点再将凹凸连接到玻璃BSDF的“法向”输入。这样就能产生非常细微的、动态的水面起伏对高光反射的影响巨大。泡沫与飞沫流体会在碰撞、跌落时产生泡沫。在流体模拟烘焙时可以启用“泡沫”Foam选项它会生成额外的泡沫粒子数据。渲染时你需要为泡沫创建单独的材质通常是白色、高粗糙度、略带次表面散射的材质并使用“属性”Attribute节点读取名为“foam”的属性来混合水体材质和泡沫材质。4.3 照明与渲染设置最后的点睛之笔流体尤其是透明流体极度依赖照明和环境来展现其质感。环境光与HDRI关掉默认的世界背景使用一张高质量的HDRI高动态范围环境贴图是必须的。HDRI提供了丰富、真实的环境反射和折射光源。Blender内置的HDRI选择很少建议去Poly Haven这类网站下载免费的、高质量的HDRI特别是那些带有天空、云彩和建筑环境的它们能在水体表面反射出丰富的细节。焦散Caustics这是让水体渲染效果产生质变的一步。焦散是光线通过透明物体折射后在周围表面上形成的明亮光斑比如游泳池底的光纹。在Cycles渲染器中你需要在渲染属性Render Properties的“光程”Light Paths中大幅提高“折射”Transmission和“光泽”Glossy的反弹次数如12以上。确保你的水体材质使用了玻璃BSDF等折射节点。在场景中布置一个足够亮的、面积稍大的面光Area Light作为主光源因为焦散需要足够强的直射光才能形成。在接收焦散的物体如池底的材质上确保其有足够的漫反射来显示光斑。开启焦散计算会急剧增加渲染时间但它带来的真实感是无可替代的。对于测试可以只渲染一小块区域看看效果。采样与降噪流体渲染因为涉及大量的折射、反射和透明计算噪点会很多。提高“渲染”Render采样率是根本方法最终渲染建议512-1024起步。同时务必开启“降噪”Denoising。在渲染属性的“降噪”部分选择“OpenImageDenoise”选项它能在几乎不损失细节的情况下去除大量噪点大幅节省达到洁净画面所需的采样数。5. 实战避坑指南那些我踩过的“深水区”理论说再多不如踩一次坑记得牢。下面是我在无数小时模拟、烘焙和渲染中总结出的几个关键陷阱和解决方案。5.1 模拟速度慢如蜗牛检查这三点分辨率是头号杀手这是最核心的原因。永远从低分辨率32或64开始测试动画和形态。在最终烘焙前使用“简化”Simplify面板中的“视图端口”Viewport细分设置在视图中用低精度预览确认无误后再用高分辨率烘焙。时间步长与自适应域在域的“自适应域”Adaptive Domain选项中开启“使用自适应域”Use Adaptive Domain。这个功能会让模拟只计算流体实际占据区域的网格而不是整个域框对于流体只占一小部分空间的场景如水杯可以节省大量计算。同时调整“时间步长”Time Step方法为“自适应”Adaptive让模拟根据流体的速度自动调整计算步长能在保证稳定的前提下加快速度。结束帧与缓存管理不要动不动就模拟500帧。先用低分辨率模拟全部帧数找到你真正需要流体出现的帧范围比如第30帧到第150帧。然后在烘焙设置中将“开始帧”Start Frame和“结束帧”End Frame精确设定到这个范围只烘焙需要的部分。烘焙完成后及时清理旧的、无用的缓存文件它们可能占用数十GB的磁盘空间。5.2 流体“穿模”或行为怪异障碍物表面厚度如前所述这是解决流体从障碍物缝隙渗漏的首要检查项。给所有障碍物增加一个很小的表面厚度0.01-0.05。碰撞网格精度障碍物本身的网格太粗糙面数太少模拟引擎可能无法准确识别其表面。确保与流体发生精细交互的障碍物如杯壁、复杂地形有足够的面数。一个技巧是为碰撞单独使用一个细分修改器Subdivision Surface Modifier并在流体模拟的“碰撞”Collision设置中将“碰撞质量”Collision Quality设置为“更高”Higher这样Blender会使用细分后的网格进行碰撞计算而渲染时仍用原网格。初始速度与引力方向冲突如果你给流体设置了很大的初始水平速度但重力又很强流体可能会在初始几帧表现出剧烈的抖动或非预期旋转。检查初始速度矢量是否合理或者尝试在流体开始运动后几帧才让重力完全生效这需要用到关键帧动画较复杂。5.3 渲染结果一片黑或透明感全无检查法向生成的流体网格法向可能向内。在编辑模式下全选所有面按AltN选择“翻转”或“重计算外侧”确保法线朝外。照明不足透明材质需要大量的光才能被“看见”。确保你的HDRI足够亮或者额外添加面光源从侧面和顶部照射流体。尝试关闭所有材质用一个自发光材质赋予流体看它是否能在渲染中显示以排除网格本身的问题。折射率与背景流体的玻璃质感需要通过折射背后的物体来体现。确保你的流体背后有东西比如一个棋盘格平面、房间的墙壁或其他物体。一个常见的测试方法是在流体后面放一个带有鲜明图案的背景板如果渲染能看到图案的扭曲说明折射在工作。流体模拟是一个需要耐心反复调试的过程。每一次失败烘焙的几分钟甚至几小时都在加深你对这些参数之间微妙关系的理解。最好的学习方式就是定一个小目标比如“让水从杯口溢出并沿着杯壁流下”然后从最简单的设置开始逐个参数调整观察变化并做好记录。当你第一次看到自己调出的液体带着真实的粘滞感和表面光泽在屏幕上流动时那种感觉绝对值得之前所有的等待。