Bifröst 工作流示例

此示例通过创建波浪和海岸线液体模拟,展示了 Bifröst 的基本概念。它向您展示了如何执行以下操作:

准备工作

在开始之前,请执行以下操作:

  1. 在视口中,确保“渲染器 > Viewport 2.0”(Renderer > Viewport 2.0)处于选中状态。
  2. “设置 > 时间滑块”(Settings > Time Slider)首选项中,确保“播放速度”(Playback Speed)设定为“播放每一帧”(Play every frame)
  3. 选择“Bifrost > Bifrost 选项”(Bifrost > Bifrost Options),然后执行以下操作:
    • “处理选项”(Processing Options)下,确保已启用“启用后台处理”(Enable Background Processing)
    • “临时缓存管理”(Scratch Cache Management)下,确保已开启“启用临时缓存”(Enable Scatch Caching)

      启用后,Maya 将逐帧数据写入到内存。在 Maya 继续计算的同时,该缓存可以播放和拖动计算的帧。请注意,临时缓存旨在用于实时拖动和播放,仅保存到内存中。

    • “最大内存使用量 (GB)”(Maximum RAM Usage (GB))设定为适合您的系统可用内存的值。
  4. 将结束帧设定为 300 和 400 之间的任意位置。

标题可用于这些视频。若要启用/禁用标题,请单击视频播放器右下角的 CC 按钮。标题以 3 种语言提供。

创建模拟

为了构建波浪和模拟,该场景使用以下多边形对象:

注: 若要查看已完成的波浪和海岸线液体模拟示例,请执行以下操作,将 Bifröst 示例文件导入到场景中:
  1. 选择“Bifrost”>“获取 Bifrost 示例”(Get Bifrost Example)
  2. “Visor”窗口中,单击“Bifrost 预设”(Bifrost Preset)选项卡。
  3. “wavePaddleShoreline.ma”上单击鼠标右键 (),然后从显示的菜单中选择“导入”(Import)

创建模拟

  1. 选择想要其发射液体的网格对象,然后选择“Bifrost > 创建液体”(Bifrost > Create Liquid)

    在本示例中,将选择 waterEmission 网格。

  2. 这会将三个对象添加到场景:
    • bifrostLiquid 将保持 bifrostLiquidContainer 节点,其中包含总体模拟的控件,如分辨率和重力向量。
      注: 您不应为任何 bifrostLiquidContainer 属性设置动画。
    • bifrost 将包含 bifrostShape 节点,该节点表示 Bifrost 生成的用于查看和渲染的数据。
    • bifrostMesh 为多边形网格,可以保持液体表面的多边形化版本,用于导出或其他用途。

      默认情况下,只有在您激活网格之后,它才会有多边形。

    在该示例中,液体盛放在 shorelineCollision 网格中,因此它必须是一个碰撞对象。

  3. 选择 bifrostLiquid 和网格,然后选择“Bifrost > 添加碰撞对象”(Bifrost > Add Collider)
  4. 预览模拟。

    请注意时间滑块中的绿色和黄色帧。这些帧指示临时缓存的状态。播放模拟时,相应的帧将排队等候计算,并显示为黄色。随着帧计算完成并在缓存中可用,它们将以绿色显示,您可以快速进行重新播放或拖动。

    请注意,发射的粒子会沿碰撞网格的底部曲面流动,最终落在该场景之外。它们不会按预期累积在网格的体积中。

    默认情况下,Bifröst 将碰撞对象体素化为实体对象,这可能会在使用类似该形状的薄形状或开放形状时,产生粒子可以穿过的孔。若要更改 Bifröst 如何体素化碰撞对象,则需要编辑其“碰撞”(Collision)属性。

  5. 选择 shorelineCollision 网格,然后在“属性编辑器”(Attribute Editor)中,单击其形状节点选项卡。
  6. 滚动到“Bifrost”部分,然后展开“碰撞”(Collision)部分。
  7. “转换”(Conversion)下,设定以下内容:
    • “厚度”(Thickness)设定为 2.0。
    • “模式”(Mode)设置为“壳”(Shell)
  8. “大纲视图”(Outliner)中,选择 bifrostLiquid,然后播放模拟。

    现在,粒子集中在 shorelineCollision 网格上。在“壳”(Shell)模式下,会将网格曲面周围的体积体素化为设置的“厚度”(Thickness)值。值为 2.0 时厚度已足够,可防止粒子落空。

生成波浪运动

