《Massively Parallel Rendering of Complex Closed-Form Implicit Surfaces》是由独立研究者MATTHEW J. KEETER发表在2020年SIGGRAPH上的一篇文章。主要提出了一种利用现代GPU的大规模并行性来直接渲染复杂封闭式隐式曲面的方法。
具有以下功能特点:
- 支持2D和3D渲染,并可以得到任意分辨率的画面;
- 不需要高于C0的连续性,支持更加灵活的建模操作;
- 支持构造实体几何(CSG)、形状的平滑融合等多种建模操作;
- 支持具有数以千计的基础数学表达式的大规模模型的渲染,并能保证可以交互。
这篇博文记录了论文代码部分部署过程中遇到问题及解决方法。
-
运行平台:曙光云计算平台(Linux) with Tesla V100 && CUDA 10.0.130
-
项目源码:https://github.com/mkeeter/mpr
-
编译支持:在正式编译mpr项目之前需要保证安装好mpr项目依赖的代码库或者编译工具,并保证其版本正确
- cmake ≥ 3.12.0
cmake安装方法见博文:https://blog.csdn.net/qq_38327353/article/details/107528837
Note: 编译cmake时出现了当前C++ Compiler不支持C++11的错误。一般来说gcc版本越高,能支持的c++版本越高,在此将gcc从平台初始的5.4升级到了7.5版本,但是仍报出“c++编译器不支持c++11的错误”。在安装高版本的gcc时,需要手动将系统默认的gcc和新安装的gcc-7进行软链接:
实际上,将相关文件的软链接全部设定完毕后,编译cmake仍提示相同的错误。在csdn技术博客上参考了一篇测试c++ 编译器是否支持c++11的文章,通过运行包含c++11特性程序的.cpp文件来验证当前环境是否支持c++11,具体测试后发现当前的gcc其实是支持c++11的,因此应该是当前平台上的系统在哪里出了问题(在其他系统并未出现过这种问题)。为此,我注释掉了CMakeList.txt文件中与c++11版本验证相关的代码,再次编译cmake,最终成功完成编译。# in /usr/local/bin directory sudo ln -sf g++-7 g++ sudo ln -sf gcc-7 gcc ... ... ...
- CUDA 10.0.130
当前平台上默认安装了10.0.130版本的CUDA,但是并没有将其添加到系统路径中,请参考如下博文将CUDA添加到系统的路径中(在使用博文中的第一种方法时便成功了):
https://blog.csdn.net/yinxian9019/article/details/106756280/
先前在Ubuntu上成功配置了CUDA 9(当前博文要求CUDA 10),配置过程参见博文:
https://blog.csdn.net/wshixinshouaaa/article/details/83272282
- cmake ≥ 3.12.0
-
编译mpr
# Install dependencies sudo apt install mesa-common-dev ninja-build# Install a recent version of eigen wget https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.gz tar -zxvf eigen-3.3.7.tar.gz cd eigen-3.3.7 mkdir build cd build cmake .. sudo make install# Install `mpr` cd git clone git@github.com:mkeeter/mpr cd mpr git submodule update --init --recursive mkdir build cd build cmake -GNinja -DBIG_SERVER=ON .. ninja
上述codes是编译mpr的所有过程。
-
编译过程中,在执行git clone命令时遇到了git权限的错误:
git clone git@github.com:mkeeter/mpr
git@github.com: Permission denied (publickey). Could not read from remote repository.
原因是客户端与服务器端没有生成ssh key,或者生成的ssh key不匹配,解决方法是重新生成一次ssh key,并重新配置一次服务器,具体方法参考博文:
https://www.jianshu.com/p/7d57ce4147d3 -
编译过程中,在执行cmake命令时遇到的错误及解决方法总结如下:
cmake -GNinja -DBIG_SERVER=on ..
-
错误01:
CMake Error at CMakeLists.txt: 3(project): No CMAKE_CUDA_COMPILER could be found.
出现这个错误的原因是cmake没有识别到CUDA的路径,所以在保证CUDA安装完毕后需要配置一下CUDA的环境变量,具体方法参见上边提到的博文。 -
错误02:
Could not find a package confguration file provided by “Qt5Core” with any of the following names:
Qt5CoreConfig.cmake
Qt5Core-Config.cmake
错误原因是没有缺少安装QT5,可以使用如下代码查看是否安装QT:
qmake -v
解决方法是安装QT5。曙光云平台上没有GUI,所以我们需要采用非GUI的安装方法,具体参见博文: https://blog.csdn.net/qq_39519014/article/details/105747835 -
错误03:
Could NOT find Boost(missing Boost_INCLUDE_DIR).a
Boost库是一个成熟且开源的C++库,是C++标准库的后备。
https://blog.csdn.net/simtwo/article/details/8083598
这篇博文提供了两种方法安装boost,这里采用了第一种方法,直接采用apt-get install命令安装boost:
# 搜索所有的boost库
apt-cache search boost
# 安装相应的库
sudo apt-get install libboost-all-dev -
错误04:
No package ‘guile-2.2’ found.
No package ‘eigen3’ found.
这里guile-2.2不安装实际对项目的成功编译没有影响。
eigen3必须安装,上面提供了eigen3的安装方法,亲测是可以使用的。
安装好eigen3之后即可解决这个问题。
-
-
-
运行mpr
在build目录下执行命令:../run_benchmarks.sh
运行结果中包含三列数据,分别是分辨率大小、帧时间(毫秒)、标准差。
渲染好的图像存储到了mpr/build/目录下的几个文件夹下,不同模型对应的文件夹分别为:prospero gears_2d architecture gears_3d bear
-
渲染结果
Part Ⅰ分辨率-时间-标准差
Part Ⅱ图像效果- architecture
- bear
- gears_2d
- gears_3d
- text benchmark
- architecture