《Massively Parallel Rendering of Complex Closed-Form Implicit Surfaces》是由独立研究者MATTHEW J. KEETER发表在2020年SIGGRAPH上的一篇文章。主要提出了一种利用现代GPU的大规模并行性来直接渲染复杂封闭式隐式曲面的方法。
具有以下功能特点:
- 支持2D和3D渲染,并可以得到任意分辨率的画面;
- 不需要高于C0的连续性,支持更加灵活的建模操作;
- 支持构造实体几何(CSG)、形状的平滑融合等多种建模操作;
- 支持具有数以千计的基础数学表达式的大规模模型的渲染,并能保证可以交互。
这篇博文记录了论文代码GUI部分部署过程中遇到问题及解决方法。
- 运行平台:HP-Laptop(Linux)with GEFORCE GTX 960m && CUDA 10.0.130
- 项目源码:https://github.com/mkeeter/mpr
- 编译选项:
- 如果是显存很大的高性能计算机,在cmake时可以附加-DBIG_SERVER=ON选项,并且需要将/mpr/CMakeLists.txt中第24行和26行注释掉,目的是为了在高性能平台上编译时也编译GUI部分;如果是显存一般的计算机,在cmake时不需要附加-DBIG_SERVER=ON选项,直接安装好所需的依赖后编译即可。如果附加了,会提示内存不足的错误,并退出。
- 编译流程:
- 安装Ubuntu系统
- 安装Nvidia驱动
- 安装CUDA 10.0并配置环境变量
- 安装Qt-5
- 安装cmake-3.18
- 此外还需要安装opengl及相关工具
- 编译mpr-gui项目
1. 安装Ubuntu系统,准备系统镜像和U盘制作工具(推荐rufus)
这里安装了win10+ubuntu双系统,在装了win和Linux双系统后,打算使用easybcd来为Linux设置启动选项,但是手误把原来的Windows启动选项给删除了,新建一个Windows启动选项后并不起作用,重启后就发现报了如下错误:
Windows failed to start. a recent hardware or software change might be the cause, etc.
使用U启动制作了PE U盘后,在cmd中输入了bcdboot F:\Windows,就好可以正常启动Windows了(我的系统盘的盘符在PE模式下是F)。
使用U启动制作了PE U盘后,在cmd中输入了bcdboot F:\Windows,就好可以正常启动Windows了(我的系统盘的盘符在PE模式下是F)。
Unable to install GRUB in /dev/sda.
Executing 'grub-install /dev/sda' failed.
This is a fatal error.
解决办法是直接进行自定义分区,分区前删掉以前创建的与ubuntu相关的分区。
装好系统后记得换成国内的源,不然使用apt-get安装资源时下载速度很慢。
2. 安装Nvidia驱动
尝试了直接安装CUDA 10.0,因为CUDA会带有对应版本的显卡驱动,但是报出了如下错误:
The driver installation has failed due to an unknown error.
所以选择了先装显卡驱动再装CUDA,安装Nvidia显卡驱动时需要禁用nouveau并进入非窗口模式,具体步骤参加这篇博文:
https://blog.csdn.net/u014682691/article/details/80605201
安装完毕后最好更新成推荐版本的驱动:
https://blog.csdn.net/m0_38007695/article/details/103456043
测试是否安装成功,输入:
nvidia-smi
若显示上述面板,即表示安装成功。
实际安装时,出现的错误及解决方法如下:
- 错误01
Error:Unable to find the development tool 'cc' in your path. Please make sure that you have the package 'gcc' installed.
解决方法:安装gcc
sudo apt-get install gcc
- 错误02
Error:Unable to find the development tool 'make' in your path. Please make sure that you have the package 'make' installed.
解决方法:安装make
sudo apt-get install make
3. 安装CUDA 10.0并配置环境变量
参考这边博文安装CUDA 10.0,并记得添加环境变量:
https://www.cnblogs.com/zmbreathing/p/CUDA.html
4. 安装Qt-5
没什么好说的,直接放教程:
https://blog.csdn.net/qq_39519014/article/details/105747835
5. 安装cmake
直接放教程,推荐采用第二种方法:
https://blog.csdn.net/qq_38327353/article/details/107528837
实际操作时遇到的错误及解决方法如下:
- 错误01
Failed to find "GL/gl.h" in "/usr/include/libdrm"
原因是未安装opengl,安装opengl即可:
sudo apt-get install mesa-common-dev
- 错误02
The imported target "Qt5::Gui" references the file "/usr/lib/x86_64-linux-gnu/libGL.so"
原因是LibGL.so的链接出了问题,解决方法如下:
首先locate libGL,发现libGL.so不存在,但是存在libGL.so.1,并且包含它的路径信息:
locate libGL
然后对libGL.so进行链接:
sodo ln /usr/lib/x86-64-linux-gun/libGL.so.1 /usr/lib/x86-64-linux-gun/libGL.so
即可解决这个错误。
6. 安装mpr-gui项目所需要的其它依赖库
-
boost库
# 使用apt-cache可以搜索相关的包,一般选择-dev的包
apt-cache search boost
sudo apt-get install libboost-all-dev
-
PNG库
sudo apt-get install libjpeg-dev
sudo apt-get install libpng-dev
sudo apt-get install libtiff-dev
-
OpenGL相关库
glfw:https://blog.csdn.net/qq_40008325/article/details/89298028
glew:
sudo apt-get install libglew-dev glew-utils
gl3w:
gl3w只包含.h头文件和.cpp文件,这里主要是imgui用到了,所以直接将编译好的.h头文件和.cpp文件放到imgui/GL/目录下即可,GL目录需要自己创建,编译好的文件如下:
https://github.com/ocornut/imgui/tree/master/examples/libs/gl3w/GL
7. 编译mpr-gui
# 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 .. # 如果是普通计算机则取消附加-DBIG_SERVER=ON选项
ninja
最后一步执行ninja指令时可能出现的错误及解决方法如下:
Linking CXX executable gui/demo FAILED: gui/demo
...
...
/usr/bin/ld: 找不到 -lglfw collect2:error:ld returned 1 exit status.
原因是缺少glfw库,解决方法如下:
sudo apt-get install apt-file
apt-file update
apt-file search libglfw.so
# 此时会出现许多与libglfw相关的包,找到-dev安装
sudo apt-get install libglfw3-dev
实际上,这其实是一类问题的集合:Ubuntu下遇到ld: cannot find -lXX之类的问题,提示找不到相关库文件,参见:
https://www.cnblogs.com/laowangxieboke/p/12657546.html
8. 执行mpr-gui程序
在/mpr/build目录下输入:
./gui/demo
9. mpr-gui运行效果
- Shapes面板显示了渲染模型的时间、后处理和着色的时间、加载贴图的时间;
- Settings面板中可以设置渲染分辨率(256256、512512、10241024、20482048)、渲染维度(2D、3D)、渲染模式(Heightmap、Normals、SSAO、Shaded);
- Text editor面板中可以输入特定规则的文本信息,从而得到特定的模型;
- 背景是渲染后的窗口,可以使用鼠标左键拖动移动物体的位置、使用鼠标右键拖动旋转物体的方向、使用鼠标滚轮放大或缩小视图。
下面是具体的渲染效果:
- END -