shorelineCollision 对象现在会收集发射的粒子,但它们基本是静态的。您可以生成多种运动方式,例如简单重力、加速器或移动碰撞对象。在此示例中,wavePaddle 动画网格作为碰撞对象添加到模拟。其前后运动将在液体中生成波浪。

  1. 选择 bifrostLiquid 和 wavePaddle 网格,然后选择“Bifrost > 添加碰撞对象”(Bifrost > Add Collider)
  2. 预览模拟。

    动画网格现在会与液体交互,在池内生成类波浪的运动。

  3. 现在,您可以添加卵石对象用作碰撞对象。

修改发射属性

当您创建发射器时,“连续发射”(Continuous Emission)在默认情况下处于启用状态。

如果您将发射器用作河流或流水水龙头等对象的源,或者如果您想要液体喷射(如从软管喷嘴喷出),请将“连续发射”(Continuous Emission)保持启用状态。

若要填充水池或发射一滴水,请关闭“连续发射”(Continuous Emission)。液体粒子仅在模拟的第一帧发射。请参见使用 Bifrost 发射器

对于此示例,请禁用“连续发射”(Continuous Emission)

  1. 选择 waterEmission 网格对象。
  2. 在其形状节点的“属性编辑器”(Attribute Editor)中,滚动到“Bifrost”部分。
  3. 展开“液体发射“(Liquid Emission)并禁用“连续发射”(Continuous Emission)
  4. 预览模拟。

    请注意,某些远离海岸线的粒子流将无限生成网格输出。Maya 仍会在模拟计算中包括这些粒子,这意味着它们会大大增加 Maya 需要体素化的区域。这会降低模拟性能。

    您可以将终止平面添加到场景中,以从模拟中消除这些粒子。

  5. 选择 bifrostLiquid。
  6. 选择“Bifrost > 添加终结平面”(Bifrost > Add Killplane)

    bifrostKillplane 对象在世界原点处创建并且会自动选择。

  7. 将 bifrostKillplane 对象平移到 shorelineCollision 对象下方。
  8. 预览模拟。

    任何偏离的粒子都将从模拟中移除。

显示诊断颜色

您可以将特定通道显示为视口中的颜色渐变,用于诊断或其他用途。在本部分中,您将使用粒子速度值来设置“颜色通道重映射”(Color Channel Remap)渐变。

在设置颜色渐变之前,通过增加液体曲面上的粒子密度来向液体添加细节。

  1. 选择 bifrostLiquid,在 bifrostLiquidContainer“属性编辑器”(Attribute Editor)中,滚动到“发射”(Emission)部分,将其展开,然后展开“粒子分布”(Particle Distribution)
  2. “曲面粒子密度”(Surface Particle Density)设定为 3。

    通过增加此值,可以在需要细节的液体表面增加粒子的数量,而不是增加贯穿整个体积的粒子数量。

  3. 单击“属性编辑器”(Attribute Editor)中的“bifrostShape”选项卡。
  4. “显示”(Display)部分中,确保“颜色通道”(Color Channel)设置为“速度”(Velocity)
  5. 播放或拖动模拟。

    大多数粒子为蓝色,表示其速度低于当前“颜色通道最大值”(Color Channel Max) 20。若要显示粒子速度的范围,可重置此值使速度较高的粒子显示为白色。

  6. 将值渐变的右侧控件拖动到左侧接近于 0 的位置。

    “选定位置”(Selected Position)值 0.2 可产生良好结果。

    您可以将此值用作 1.0 的一部分,以设置“颜色最大值通道”(Color Max Channel)(例如 0.2 × 20.0 = 4.0)

  7. “颜色最大值通道”(Color Max Channel)设置为 4.0。
  8. 将值渐变的右侧控件重置为其原始设置:“选定位置”(Selected Position) 1 和 “选定值”(Selected Value) 1.0。
  9. 预览模拟。
提示: 您可以使用“Bifrost 控件”(Bifrost Controls)下的“剪裁”(Clipping)属性预览形状的切片。

提高模拟的分辨率和准确度

当您对模拟的低分辨率版本感到满意时,请提高其分辨率和准确度以增强细节。在本部分中,您将增加“主体素大小”(Master Voxel Size)“传输步长自适应性”(Transport Step Adaptivity)

  1. 选择 bifrostLiquid,并在 bifrostLiquidContainer 的“属性编辑器”(Attribute Editor)中,将“主体素大小”(Master Voxel Size)设置为 0.2。

    使用较小的值可以添加更多细节,但会降低计算速度。

  2. 滚动到“发射”(Emission)部分。
  3. “传输步长自适应性”(Transport Step Adaptivity)设定为 0.95。

    增加该值会导致速度变慢,但模拟精确度更高。尤其值得注意的是,较高的值可以减少因传输错误而产生的问题,如体积损失、粒子聚束、自发爆炸和碰撞对象泄露。

  4. 预览模拟。

    通过减小重力的影响,您可以增加液体的运动,尤其是在海岸线的浅层区域的运动。

  5. “液体解算器属性”(Liquid Solver Attributes)下,将“重力幅值”(Gravity Magnitude)设置为 8.0
  6. 预览模拟。

    通过减小重力,粒子将流动更快,并创建更多湍流波浪。

