OpenVDB гауссово размытие
Я реализую анизотропный алгоритм набора узкополосных уровней, основанный на FloatGrids. Я использую поток средней кривизны, получая среднюю кривизну сетки VDB, используя гауссовское сглаживание, чтобы немного его стабилизировать, а затем вручную интегрируя во времени.
Я думаю, что проблема, с которой я столкнулся, заключается в том, что интенсивность сетки после размытия гауссианом не сохраняется, что приводит к отклонению численного решения от аналитического результата (я использую тест с коллапсом сферы).
Если я суммирую абсолютную величину интенсивностей в узкой полосе, я получу:
- Presmooth: 3.20083e + 06
- Postsmooth: 302976
Таким образом, существует коэффициент потери интенсивности ~10 для узкой полосы из 5 вокселей на сфере в ограничивающем кубе размером 200x200x200. Это может показаться много, для чего должна быть операция сохранения интенсивности (она должна использовать отраженные граничные условия на краях?). Я не могу найти много в документации о том, как обрабатываются граничные условия, или как здесь можно изменить обработку.
- Как я могу предотвратить эту потерю интенсивности, которая, как мне кажется, делает тест на коллапс сферы очень неточным?
Сфера построена из приблизительного представления сферы на основе вокселей (поскольку в конечном итоге мои окончательные данные основаны на изображениях, поэтому она представлена в виде вокселей, а не неявных поверхностей). Я строю набор уровней с помощью tools::levelSetRebuild(), поэтому активна только узкая полоса - оставшиеся вокселы должны быть неактивными или фоновыми.
Я пишу здесь, а не на форуме openvdb, так как там, похоже, нет возможности размещать сообщения без аккаунта Google (создание аккаунта не работает... очевидно, я не человек)