Fluids —— FLIP DOP

2024-03-14 00:30
文章标签 flip dop fluids

本文主要是介绍Fluids —— FLIP DOP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

FLIP Object —— FLIP流体对象

FLIP Solver —— FLIP流体解算器

Particle Motion

Behavior

Reseeding

Separation

Droplets

Vorticity

Rest

Volume Motion

Volume Limits

Collision

Viscosity

Density

Air

Divergence

Surface Tension

Solver 

Narrow Band

TIPS


Whitewater Object —— 白水对象

Whitewater Solver —— 白水解算器

Emission

Limits

Forces

Foam

Advanced


FLIP Object —— FLIP流体对象

        创建粒子流体对象,包含必要的粒子属性;        

粒子particles属性

  • pscale, 等于particle separation * particle radius scale;
  • v,可继承或初始化设置;
  • viscosity,默认不创建需勾选(默认值为1);
  • temperature,默认不创建需勾选(默认值为0,可在Physical参数面板内设置);
  • 用于可变的外部自定义属性,然后在传递给场:
    • density、viscosity、divergence

体积场

  • surfacevel(faces),pressure(解算器会生成),source;
  • massdensity,默认值为1000,可在Physical参数面板内设置;
  • viscosity,默认值为0,可在Physical参数面板内设置;
  • divergence,默认不创建需勾选,默认值为0;
  • collision,collisionvel,collisionweights(faces)

物理特性

  • Bounce、Bounce Forward
  • Friction、Dynamic Friction 
  • Temperature
  • density、viscosity

FLIP Solver —— FLIP流体解算器

        FLIP Solver是典型的一个基于粒子和体积混合的流体模拟,所有的流体数据存储在粒子,只有粒子需逐帧保存,确保不会发生不必要的流体混合或损失;但pressure projection是在体积(被实时创建)上完成的;流体是被具有pscale属性的粒子表示的,可被POP/DOP力移动;

        当FLIP流体解算时,临时的速度场会被创建;粒子速度会被传递到该场,该场被用于执行流体projection;避免粒子相互叠加及相似方向运动;

        FLIP Solver的优点是每帧只需运行几个子步,然而SPH则需要5-10个子步或更多才能稳定;FLIP利用一些体积场,来帮助约束可能出现的瞬间impulse;可在任何时候引入新粒子,可使用许多POP工作流;

        FLIP Solver内嵌POP Solver,可在Particle Velocity端口使用POP Force或volume source;任何能更新v、targetv、force属性的节点都可使用,及cd、age等;也支持aging、reaping粒子;

Particle Motion

Under-Resolved Particles,如何处理未解析粒子(属性underresolved(0-1));

  • No Detection,不检测未解析粒子,无属性underresolved
  • Detection Only,使用外推__valid检测,仅检测不影响v,生成属性underresolved
    • 沿surface场外推__valid,Max Cells to Extrapolate参数控制外推大小;
  • Treat as Ballistic,使用__solved检测,生成属性underresolved
    • 依据surface转化为fog类型,来判断underresolved属性值(确定受流体力影响大小);即脱离surface场视为Ballistic;
  • Use Extrapolated Velocity,使用外推__valid检测,生成属性underresolved
    • 沿surface场外推__valid,Max Cells to Extrapolate参数控制外推大小(确定受流体力影响大小);
  • Kill,使用外推__valid检测,删除未解析粒子;
    • 沿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 ScaleDeath Threshold,或降低Surface Oversampling

Separation

        由于粒子最终可能会比pscale更靠近,内力是无法分离粒子(velocity project会移除此力),会使;流体随时间压缩;通过直接调整粒子位置,使其分离,也确保没有能量被添加到系统;

Droplets

        通过droplet属性(0~1),来表示与主体分离的粒子;完全droplet的粒子将不受体积力影响,也不会对vel场产生影响;可缓解分离粒子对光滑表面产生不切实际的大扰乱;

 

Vorticity

        计算速度场vel的旋度curl,然后与粒子现有的vorticity属性融合;

Rest

        创建restrest2属性,用于追踪流体位置;可在材质时添加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 AttributeViscosity 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(渲染时);

Whitewater Object —— 白水对象

体积场

  • surface
  • vel(faces)

物理特性

  • Bounce、Bounce Forward
  • Friction、Dynamic Friction 

Whitewater Solver —— 白水解算器

        模拟白水粒子,用于增强外观(通过添加动态foam、spray、bubble),这些粒子被流体运动影响且互相交互;

        要求emit,surface,vel场,vel场即可是VDB也可是volume,surface如不是VDB(sparse)需关闭Maximum Half-Width

本质上是POP Solver;

Emission

Limits

Forces

Foam

Advanced

这篇关于Fluids —— FLIP DOP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/806702

相关文章

可以根据手机的折叠状态改变播放音效:nova Flip 的妙趣音效

