无法在一个OpenVDB文件中使用两个网格

时间:2018-04-23 19:37:49

标签: c++ rendering maya openvdb

问题如下:

相同的空间我有两个不同的 float 值(密度)网格。

我可以使用下面的代码将它们写入一个OpenVDB文件。但是当我尝试在 Maya 中使用 Arnold 进行体积渲染时,两个网格似乎都包含相同的值。

我可以确认预览中的网格完全不同(在Mantaflow中),并且该文件包含两个网格。

在我看来,第一个网格的值以某种方式被第二个网格的值覆盖。

以下是Mantaflow插件中用于编写OpenVDB文件的相关部分:

void
write_grids_to_vdb(
  const std::vector<
    std::pair<const Grid<Real>&,
              const std::string>
  > & grids_names,
  const std::string filename)
{

  openvdb::initialize();
  openvdb::GridPtrVec grids;

  for (const auto& gn: grids_names) {

    auto vdb_grid = openvdb::FloatGrid::create(0.0);
    vdb_grid->setTransform(
      openvdb::math::Transform::createLinearTransform(1.0));
    vdb_grid->setGridClass(openvdb::GRID_FOG_VOLUME);
    vdb_grid->setName(gn.second);

    openvdb::Coord ijk;
    typename openvdb::FloatGrid::Accessor
      accessor = vdb_grid->getAccessor();
    FOR_IJK(gn.first)
    {
      ijk[0] = i; ijk[1] = j; ijk[2] = k;
      accessor.setValue(ijk, gn.first(i,j,k));
    }

    grids.push_back(vdb_grid);

  }

  openvdb::io::File file(filename);
  file.write(grids);
  file.close();
}

所以我用它来写两个网格&#39;绿色&#39;和“红色”,但在我的渲染图片中,看起来都应该看起来像红色。

这是我对Maya / Arnold设置的相应设置的截图...

Selecting both grids as input

我刚从volumecollector尝试了不同的通道,并得到了相同的图片。

Can change the channel, both look like 'red'

这里的价值也是渲染图片的样子:

red comes from above, green missing

1 个答案:

答案 0 :(得分:0)

解决方法:导出多个VDB文件并将其加载到多个arnold卷中。