Skip to main content

在zeno中渲染流体

我们之前渲染流体的流程都是在blender中的。教程如下所示: https://blog.csdn.net/weixin_43940314/article/details/125260073

实际上zeno渲染流体更加方便。

我们已有的数据为80个时间帧的粒子的位置。以obj格式存储。后缀为pos.1.obj, pos.2.obj...

本文核心目的有两个:

  1. 从粒子位置数据进行表面重建。
  2. 从表面重建的结果渲染流体。

本文采用的zeno版本为2022-7-28构建的gup cuda版本。

1表面重建

我们将要采取的核心节点为SmoothLiquidSDF节点

输入obj数据

先输入obj数据,用readObjPrim和StringEval。如果不用stringEval会导致无法读取$F这个内置变量。这个变量代表帧号。

image

此时显示此节点,应该能看到粒子 如果没看到,请点击ReadObjPrim节点后 alt+f

image

将数据转换为vdb格式

使用节点:PrimToVDBPointDataGrid 由于SmoothLiquidSDF节点输入数据必须是vdb格式的,所以我们要转换一下。 转换需要个Dx,取粒子直径即可。我们输入数据的粒子半径为3.0,故此处取6.0

image

表面重建:SmoothLiquidSDF节点

必须的两个输入数据为:

  1. inParticles,需要vdbPoint格式数据。
  2. Dx, 重建的网格精度。越小越细腻。我们的这里大概取1.0

image

此时点击运行,可以看到表面重建结果

image

输出表面结果为obj格式

同样需要先转换格式。由于SmoothLiquidSDF节点输出的为vdb数据,所以转换回prim

然后再writeObjPrim

image

注意显示WriteObjPrim

输出结果

image

2渲染

单独新建一个zeno图

输入Obj

image

BindMaterial 绑定材质

image 这个节点无需输出任何东西,它是根据mtlid来识别材质的。注意要显示它

ShaderFinalize 用BSDF制作材质

image

这个节点参数比较长。只需要记住更改metallic为1,opacity 0.9即可。 并且它是根据mtlid来标识材质的。

结果

点击左上角的显示-光线追踪 image

运行即可得到 image