Pyro —— Understanding how pyro works

目录

Simulation fields

Inside the Pyro Solver

Colliders

Pressure projection


Simulation fields

        Pyro是纯体积流体解算器,表示流体状态的数据存于各种标量场和矢量场;Smoke Object会创建这些场,且能可视化这些场;

  • vel场,表示瞬时速度,管理smoke运动;
  • density场,表示烟尘的数量,高密度会更浓;
  • temperature场,表示热量的分布,更热气体会由于浮力上升(背后的物理意义是由Ambient Temp (K)和Reference Temp (K)参数控制);
  • flame场,存储反应物的剩余寿命;
  • divergence场,表示膨胀和收缩;
  • pressure场,包含流体内部压力的辅助标量场;
  • collisioncollisionvel场,表示碰撞体及其速度;
  • active场,表示激活区域(sparse模式时);

Inside the Pyro Solver

Pyro Solver解算上述场,每子步,执行以下步骤:

  • temperature,被扩散(Diffusion)和冷却(cooling);扩散表示热量从高向低传递,冷却表示热量的损失;
  • density、temperature、flame、vel,被驱动,即将运动应用到所有对应的场;
  • flame,老化及生成输出,是反应物的剩余寿命,模拟它们的反应;
  • density,被消散,随时间降低烟雾密度,逐渐消失;
  • Sourcing,被执行,添加新的发射源(如density、temperature);
  • 重置流体款容器,sparse默认时,还会计算active区域;
  • 应用力到vel场(如gravity、wind等);
  • 应用浮力buoyancy,由于温度改变vel场;
  • 应用粘性viscosity于vel场;
  • 应用塑形shape操作,影响运动和外形,包括disturbance、shredding、turbulence;
  • 应用自定义力(解算器的第四个端口);
  • Pressure projection被执行,关键步骤,确保子步结束时与目标divergence一致;

Colliders

        烟雾可与其他对象交互(通过将其添加为碰撞体),最简单的方法是Static Object或Deforming Object;另一种方法是,手动引入collision、collisionvel(Populate Containers->Collide with Objects),可更好的控制碰撞速度;

        此两种添加碰撞体的方法,仅在构建collision、collisionvel方式不同;IOP Iterations参数默认为1,如碰撞体过快或烟雾穿过碰撞体,增加此值;

Pressure projection

        是流体模拟中的关键阶段,负责结合流体与碰撞体,对不可压缩产生涡流,及对爆炸的突然快速膨胀;使用Gas Project Non-Divergent Multigrid DOP节点去执行;

        执行pressure projection会考虑divergence场,如没有添加divergence场(divergence为0),流体将是不可压缩或无散度;使速度场无速度,如下:

 

        直观地说,正divergence场区域为膨胀,反之为压缩;

        查看工具架工具Sparse Fireball,有两种方式添加divergence,一种是直接发射源添加,二种是通过flame场贡献divergence;