跳转到主要内容

用于可微分渲染的形状优化的拉普拉斯参数化包

项目描述


几何逆向渲染中的大步

Logo

ACM Transactions on Graphics (SIGGRAPH亚洲会议论文集),2021年12月。
Baptiste Nicolet · Alec Jacobson · Wenzel Jakob

Paper PDF Project Page



目录
  1. 安装
  2. 参数化
  3. 运行实验
  4. 仓库结构
  5. 许可协议
  6. 引用
  7. 致谢


安装

此仓库包含使用我们网格顶点位置参数化的所需操作符以及我们在论文中展示的实验代码。

参数化包安装

如果您只想在现有的(基于PyTorch的)管道中使用我们的参数化,我们已通过pip使其可用。

pip install largesteps

这将安装largesteps模块。这仅包含作为PyTorch自定义操作符实现的参数化逻辑。请参阅教程以获取示例用法。

克隆仓库

否则,如果您想重现论文中的实验,您可以克隆此仓库并在本地安装模块。

git clone --recursive git@github.com:rgl-epfl/large-steps-pytorch.git
cd large-steps-pytorch
pip install .

此仓库中的实验依赖于PyTorch。请按照PyTorch 网站上的说明进行安装。

要安装nvdiffrast和Botsch-Kobbelt重新采样器,这些作为子模块提供,请运行setup_dependencies.sh脚本。

nvdiffrast依赖于cudatoolkit-dev软件包来在运行时编译模块。要使用Anaconda安装它,请...

conda install -c conda-forge cudatoolkit-dev

要安装运行实验所需的其它依赖项,也要运行

pip install -r requirements.txt

:warning: 在Linux上,nvdiffrast 需要使用 g++ 编译一些 PyTorch 扩展,请确保这是您的默认编译器

export CC=gcc && CXX=g++

渲染图形还需要安装 blender。您可以在 scripts/constants.py 中指定您要使用的 blender 可执行文件名称

下载场景

实验场景可以从这里下载 此处。请将存档解压到本存储库的顶层。

参数化

简而言之,我们的参数化只需要几行即可获得

# Given tensors v and f containing vertex positions and faces
from largesteps.geometry import laplacian_uniform, compute_matrix
from largesteps.parameterize import to_differential, from_differential

# Compute the system matrix
M = compute_matrix(v, f, lambda_=10)

# Parameterize
u = to_differential(M, v)

compute_matrix 返回参数化矩阵 M = I + λL。此函数还接受另一个参数 alpha,它导致矩阵的公式略有不同,但等价:M = (1-α)I + αL,其中 α ∈ [0,1[。使用此公式,无论 α 如何,矩阵 M 的尺度都有相同的大小顺序。

M = compute_matrix(L, alpha=0.9)

然后,可以通过以下方式检索顶点坐标

v = from_differential(u, M, method='Cholesky')

这实际上将执行与矩阵 M 相关的求解器的缓存查找(如果没有找到,则实例化一个)并求解线性系统 Mv = u。对具有相同矩阵的 from_differential 的进一步调用将使用缓存中存储的求解器。由于此操作实现为可微分的 PyTorch 操作,因此无需对这种参数化进行任何其他优化。

运行实验

您可以在 figures 文件夹中运行实验,其中每个子文件夹对应于论文中的一个图形,并包含两个文件

  • generate_data.py:包含运行实验并将输出写入 scripts/constants.py 中指定的目录的脚本
  • figure.ipynb:包含生成图形的脚本,假设已运行 generate_data.py 并将输出写入 scripts/constants.py 中指定的目录

我们提供了以下图形的脚本

  • 图 1 -> teaser
  • 图 3 -> multiscale
  • 图 5 -> remeshing
  • 图 6 -> reg_fail
  • 图 7 -> comparison
  • 图 8 -> viewpoints
  • 图 9 -> influence

:warning: 几个实验是在 Linux Ryzen 3990X 工作站上使用 TITAN RTX 显卡进行的等时间比较。为了确保可重复性,我们已冻结这些实验中每个方法的步骤数。

仓库结构

“largesteps”文件夹包含通过 pip 提供的参数化模块。它包含

  • geometry.py:包含拉普拉斯矩阵的计算。
  • optimize.py:包含 AdamUniform 优化器实现
  • parameterize.py:包含实际的参数化代码,作为 to_differentialfrom_differential 函数实现。
  • solvers.py:包含用于将参数化坐标转换回顶点坐标的 Cholesky 和共轭梯度求解器。

用于实验的其他函数包含在 scripts 文件夹中

  • blender_render.py:用于在 blender 内部渲染网格的实用脚本
  • constants.py:包含不同有用文件夹的路径(场景、重新网格化等)
  • geometry.py:实用几何函数(法线计算、边长等)
  • io_ply.py:PLY 网格文件加载
  • load_xml.py:XML 场景文件加载
  • main.py:包含主优化函数
  • preamble.py:用于导入图形冗余模块的实用脚本
  • render.py:包含渲染逻辑,使用 nvdiffrast

许可协议

本代码根据3条款BSD许可证提供,许可证文件可在LICENSE文件中找到。通过使用、分发或为此项目做出贡献,您同意此许可证的条款和条件。

引用

如果您将此代码用于学术研究,请使用以下BibTeX条目引用我们的方法

@article{Nicolet2021Large,
    author = "Nicolet, Baptiste and Jacobson, Alec and Jakob, Wenzel",
    title = "Large Steps in Inverse Rendering of Geometry",
    journal = "ACM Transactions on Graphics (Proceedings of SIGGRAPH Asia)",
    volume = "40",
    number = "6",
    year = "2021",
    month = dec,
    doi = "10.1145/3478513.3480501",
    url = "https://rgl.epfl.ch/publications/Nicolet2021Large"
}

致谢

作者们感谢Delio Vicini就本项目进行的早期讨论,Silvia Sellán分享她的重构实现,并为图表提供帮助,以及Hsueh-Ti Derek Liu在制作图表方面的建议。此外,感谢Miguel Crespo制作此README模板。

项目详情


下载文件

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

源代码分发

largesteps-0.2.2.tar.gz (15.1 kB 查看哈希值)

上传时间 源代码

支持