Реконструкция теста Энрайта с использованием OpenVDB - PullRequest
0 голосов
/ 22 мая 2018

Я хочу воссоздать результаты теста Enright с OpenVDB, как упомянуто в статье Кена Музета.

После настройки OpenVDB я создал сферу аналогично тому, как она былаописанный в тесте OpenVDB git .

Я получил результаты, которые сильно отличаются от результатов, показанных в статье.

мой код показан ниже:

openvdb::GridCPtrVec SphereTest(){
openvdb::GridCPtrVec GridVec;

float fGridSize = 512;

int iGridSize = 512;

double w = 1;

openvdb::Vec3f centerEnright(0.35*fGridSize, 0.35*fGridSize, 0.35*fGridSize);

openvdb::FloatGrid::Ptr grid(new openvdb::FloatGrid());

grid->setGridClass(openvdb::GridClass::GRID_LEVEL_SET);

auto tree = grid->treePtr();

auto outside = 5 * w;

auto inside = -outside;

for (int i = 0; i < iGridSize; ++i)
{
    for (int j = 0; j < iGridSize; j++)
    {
        for (int k = 0; k < iGridSize; k++)
        {
            openvdb::Coord coord(i, j, k);
            const openvdb::Vec3f p = grid->transform().indexToWorld(coord);
            const float dist = float((p - centerEnright).length() - (0.15*fGridSize));
            auto aDist = abs(dist);

            if (aDist < outside)
            {
                if (dist>0)
                    tree->setValue(coord, dist);
                else
                    tree->setValue(coord, dist);
            }
            else
            {
                if (dist>outside)
                    tree->setValueOff(coord, outside);
                else
                    tree->setValueOff(coord, inside);
            }


        }
    }
}

std::cout << "Active Voxels MV: " << grid->activeVoxelCount() / 1000000.0 << "\n";

double mem = MemInfo::virtualMemUsedByMe();

std::cout << "Memory MB: " << mem / 1000000.0 << "\n";

openvdb::tools::pruneLevelSet(grid->tree());

std::cout << "Active Voxels MV: " << grid->activeVoxelCount() / 1000000.0 << "\n";

double lastmem=mem;

mem = MemInfo::virtualMemUsedByMe();

std::cout << "Memory MB: " << (mem-lastmem) / 1000000.0 << "\n";

GridVec.push_back(grid);}

мои результаты следующие:

Активные Voxels MV: 0,742089

Память MB: 617,325

после

Активные Voxels MV:0,742089

Память МБ: 56,234

и, как видно, она в десять раз больше из результатов, приведенных в статье.

Результаты видныв таблицах II, III и IV в статье, относящейся к сетке 512 ^ 3, с ветвлением дерева [6,5,4,3].Я достиг почти такого же количества активных вокселей (таблица III), но со значительной таблицей дополнительного потребления памяти (IV), в то время как результаты таблицы II очень запутанные.я что-то пропустил?или делает что-то не так, может быть, не активирует какое-либо сжатие или квантование битов, как говорится в статье.

также при просмотре сгенерированной сетки с помощью средства просмотра она показывает идеальную округлую сферу (не вокселизованную в логическом порядке)), к чему я клоню?

есть мысли?

спасибо

...