跳转到主要内容

使用并行快速扫描的Eikonal求解器

项目描述

快速扫描SDF求解器

此存储库包含一个Python包,提供对3D中Eikonal方程的高效求解器。此包的主要用途是从其零水平集对有符号距离函数(SDF)进行重新距离(例如,在优化SDF的优化过程中)。特别是,此实现是为了在我们的关于可微分的有符号距离函数渲染的论文中使用而创建的。您可以在此处找到该论文的代码。

此库不将网格转换为SDF,尽管它可以用于此类应用。此实现可以在GPU(使用CUDA)上高效运行,并提供作为后备的CPU实现。求解器通过Python绑定公开,并使用Dr.Jit实现其部分功能。

代码实现了Eikonal方程的并行快速扫描算法

Eikonal方程的并行快速扫描方法。Miles Detrixhe,Frédéric Gibou,Chohong Min,《计算物理杂志》237(2013年)

此实现部分基于PDFS,有关许可证详细信息,请参阅LICENSE

安装

PyPi上提供了预构建的二进制文件,可以使用以下命令安装

pip install fastsweep

或者,这个包也可以相对容易地从源代码构建和安装。构建设置使用CMake和scikit build。请使用以下命令克隆包括子模块的仓库:

git clone --recursive git@github.com:rgl-epfl/fastsweep.git

然后可以通过调用以下命令构建和安装Python模块:

pip install ./fastsweep

重要:为了确保二进制兼容性,此求解器和drjit必须使用完全相同的编译器和设置进行编译。如果您使用pip安装了预构建的drjit包,您很可能也想要为fastsweep使用预构建包。相反,如果您想在本地上编译这些包中的任何一个,您很可能也需要在本地上编译另一个。如果存在二进制兼容性问题,调用求解器的功能很可能会抛出类型不匹配错误。

用法

求解器接受一个Dr.Jit 3D TensorXf作为输入,并从其零水平集求解Eikonal方程。它返回一个有效的SDF,可以重新生成输入的零水平集。求解器不支持1D或2D问题,对于这些问题,可以使用例如scikit-fmm

给定一个初始的3D张量,求解器可以按以下方式调用:

import fastsweep

data = drjit.cuda.TensorXf(...)
sdf = fastsweep.redistance(data)

生成的数组sdf是一个有效的SDF。求解器返回一个drjit.cuda.TensorXfdfjit.llvm.TensorXf,具体取决于输入的类型。一个完整的示例脚本提供在这里:这里

限制

  • 当前代码假设SDF包含在单位立方体体积中,并且没有对非均匀体积或其他尺度进行测试。
  • CPU版本效率不高,此代码主要是为GPU执行而设计的,CPU版本实际上只是一个后备。
  • 零水平集的计算没有考虑不同的网格插值模式。

引用

如果您在学术论文中使用此求解器,请考虑引用以下论文

@article{Vicini2022sdf,
    title   = {Differentiable Signed Distance Function Rendering},
    author  = {Delio Vicini and Sébastien Speierer and Wenzel Jakob},
    year    = 2022,
    month   = jul,
    journal = {Transactions on Graphics (Proceedings of SIGGRAPH)},
    volume  = 41,
    number  = 4,
    pages   = {125:1--125:18},
    doi     = {10.1145/3528223.3530139}
}

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分布

fastsweep-0.1.3.tar.gz (48.1 kB 查看哈希值)

上传时间

构建分布

fastsweep-0.1.3-cp311-cp311-win_amd64.whl (77.7 kB 查看哈希值)

上传时间 CPython 3.11 Windows x86-64

fastsweep-0.1.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (91.3 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ x86-64

fastsweep-0.1.3-cp311-cp311-macosx_11_0_arm64.whl (71.8 kB 查看哈希值)

上传于 CPython 3.11 macOS 11.0+ ARM64

fastsweep-0.1.3-cp311-cp311-macosx_10_14_x86_64.whl (77.6 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.14+ x86-64

fastsweep-0.1.3-cp310-cp310-win_amd64.whl (76.7 kB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

fastsweep-0.1.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (88.3 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

fastsweep-0.1.3-cp310-cp310-macosx_11_0_arm64.whl (70.4 kB 查看哈希值)

上传于 CPython 3.10 macOS 11.0+ ARM64

fastsweep-0.1.3-cp310-cp310-macosx_10_14_x86_64.whl (76.2 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.14+ x86-64

fastsweep-0.1.3-cp39-cp39-win_amd64.whl (76.8 kB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

fastsweep-0.1.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (88.7 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

fastsweep-0.1.3-cp39-cp39-macosx_11_0_arm64.whl (70.6 kB 查看哈希值)

上传于 CPython 3.9 macOS 11.0+ ARM64

fastsweep-0.1.3-cp39-cp39-macosx_10_14_x86_64.whl (76.3 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.14+ x86-64

fastsweep-0.1.3-cp38-cp38-win_amd64.whl (76.7 kB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

fastsweep-0.1.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (88.3 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64

fastsweep-0.1.3-cp38-cp38-macosx_11_0_arm64.whl (70.4 kB 查看哈希值)

上传于 CPython 3.8 macOS 11.0+ ARM64

fastsweep-0.1.3-cp38-cp38-macosx_10_14_x86_64.whl (76.1 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.14+ x86-64

由以下组织支持