What & How & Why

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
vfx:houdini:dop:node:solvers:flip_solver [2020/02/25 12:09] – [Reseeding] codingharevfx:houdini:dop:node:solvers:flip_solver [2021/11/11 08:08] (当前版本) codinghare
行 2: 行 2:
 //Ver.18.0// \\  //Ver.18.0// \\ 
 <color #7092be>**//Evolves an object as a FLIP fluid object.//**</color> <color #7092be>**//Evolves an object as a FLIP fluid object.//**</color>
-===== =====+----
 ====Basics==== ====Basics====
 //Flip Solver// 的用处是将指定对象“发展”为 particle fluid。\\ \\  //Flip Solver// 的用处是将指定对象“发展”为 particle fluid。\\ \\ 
行 39: 行 39:
   * 不推荐关闭 ''Reseed Particles'' 和将 ''jitter Scale'' 设置为 ''0'',因为这样会获得特别均匀的,呈网格分布的粒子。这样的设置会导致我们最终不能像开启以上选项一样有效的填充 voxel;而因为精度的问题,最终我们也不会得到均匀的粒子分布。   * 不推荐关闭 ''Reseed Particles'' 和将 ''jitter Scale'' 设置为 ''0'',因为这样会获得特别均匀的,呈网格分布的粒子。这样的设置会导致我们最终不能像开启以上选项一样有效的填充 voxel;而因为精度的问题,最终我们也不会得到均匀的粒子分布。
 ==Collision Tips== ==Collision Tips==
-  * 精确的速度对 FLIP 模拟来说**极其的重要**。不准确的碰撞速度会导致流体的溅射或流体从几何体中泄露。为了精确的计算运动或者变形几何体的碰撞速度,**Cache Simulation** 是一定要打开的。不过,当处理大型的流体模拟的时候,我们的缓存可能会不够用。在这种情况下,我们需要关闭 Flip Object 中的 ''Allow Caching'' 选项中将 FLIP 的数据出去,也就是**仅**保留碰撞对象的缓存。+  * 精确的速度对 FLIP 模拟来说**极其的重要**。不准确的碰撞速度会导致流体的溅射或流体从碰撞几何体中泄露。为了精确的计算运动或者变形几何体的碰撞速度,**Cache Simulation** 是一定要打开的。不过,当处理大型的流体模拟的时候,我们的缓存可能会不够用。在这种情况下,我们需要关闭 Flip Object 中的 ''Allow Caching'' 选项中将 FLIP 的数据出去,也就是**仅**保留碰撞对象的缓存。
   * 大部分 FLIP 模拟使用 ''2'' 或着更高的 substeps. 对于变形的碰撞对象,我们需要确认输入的几何体有**与 substep 匹配的插值**。''Collision Source'' 有插值和创建 VDB SDF 的功能,因此可以用于 FLIP。流程可以参考 Deforming Object shelf tool。   * 大部分 FLIP 模拟使用 ''2'' 或着更高的 substeps. 对于变形的碰撞对象,我们需要确认输入的几何体有**与 substep 匹配的插值**。''Collision Source'' 有插值和创建 VDB SDF 的功能,因此可以用于 FLIP。流程可以参考 Deforming Object shelf tool。
 <WRAP center round info 100%> <WRAP center round info 100%>
行 61: 行 61:
 |<color #900>Quantize to Max Substeps</color>|强制指定单位 substep 的长度为 ''1 / Max Substeps'' 的倍数。比如 CFL Condition 需要 3 个 substeps, 那么三次 Substep 的长度会分别为:''.25'',''.5'',''.25''。 | |<color #900>Quantize to Max Substeps</color>|强制指定单位 substep 的长度为 ''1 / Max Substeps'' 的倍数。比如 CFL Condition 需要 3 个 substeps, 那么三次 Substep 的长度会分别为:''.25'',''.5'',''.25''。 |
 ===Particle Motion=== ===Particle Motion===
