无法让两个网格在一个 OpenVDB 文件中工作
Cannot get two grids working in one OpenVDB file
问题如下:
我有两个不同的浮动值(密度)网格用于相同的space。
我可以使用下面的代码将它们都写入一个 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();
}
所以我用这个写了两个网格'green'和'red',但是在我渲染的图片中它们看起来都是红色的。
这是我为 Maya/Arnold 设置的相应设置的屏幕截图...
Selecting both grids as input
我刚刚尝试了 volumecollector 的不同通道并得到了相同的图片。
Can change the channel, both look like 'red'
这里值得一提的是渲染图片的样子:
red comes from above, green missing
解决方法:导出多个 VDB 文件并将它们加载到多个 arnold 卷中。
问题如下:
我有两个不同的浮动值(密度)网格用于相同的space。
我可以使用下面的代码将它们都写入一个 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();
}
所以我用这个写了两个网格'green'和'red',但是在我渲染的图片中它们看起来都是红色的。
这是我为 Maya/Arnold 设置的相应设置的屏幕截图...
Selecting both grids as input
我刚刚尝试了 volumecollector 的不同通道并得到了相同的图片。
Can change the channel, both look like 'red'
这里值得一提的是渲染图片的样子:
red comes from above, green missing
解决方法:导出多个 VDB 文件并将它们加载到多个 arnold 卷中。