此示例通过创建波浪和海岸线液体模拟,展示了 Bifröst 的基本概念。它向您展示了如何执行以下操作:
- 创建 Bifröst 液体和发射器对象。
- 添加多边形对象作为碰撞对象。
- 编辑 Bifröst 液体和发射器属性。
- 调整模拟分辨率和质量。
- 生成和渲染 Bifröst 网格。
准备工作
在开始之前,请执行以下操作:
- 在视口中,确保“渲染器 > Viewport 2.0”(Renderer > Viewport 2.0)处于选中状态。
- 在“设置 > 时间滑块”(Settings > Time Slider)首选项中,确保“播放速度”(Playback Speed)设定为“播放每一帧”(Play every frame)。
- 选择“Bifrost > Bifrost 选项”(Bifrost > Bifrost Options),然后执行以下操作:
- 将结束帧设定为 300 和 400 之间的任意位置。
标题可用于这些视频。若要启用/禁用标题,请单击视频播放器右下角的 CC 按钮。标题以 3 种语言提供。
创建模拟
为了构建波浪和模拟,该场景使用以下多边形对象:
- shorelineCollision,包含液体内容。
- waterEmission,其充当模拟的液体发射器对象。
- wavePaddle,其可在 Bifrost 液体中生成波浪运动。
- boulderCollideMesh,其与液体粒子碰撞。
注: 若要查看已完成的波浪和海岸线液体模拟示例,请执行以下操作,将 Bifröst 示例文件导入到场景中:
- 选择“Bifrost”>“获取 Bifrost 示例”(Get Bifrost Example)。
- 在“Visor”窗口中,单击“Bifrost 预设”(Bifrost Preset)选项卡。
- 在“wavePaddleShoreline.ma”上单击鼠标右键 (
),然后从显示的菜单中选择“导入”(Import)。
创建模拟
- 选择想要其发射液体的网格对象,然后选择“Bifrost > 创建液体”(Bifrost > Create Liquid)。
在本示例中,将选择 waterEmission 网格。
- 这会将三个对象添加到场景:
在该示例中,液体盛放在 shorelineCollision 网格中,因此它必须是一个碰撞对象。
- 选择 bifrostLiquid 和网格,然后选择“Bifrost > 添加碰撞对象”(Bifrost > Add Collider)。
- 预览模拟。
请注意时间滑块中的绿色和黄色帧。这些帧指示临时缓存的状态。播放模拟时,相应的帧将排队等候计算,并显示为黄色。随着帧计算完成并在缓存中可用,它们将以绿色显示,您可以快速进行重新播放或拖动。
请注意,发射的粒子会沿碰撞网格的底部曲面流动,最终落在该场景之外。它们不会按预期累积在网格的体积中。
默认情况下,Bifröst 将碰撞对象体素化为实体对象,这可能会在使用类似该形状的薄形状或开放形状时,产生粒子可以穿过的孔。若要更改 Bifröst 如何体素化碰撞对象,则需要编辑其“碰撞”(Collision)属性。
- 选择 shorelineCollision 网格,然后在“属性编辑器”(Attribute Editor)中,单击其形状节点选项卡。
- 滚动到“Bifrost”部分,然后展开“碰撞”(Collision)部分。
- 在“转换”(Conversion)下,设定以下内容:
- 将“厚度”(Thickness)设定为 2.0。
- 将“模式”(Mode)设置为“壳”(Shell)
- 在“大纲视图”(Outliner)中,选择 bifrostLiquid,然后播放模拟。
现在,粒子集中在 shorelineCollision 网格上。在“壳”(Shell)模式下,会将网格曲面周围的体积体素化为设置的“厚度”(Thickness)值。值为 2.0 时厚度已足够,可防止粒子落空。
生成波浪运动
shorelineCollision 对象现在会收集发射的粒子,但它们基本是静态的。您可以生成多种运动方式,例如简单重力、加速器或移动碰撞对象。在此示例中,wavePaddle 动画网格作为碰撞对象添加到模拟。其前后运动将在液体中生成波浪。
- 选择 bifrostLiquid 和 wavePaddle 网格,然后选择“Bifrost > 添加碰撞对象”(Bifrost > Add Collider)。
- 预览模拟。
动画网格现在会与液体交互,在池内生成类波浪的运动。
- 现在,您可以添加卵石对象用作碰撞对象。
修改发射属性
当您创建发射器时,“连续发射”(Continuous Emission)在默认情况下处于启用状态。
如果您将发射器用作河流或流水水龙头等对象的源,或者如果您想要液体喷射(如从软管喷嘴喷出),请将“连续发射”(Continuous Emission)保持启用状态。
若要填充水池或发射一滴水,请关闭“连续发射”(Continuous Emission)。液体粒子仅在模拟的第一帧发射。请参见使用 Bifrost 发射器。
对于此示例,请禁用“连续发射”(Continuous Emission)。
- 选择 waterEmission 网格对象。
- 在其形状节点的“属性编辑器”(Attribute Editor)中,滚动到“Bifrost”部分。
- 展开“液体发射“(Liquid Emission)并禁用“连续发射”(Continuous Emission)。
- 预览模拟。
请注意,某些远离海岸线的粒子流将无限生成网格输出。Maya 仍会在模拟计算中包括这些粒子,这意味着它们会大大增加 Maya 需要体素化的区域。这会降低模拟性能。
您可以将终止平面添加到场景中,以从模拟中消除这些粒子。
- 选择 bifrostLiquid。
- 选择“Bifrost > 添加终结平面”(Bifrost > Add Killplane)。
bifrostKillplane 对象在世界原点处创建并且会自动选择。
- 将 bifrostKillplane 对象平移到 shorelineCollision 对象下方。
- 预览模拟。
任何偏离的粒子都将从模拟中移除。
显示诊断颜色
您可以将特定通道显示为视口中的颜色渐变,用于诊断或其他用途。在本部分中,您将使用粒子速度值来设置“颜色通道重映射”(Color Channel Remap)渐变。
在设置颜色渐变之前,通过增加液体曲面上的粒子密度来向液体添加细节。
- 选择 bifrostLiquid,在 bifrostLiquidContainer“属性编辑器”(Attribute Editor)中,滚动到“发射”(Emission)部分,将其展开,然后展开“粒子分布”(Particle Distribution)。
- 将“曲面粒子密度”(Surface Particle Density)设定为 3。
通过增加此值,可以在需要细节的液体表面增加粒子的数量,而不是增加贯穿整个体积的粒子数量。
- 单击“属性编辑器”(Attribute Editor)中的“bifrostShape”选项卡。
- 在“显示”(Display)部分中,确保“颜色通道”(Color Channel)设置为“速度”(Velocity)。
- 播放或拖动模拟。
大多数粒子为蓝色,表示其速度低于当前“颜色通道最大值”(Color Channel Max) 20。若要显示粒子速度的范围,可重置此值使速度较高的粒子显示为白色。
- 将值渐变的右侧控件拖动到左侧接近于 0 的位置。
“选定位置”(Selected Position)值 0.2 可产生良好结果。
您可以将此值用作 1.0 的一部分,以设置“颜色最大值通道”(Color Max Channel)(例如 0.2 × 20.0 = 4.0)
- 将“颜色最大值通道”(Color Max Channel)设置为 4.0。
- 将值渐变的右侧控件重置为其原始设置:“选定位置”(Selected Position) 1 和 “选定值”(Selected Value) 1.0。
- 预览模拟。
提示: 您可以使用“Bifrost 控件”(Bifrost Controls)下的“剪裁”(Clipping)属性预览形状的切片。
提高模拟的分辨率和准确度
当您对模拟的低分辨率版本感到满意时,请提高其分辨率和准确度以增强细节。在本部分中,您将增加“主体素大小”(Master Voxel Size)和“传输步长自适应性”(Transport Step Adaptivity)。
- 选择 bifrostLiquid,并在 bifrostLiquidContainer 的“属性编辑器”(Attribute Editor)中,将“主体素大小”(Master Voxel Size)设置为 0.2。
使用较小的值可以添加更多细节,但会降低计算速度。
- 滚动到“发射”(Emission)部分。
- 将“传输步长自适应性”(Transport Step Adaptivity)设定为 0.95。
增加该值会导致速度变慢,但模拟精确度更高。尤其值得注意的是,较高的值可以减少因传输错误而产生的问题,如体积损失、粒子聚束、自发爆炸和碰撞对象泄露。
- 预览模拟。
通过减小重力的影响,您可以增加液体的运动,尤其是在海岸线的浅层区域的运动。
- 在“液体解算器属性”(Liquid Solver Attributes)下,将“重力幅值”(Gravity Magnitude)设置为 8.0
- 预览模拟。
通过减小重力,粒子将流动更快,并创建更多湍流波浪。
生成 Bifröst 用户缓存
对模拟效果满意后,可以生成用户缓存,这样您便无需为网格和渲染重新进行计算。
- 选择,然后关闭“启用后台处理”(Enable Background Processing)和“启用临时缓存”(Enable Scratch Caching)。
这样可以减少不必要的计算和内存要求。
- 选择 bifrostLiquid 或 bifrost 对象。
- 选择。
- 选择以模拟的开始帧为起点的“缓存时间范围”(Cache time range)。对于该示例,选择“时间滑块”(Time Slider)。
- 单击“创建”(Create)或“应用”(Apply)。
完成后,请注意 bifrostLiquidContainer 节点上的“缓存”(Caching)属性已自动设定为从缓存文件进行读取。
调整着色器属性
bifrostLiquidMaterial 明暗器可以渲染通过液体生成的网格,或直接渲染液体体素的等值面。在此示例中,在调整着色器属性时使用体素进行测试渲染。
- 选择,并确保“使用以下渲染器渲染”(Render Using)设置为“mental ray”。
- 转到模拟结束位置,然后渲染当前帧。
注意液体如何呈几乎完全透明状态。除一些镜面反射高光外,没有泡沫或其他有趣的细节。
- 查看属性编辑器中的 bifrostLiquidMaterial 设置。“泡沫重映射”(Foam Remap)已启用,但“输入最小值”(Input Min)和“输入最大值”(Input Max)的设置对于此场景可能过高。
- 由于场景中的漩涡值对泡沫有很大影响,因此在 bifrostShape 节点上将“粒子显示”(Particle Display) “颜色通道”(Color Channel)设定为“漩涡”(vorticity)。
请注意,有些粒子为白色,表示它们的漩涡达到或高于设置的“颜色通道最大值”(Color Channel Max)值。
- 将“颜色通道最大值”(Color Channel Max) 设定为 100。请注意,少量粒子的漩涡值非常高。
- 将值渐变的右侧控件拖动到左侧,几乎为 0。大多数粒子将保持为蓝色,表示它们的漩涡值非常低。
如果继续调整“颜色渐变重映射”(Color Ramp Remap)设置,则可以更好地了解场景中值的范围和分布。
- 在 bifrostLiquidMaterial 的“泡沫重映射”(Foam Remap)属性中,将“输入最小值”(Input Min)设定为 2,并将“输入最大值”(Input Max)设定为 5。
- 再次渲染当前帧。
现在,您可以看到泡沫的效果。您可以使用相同的方法来调整着色器中的其他渐变。
网格和渲染
对于最终输出,渲染网格而不是体素的等值面,因为“Bifrost 网格”(Bifrost Meshing)属性提供对液体曲面的附加控制。
- 隐藏 Bifrost 对象以防止除网格外对其进行渲染。
- 在 bifrostShape 属性中,激活“Bifrost 网格”(Bifrost Meshing)部分中的“启用”(Enable)。
您可能会注意到海岸线顶部附近有一些水滴,但这些水滴位于碰撞对象下方,在渲染后将不可见。
- 将“分辨率”(Resolution Factor)增加至 2 可在网格中显示更多细节。
- 选择。
- 在“选项”(Options)选项卡上,激活“平移”(Translation)组中的“导出顶点颜色”(Export Vertex Colors)。这使 mental ray 可以在网格上为速度和漩涡使用颜色集,而不是从体素中进行采样。
- 在“功能”(Features)选项卡中,将“运动模糊”(Motion Blur)设置为“全部”(Full)。
- 渲染场景。