-<color #900>Apply External Forces</color>|允许对粒子应用外力(标准的 DOP force)。\\ \\ 该选项只会在 FLIP Solver 作为大型模拟的一部分的时候关闭。| +|<color #900>Apply External Forces</color>|允许对粒子应用外力(标准的 DOP force)。\\ \\ 该选项只会在 FLIP Solver 作为大型模拟的一部分的时候关闭。| 
-<color #900>Force Override</color>|默认情况下,该参数是添加 ''ballistic'' 属性的开关。''ballistic'' 属性存储在 particle 上,其作用是混合//POP// 和 //FLIP// 产生的力。该值为 ''0'' 意味着粒子只受 FLIP 的影响,为 ''1'' 则意味着只受 //POP// 力的影响,也就是粒子只由 //POP// 驱动。|+|<color #900>Force Override</color>|默认情况下,该参数是添加 ''ballistic'' 属性的开关。''ballistic'' 属性存储在 particle 上,其作用是混合//POP// 和 //FLIP// 产生的力。该值为 ''0'' 意味着粒子只受 FLIP 的影响,为 ''1'' 则意味着只受 //POP// 力的影响,也就是粒子只由 //POP// 驱动。|
 |<color #900>Under-Resolved Particles</color>|<WRAP center round info 100%>(个人理解) |<color #900>Under-Resolved Particles</color>|<WRAP center round info 100%>(个人理解)
 Houdini 使用 finite element method 来解 N-S 方程,也就是把整个流体分成有限的小区域来解。当解算的精度不足的时候,两个太靠近的单元会因为精度的关系无法计算梯度。这种区域就被称为 Under-Resolved Region,而本参数就是指定如何处理这个区域里的粒子或者 Voxel 的方法。</WRAP>取决于 ''Particle Radius Scale'' 和 ''Grid Scale'' 的值(在 FLIP Object 力设置),处于 Under-Resolved 区域的粒子会不参与压力的解算。本参数控制如何处理这些粒子:\\ \\ **No Detection**\\ 不会尝试检测这些粒子\\ \\ **Detect Only**\\ 添加属性 ''underresolved'' 到每个粒子,并使用该属性统计 Under-Resolved Particles 的总数。\\ \\ **Treat as Ballistic** 使用 ''underresolved'' 属性与 Force Override 建立的属性来决定这些粒子应该以 POP 的方式或者 FLIP 的方式来处理。\\ \\ **Use Extrapolated Velocity** \\ 如果粒子的值没有超出 ''Max Cells to Extrapolate'' 的范围,则对粒子应用基于外推产生的速度(Extrapolation 也是估算的一种),否则就按 //Treat as Ballistic// 的处理方式来计算。\\ \\ **Kill** \\ 除掉所有 under-resolved particles. \\  <WRAP center round info 100%> Houdini 使用 finite element method 来解 N-S 方程,也就是把整个流体分成有限的小区域来解。当解算的精度不足的时候,两个太靠近的单元会因为精度的关系无法计算梯度。这种区域就被称为 Under-Resolved Region,而本参数就是指定如何处理这个区域里的粒子或者 Voxel 的方法。</WRAP>取决于 ''Particle Radius Scale'' 和 ''Grid Scale'' 的值(在 FLIP Object 力设置),处于 Under-Resolved 区域的粒子会不参与压力的解算。本参数控制如何处理这些粒子:\\ \\ **No Detection**\\ 不会尝试检测这些粒子\\ \\ **Detect Only**\\ 添加属性 ''underresolved'' 到每个粒子,并使用该属性统计 Under-Resolved Particles 的总数。\\ \\ **Treat as Ballistic** 使用 ''underresolved'' 属性与 Force Override 建立的属性来决定这些粒子应该以 POP 的方式或者 FLIP 的方式来处理。\\ \\ **Use Extrapolated Velocity** \\ 如果粒子的值没有超出 ''Max Cells to Extrapolate'' 的范围,则对粒子应用基于外推产生的速度(Extrapolation 也是估算的一种),否则就按 //Treat as Ballistic// 的处理方式来计算。\\ \\ **Kill** \\ 除掉所有 under-resolved particles. \\  <WRAP center round info 100%>