生成 Bifröst 用户缓存

对模拟效果满意后,可以生成用户缓存,这样您便无需为网格和渲染重新进行计算。

  1. 选择“Bifrost” > “Bifrost 选项”(Bifrost Options),然后关闭“启用后台处理”(Enable Background Processing)“启用临时缓存”(Enable Scratch Caching)
  2. 这样可以减少不必要的计算和内存要求。

  3. 选择 bifrostLiquid 或 bifrost 对象。
  4. 选择“Bifrost” > “计算并缓存到磁盘”(Compute and Cache to Disk) >
  5. 选择以模拟的开始帧为起点的“缓存时间范围”(Cache time range)。对于该示例,选择“时间滑块”(Time Slider)
  6. 单击“创建”(Create)“应用”(Apply)

    完成后,请注意 bifrostLiquidContainer 节点上的“缓存”(Caching)属性已自动设定为从缓存文件进行读取。

调整着色器属性

bifrostLiquidMaterial 明暗器可以渲染通过液体生成的网格,或直接渲染液体体素的等值面。在此示例中,在调整着色器属性时使用体素进行测试渲染。

  1. 选择“窗口”(Window) > “渲染编辑器”(Rendering Editors) > “渲染设置”(Render Settings),并确保“使用以下渲染器渲染”(Render Using)设置为“mental ray”
  2. 转到模拟结束位置,然后渲染当前帧。

    注意液体如何呈几乎完全透明状态。除一些镜面反射高光外,没有泡沫或其他有趣的细节。

  3. 查看属性编辑器中的 bifrostLiquidMaterial 设置。“泡沫重映射”(Foam Remap)已启用,但“输入最小值”(Input Min)“输入最大值”(Input Max)的设置对于此场景可能过高。
  4. 由于场景中的漩涡值对泡沫有很大影响,因此在 bifrostShape 节点上将“粒子显示”(Particle Display) “颜色通道”(Color Channel)设定为“漩涡”(vorticity)

    请注意,有些粒子为白色,表示它们的漩涡达到或高于设置的“颜色通道最大值”(Color Channel Max)值。

  5. “颜色通道最大值”(Color Channel Max) 设定为 100。请注意,少量粒子的漩涡值非常高。
  6. 将值渐变的右侧控件拖动到左侧,几乎为 0。大多数粒子将保持为蓝色,表示它们的漩涡值非常低。

    如果继续调整“颜色渐变重映射”(Color Ramp Remap)设置,则可以更好地了解场景中值的范围和分布。

  7. 在 bifrostLiquidMaterial 的“泡沫重映射”(Foam Remap)属性中,将“输入最小值”(Input Min)设定为 2,并将“输入最大值”(Input Max)设定为 5。
  8. 再次渲染当前帧。

    现在,您可以看到泡沫的效果。您可以使用相同的方法来调整着色器中的其他渐变。

网格和渲染

对于最终输出,渲染网格而不是体素的等值面,因为“Bifrost 网格”(Bifrost Meshing)属性提供对液体曲面的附加控制。

  1. 隐藏 Bifrost 对象以防止除网格外对其进行渲染。
  2. 在 bifrostShape 属性中,激活“Bifrost 网格”(Bifrost Meshing)部分中的“启用”(Enable)

    您可能会注意到海岸线顶部附近有一些水滴,但这些水滴位于碰撞对象下方,在渲染后将不可见。

  3. “分辨率”(Resolution Factor)增加至 2 可在网格中显示更多细节。
  4. 选择“窗口”(Window) > “渲染编辑器”(Rendering Editors) > “渲染设置”(Render Settings)
  5. “选项”(Options)选项卡上,激活“平移”(Translation)组中的“导出顶点颜色”(Export Vertex Colors)。这使 mental ray 可以在网格上为速度和漩涡使用颜色集,而不是从体素中进行采样。
  6. “功能”(Features)选项卡中,将“运动模糊”(Motion Blur)设置为“全部”(Full)
  7. 渲染场景。