目录
Simulation area
Sparse solving
Understanding resizing
Simulation area
在模拟的期间,pyro场都在当前容器内定义;开始非常小,随模拟的进行,解算器会不断的对其扩展或收缩;为重置流体框,解算器会追踪指定的参考场(Reference Fields),默认为density、flame;
Pyro Sover可在sparse或dense模式下操作:
- dense,整个容器都被模拟;如占据整个容器,或在smoke外区域需要速度值,则非常有用;H18前,仅能在此模式下执行;
- sparse,模拟仅在容器的激活(active)子集中执行;此模式通常效率更高,因为只在感兴趣的区域执行;但也有些局限;
Sparse solving
如solver和object都开启了Enable Sparse Solving,则将在sparse模式下操作,默认是开启的;另外,所有场的重置尺寸都必须在full tiles下执行;从H18起,外部调整尺寸只能在sourcing时,通过Volume Source进行;如Enlarge Fields to Contain Sources开启,则Enlarge by Full Tiles也必须开启;
注,2D和OpenCL不支持sparse模式;
如在Object和Solver上,检测到任何不兼容的sparse模式设置,则会产生错误;但Solver会忽略外部调整尺寸,所以必须确保full tiles;
在sparse模式内,active场,存储模拟区域;值为1区域将被解算器模拟,值为0为非激活区域;active场将在每子步重新构建,以考虑流体的运动和新的发射源;
Notes
- Gas Build Occupancy Mask负责构建active场;
- 可在Object查看激活区域(Active Region);
- 非激活区域被视为smoke可自由加入的真空区域;因此,如两股烟雾相互对吹,它们会完全看不见,直到足够近以致于激活区域合并;
Full tiles,是16*16*16体素快,且边界必须保持固定;因此在外部调整尺寸是在full tiles下完成的,以提高效率;
Stenciled operations
在sparse模式下,pyro solver确保其所有内部步骤都是sparse完成的;然而其他microsolver(如额外的Gas Disturb),需要使用active场作为stencil,以避免不必要的工作;特别是,如节点有Stencil Field参数,必须设置active;当stencil场被提供,仅stencil值超过0.5的体素应用操作;意味着,节点的工作只在需要的地方进行;
注,解算器的Forces输入,对active场是最新的,应在此附加Stenciled microsolvers;
Understanding resizing
Pyro Solver的Resizing标签下的参数,指定如何确定模拟域;特别是,目标是追踪Reference Fields的非零区域,且提供足够大的缓冲区(如Padding);在dense模式,涉及Reference Fields的非零区域边界,且填充边界框间隙Padding;在sparse模式,会在此边界框内找到激活区域;然后,中间激活区域被扩展以适应Padding;
Simulation start 初始容器是小而空 | |
Sourcing Volume Source将density重置为源的一部分(开启Enlarge Fields to Contain Sources),场的新边界也匹配tile grid(开启Enlarge by Full Tiles); | |
Bound fields 参考场(Reference Fields)非零体素边界框被计算; | |
Add padding 中间边界框被扩展(padding),如是非parse模式,且禁用Resize in Full Tiles,然后蓝色区域将形成新的边界,后续步骤将不在执行; | |
Snap to tile boundaries 中间框的墙将被吸附到tile边界,形成新的边界;如非sparse模式,开启Resize in Full Tiles,后续步骤将不在执行; | |
Find active tiles 将识别新容器的激活tiles,至少一个参考场值非零; | |
Expand for padding 中间激活区域被扩展以适应填充; |