行 82: 行 82:
 |<color #900>Birth Threshold</color>|如果当前粒子数量小于该参数与目标粒子数的乘积,那么粒子将会被添加到 voxel 中。| |<color #900>Birth Threshold</color>|如果当前粒子数量小于该参数与目标粒子数的乘积,那么粒子将会被添加到 voxel 中。|
 |<color #900>Death Threshold</color>|如果当前粒子数量大于于该参数与目标粒子数的乘积,那么粒子将会被从 voxel 中移除。| |<color #900>Death Threshold</color>|如果当前粒子数量大于于该参数与目标粒子数的乘积,那么粒子将会被从 voxel 中移除。|
-|<color #900>Random Seed</color>|该 seed 控制一个随时间而变化的随机函数。该函数用于生成新的粒子。因为高频率的 splash 对粒子位置的影响非常大,因此对于其他参数相同的模拟来说,改变此参数对模拟的 bulk motion 影响不大,但对 splash 的行为影响会非常明显。\\ <WRAP center round info 100%>+|<color #900>Random Seed</color>|该 seed 控制一个随时间而变化的随机函数。该函数用于生成新的粒子。因为高频率的 splash 对粒子位置的影响非常大,因此对于其他参数相同的模拟来说,改变此参数对模拟的 bulk motion 影响不大,但对 splash 的行为影响会非常明显。\\ \\ <WRAP center round info 100%>
 //Bulk motion// 是一个物理术语,大致描述了粒子群在受力时会往力的方向整体运动,但单个粒子在跟随力运动的时候会在整体的范围内随机运动。比如沙尘整体按风的方向移动,但移动的同时沙粒在沙尘内随机运动。</WRAP>| //Bulk motion// 是一个物理术语,大致描述了粒子群在受力时会往力的方向整体运动,但单个粒子在跟随力运动的时候会在整体的范围内随机运动。比如沙尘整体按风的方向移动,但移动的同时沙粒在沙尘内随机运动。</WRAP>|
-|<color #900>Interpolate Attributes</color>|所有在本参数列表中的属性都会参与到插值计算中。插值发生在新加入的粒子与其周围粒子之间。相对于拷贝相邻粒子的属性,该方法更加的消耗资源,但对于某些属性的采样来说(比如 velocity),会得到更加平滑的采样效果。比如利用本参数对 <color #ffc90e>Viscosity</color> 做插值,就可以得到在流体冻结和融化之间平滑转换的效果。|+|<color #900>Interpolate Attributes</color>|所有在本参数列表中的属性都会参与到插值计算中。插值发生在新加入的粒子与其周围粒子之间。相对于拷贝相邻粒子的属性,该方法更加的消耗资源,但对于某些属性的采样来说(比如 velocity),会得到更加平滑的采样效果。比如利用本参数对 <color #7092be>viscosity</color> 做插值,就可以得到在流体冻结和融化之间平滑转换的效果。| 
 +<WRAP center round info 100%> 
 +过高的 **Reseeding** 会导致流体在溅射较强烈的模拟中迅速增加体积,这是因为过于拥挤的 voxel 造成的。通过降低 ** Particle Radius Scale** 和 **Death Threshold** 可以帮助缓解该问题;同时降低oversampling 的数量或者 bandwidth 也有助于解决该问题。 
 +</WRAP> 
 +==Separation== 
 +三个属性都来自 **Gas Particle separate**。\\ \\ 
 + 
 +|<color #900>Apply Particle Separation</color>|(可能是因为误差的原因?)velocity projection 并不能保证所有粒子之间的距离都与 <color #7092be>pscale</color> 相同。如果某些粒子直接的距离小于  <color #7092be>pscale</color> ,那么粒子之间的力会因为 velocity projection 而被去掉;这将导致粒子之间的距离小于正常设定,从而导致流体的收缩。| 
 +|<color #900>Separation Iterations</color>|relaxation 的迭代次数。通常设为 <color #7092be>1</color>
 +|<color #900>Separation Rate</color>|该参数决定将粒子向理想状态下粒子所处的位置移动多少距离。| 
 +|<color #900>Separation Scale</color>|Sphere packing 可能会导致流体本身不能按 <color #7092be>pscale</color> 的值来进行堆叠。本参数可用于“解决”该问题(需要通过测试)m(| 
 +==Droplets==