目录
FLIP Object —— FLIP流体对象
创建粒子流体对象,包含必要的粒子属性和场;
粒子particles属性
- pscale, 等于particle separation * particle radius scale;
- v,可继承或初始化设置;
- viscosity,默认不创建需勾选(默认值为1);
- temperature,默认不创建需勾选(默认值为0,可在Physical参数面板内设置);
- 用于不同一的外部自定义属性,然后在传递给场:
- density、viscosity、divergence
体积场
- surface,vel(faces),pressure(解释器生成的),source;
- massdensity,默认值为1000,可在Physical参数面板内设置;
- viscosity,默认值为0,可在Physical参数面板内设置;
- divergence,默认不创建需勾选,默认值为0;
- collision,collisionvel,collisionweights
物理特性
- Bounce、Bounce Forward
- Friction、Dynamic Friction
- Temperature
- massdensity、viscosity
FLIP Solver —— FLIP流体解算器
Particle Motion
Under-Resolved Particles,如何处理未解析粒子(属性underresolved(0-1));
- No Detection,不检测未解析粒子,无属性underresolved;
- Detection Only,仅检测不影响v,生成属性underresolved;
- 沿surface场外推__valid,Max Cells to Extrapolate参数控制外推大小;
- Treat as Ballistic,脱离surface场视为Ballistic,生成属性underresolved;
- 依据surface转化为fog类型,来判断underresolved属性值(确定受流体力影响大小);
- Use Extrapolated Velocity,外推__valid,生成属性underresolved;
- 沿surface场外推__valid,Max Cells to Extrapolate参数控制外推大小(确定受流体力影响大小);
- Kill,删除未解析粒子;
- 沿surface场外推__valid,Max Cells to Extrapolate参数控制外推大小;
注,ballistic、underresolved、droplet均可控制是否受体积力影响(即粒子v与解算后的vel场);
Behavior
Reseeding
Single Pass Reseeding,在单个pass内即执行volume density reseeding也执行guide-reseeding,以提高效率;注意输入场的设置;
- Only Source Seeding,仅Source Surface内seeding粒子,不断补种的粒子会引起noise表面,对缓慢移动尤为明显,此选项会减少此种noise;
注,当设置reseeding值太高,会引起流体体积增大,可降低Particle Radius Scale、Death Threshold,或降低Surface Oversampling;
Separation
由于粒子最终可能会比pscale更靠近,内力是无法分离粒子(velocity project会移除此力),会使;流体随时间压缩;
通过直接调整粒子位置,使其分离,也确保没有能量被添加到系统;
Droplets
通过droplet属性(0~1),来表示与主体分离的粒子;完全droplet的粒子将不受体积力影响,也不会对vel场产生影响;可缓解分离粒子对光滑表面产生不切实际的大扰乱;
Vorticity
计算速度场vel的旋度curl,然后与粒子现有的vorticity属性融合;
Rest
创建rest、rest2属性,用于追踪流体位置;可在材质时添加noise;
Volume Motion
Velocity Transfer,指定速度的传递模式(从粒子到网格(解析前),然后再传回粒子)
- FLIP(Splashy),此模式用于飞溅、高能解算,会在表面引入noise,如河流;
- v = mix(v, mix(vel-oldvel+v, vel, smoothing), forcescale)
- vel是体积解算后(如viscosity、pressure等解算),oldvel体积解算前;
- APIC (Swirly),此模式用于保留涡流并减少表面noise,及较少飞溅的漩涡解算,小规模、高粘性,如岩浆;
- 直接传递速度场给粒子,并保持流体角动能(Gas Field to Particle);
- 传递半径基于体素尺寸,使用较小的体素(如Grid scale=1.5)将保留更多流体细节;由于更大的半径和额外的属性,此模式会稍微慢些且使用更多内存;会禁用Under-Resolved Particles选项,因为所有粒子均会完全解析;
Smooth Surface,使用更精确的算法追踪surface,对缓慢的流体会更平滑,对河流、瀑布改善不明显,可关闭以提升性能;
Update Surface,控制每子步结束时,如何更新surface以匹配粒子位置;
- None,补更新,由于粒子位置最后才更新,则surface会稍微滞后与粒子位置;
- Advect(Gas Advect Field),vel驱动surface,比Rebuild快,但如其精确;
- Rebuild(Gas Particle to SDF),从粒子构建整个surface,最精确的方式但最慢;Narrow Band时禁用;
Update Velocity,控制每子步结束时,如何更新vel以匹配粒子位置;
- None,补更新,由于粒子位置最后才更新,则vel会稍微滞后与粒子位置;
- Advect(Gas Advect Field),oldvel确定vel,比Rebuild快,但如其精确;
- Rebuild(Gas Particle to SDF),从粒子构建整个vel,最精确的方式但最慢;Narrow Band时禁用;
Volume Limits
Fill New Volume,Volume Limits帧之间改变时,在新的空区域生成粒子;
- Use Waterline、Use Boundary控制新粒子如何被创建;
Use Boundary Layer,在流体周围维持较薄的区域,以模拟无限tank;
- 根据提供的surface volume、velocity volume,删除和重新生成粒子,边界处的反应能降低;
- 进入间隙的粒子,且在指定surface(waterline或surface volume)的上方,则删除;在下方,则赋予新的速度(如velocity volume有指定);
Apply Boundary Velocities,开启时使用velocity volume覆盖边界速度场,禁用时使用附近粒子速度;
- 如开启waterline,则使用零速度;
Collision
Velocity Type,计算碰撞速度的方法,不影响Volume Source引入的碰撞速度场;
- rigid,不考虑变形,仅角速度或线性速度被使用;
- point,拓扑不变,考虑变形;
- volume,以SDF计算变形,不要拓扑不变;
Surface Extrapolation,当流体表面surface位于碰撞体素距离内,会被认为是碰撞对象的一部分;
- 外推surface有助于流体沿曲面平滑流动,但会产生轻微的粘性;
- 降低该值,会产生更多飞溅,特别是进入流体;
Volume Fraction Method,计算collisionweights(矢量)采样模式,提高弯曲或倾斜表面压力解算的准确度;
- Collision Supersampling,通过对于每个体素多次采样碰撞体积的方式;处理方形碰撞对象更好,但会在倾斜表面引入类似摩擦的力;
- Voxel Face Area,通过每个体素的面被碰撞体积涵盖数量的方式;可最平滑的处理倾斜面,但对方形过于光滑;
- Tetrahedral,将构成体素的四面体进行计算,以获得平滑准确的结果;
- None,不计算collisionweights;可使用Gas SDF to Fog自己设置;
Transparency,流体对碰撞体的透明量,以降低碰撞影响且允许流体穿过;
- Collison Detection因设置为None;
- collisionweights = collisionweights*(1-transparency) + transparency
Viscosity
Density
默认流体有统一的密度(FLIP Object/Physice参数设置),Gas Project Non Divergent Variational 或 Gas Project Non Divergent Adaptive 会使用此场,在粘性及压力解算时以影响速度场;在volume velocity端口输入massdensity场,可任意编辑;
注,设置为multily模式时,可使用相对密度值来缩放默认流体密度;由于不会明确追踪不同密度流体之间的边界,可能需要夸大密度比,以避免过渡混合;
Air
默认气体不被模拟,会完全视为空隙;会导致气体区域基于流体运动而塌陷或膨胀;强制空气不可压缩会限制液体运动,以将空气区域视为不可压缩;
Tips,当在碰撞容器内,执行空气不可压缩时,应禁用Dynamically Resize Fields,否则可能检测不到空气区域;
注
- 在空气区域内不解算速度,只是限制流体的速度以压缩或膨胀空气体积;
- 在Paticle Fluid Surface内使用Preserve Bubbles以保留流体内的气泡;
- 禁用Solver Pressure with Adaptivity参数;
Divergence
默认解算会移除速度场的散度,这使粒子既不分离也不收敛;但如想调整粒子间距,使用力是困难的,因为projecttion会消除力;
可添加每粒子属性,以存储粒子散度的多少,正值扩散负值收缩;在volume velocity端口输入divergence场,可任意编辑;
注,必须开启FLIP Object的Add Divergence Field参数;
Surface Tension
表面张力会使用不规则的变平,并将水拉成droplet;对小规模水非常有用,此时表面张力的影响比重力更重要;对于较大的值,通常需要额外的子步来确保稳定;
会创建surfacepressure场(surface场的曲率curvature),该场除了用于表面张力,还可用于suction或avoidance等;
Gas Project Non Divergent Variational 或 Gas Project Non Divergent Adaptive 会使用此场,以影响速度场;
Solver
Narrow Band
当启用时,仅保留流体表面附近的粒子,其余部分由volume表示(如surface或velocity);移除流体深处的粒子可节省内存,并提高解算性能;
注,由于流体大部分是volume表示,Density by Attribute、Viscosity by Attribute不被支持,需使用Attribute/Field Pair参数;
注,不会创建对应场,需由用户初始化;
TIPS
- 缓存大量粒子时,勾选Save In Background,以便在写入磁盘时继续解算;删除任何不需要的属性;
- 激活Reseeding以保持表面细节,将Surface Oversampling值增加到2或以上;
- 通常不需增加substeps,快速碰撞、改善缓慢移动的粘性流体外观、surface tension,可能需增加;
- 计算精确的碰撞速度,勾选Cache Simulation,对于大量粒子解算,关闭Allow Caching;
- Pop Source,非Flip Source;
- Pop节点均可用,如pop force/pop speed limit/pop drag;
- 最好添加属性,id、age、vorticity;可通过id属性删除有问题的粒子;
- xyzdist(primuv)处理高精度碰撞表面;
- 根据粒子数密度,缩放pscale
//根据粒子数密度,缩放pscale int pc[]=pcfind(0,P,@P,chf("max_dist"),chi("max_pts")) @pscale*=float(len(pc))/chi("max_pts");
- 优化解算和缓存;
- 缓存前删除不需要的属性、删除相机外的粒子;
- Delay and Geometry(渲染时);