由于折叠机最基础的“可折叠”属性,导致折叠机的扬声器相对于人的位置来说会存在更多的变化,在不同的折叠状态下,听感方面可能就会大有不同。 nova Flip手机利用这一特性,首次根据折叠形态差异,自适应了不同形态的音效氛围。 展开态:当手机是类似于直板机的展开态时,搭配首发的histen9.3音频算法,nova Flip拥有更具清晰度和更自然的音质效果,打造更具还原度的音效体验。   悬

华为nova Flip这么轻薄的机身还能这么卷?

近年来,小折叠手机备受关注,随着各大厂商纷纷布局小折叠赛道,行业内卷现象也让小折叠的创新程度再上一个新的高度。而对拥有庞大的年轻用户基础的小折叠来说,简约大方的设计风格,轻薄小巧的精致外观,以及超大的电池容量仍然是大家选择一款小折叠的几个重要因素。 最新发布的华为nova Flip,就在6.88mm极致轻薄的厚度下,植入了4400mAh的大电池容量。那么,华为nova Flip究竟是如何做到

后置人像主题2.0首现nova Flip,前后置都超能打!

继华为nova12系列的前置人像美颜主题上线后,nova Flip小折叠手机,首次实现在后置自拍场景下,支持nova品牌人像主题2.0功能。 全新升级的华为达芬奇人像引擎 2.0,带来“形、质、色、光、画”智能人像优化,脸型立体,肤质细腻,肤色清透,明暗有致,虚化唯美自然,全面提升人像质感。后置原生、质感、妆感三种人像美颜主题,为用户提供三种不同的美颜质感。 原生主题:高清原相机质感,清爽

PHP array_flip()函数数组去重

array_flip() 函数用于反转/交换数组中的键名和对应关联的键值。 <?php/*** Created by PhpStorm.* User: Jack* Date: 2017/11/23* Time: 11:23*/header('Content-Type:text/html;Charset=utf-8');$arr = array("A0133", "BW010300760001"

并行 parallel DOP 受 Resource Manager 限制

监控 Script select s.SID, s.SERIAL#, s.username ,rpd.plan,        s.RESOURCE_CONSUMER_GROUP,        rpd.PARALLEL_DEGREE_LIMIT_P1  from   v$session s,         DBA_RSRC_CONSUMER_GROUPS rcg,        DBA_

POJ 1753 Flip Game(bfs枚举+递推)

题目地址:http://poj.org/problem?id=1753 这题此前曾经做过,但当时是用的纯BFS做的,然后后来又做了一次组队赛,那是16*16的,果断超时超内存。。能超的都超了。。于是又找了个更好的方法,就是枚举第一行,然后后面的根据第一行的情况推下去。比如,你要让所有的都变成W,如果上一行的对应位置是B的话,那它就必须要翻转。这样能保证前三行的都是W,然后只需判断最后一行就可以判

D触发器(D Flip-Flop)与D锁存器(D Latch)

1 基础概念       我们先来简单回顾一下D触发器(D flip-flop)和D锁存器(D latch)的概念,以及它们在数字电路中的作用。 1.1 D触发器(D Flip-Flop)         D触发器是一种数字存储器件,它在时钟信号的特定边沿(上升沿或下降沿)上捕获并存储输入信号的状态。因此,它被称为边沿触发设备。         在给定的时钟边沿到来时,如果D输入为高(1)

293. Flip Game

题目大意:给一串字符++–….,要依次把所有两个连续++翻转成–,求所有可能的输出. 解题思路:一次遍历,遇到两个连续的++就翻转,输出.同时保证不影响原串,用一个tmp来操作. 注意:这里有一个奇怪的bug,若不先求出s的长度n,而是在for循环中设终止条件为 s.length()-1,则遇到空串(长度为0)会报错 代码: class Solution {public:vector<s

poj 1753 Flip Game(搜索:DFS+水题)

之前看了这个题感觉好难啊,再看看网上写的解题报告觉得整个人都不好了 结果尼玛直接深搜就可以了... 因为枚举2的16次方状态才65536种情况... 肯定不会超时 所以说以后看到DFS的题不要觉得有多复杂,一个步骤一个步骤遍历就行了 代码如下: #include <cstdio>#include <cstring>#include <iostream>#include <al

荣耀正式发布Magic V Flip,打造全形态折叠屏矩阵

6月13日,荣耀Magic V Flip科技时尚大秀在上海举行。作为荣耀旗下首款小折叠手机,荣耀Magic V Flip的问世标志着荣耀完成折叠屏全体系的最终部署,成为少数集齐现有各类折叠屏手机形态的品牌之一。 荣耀从消费者需求出发,以AI和折叠屏两大战略抓手为核心驱动力,为折叠旗舰带来新的价值思考。此次全新发布的荣耀Magic V Flip颠覆行业传统设计,以开创性的超大竖折外屏带来丰富新