3D 相关知识点汇总
Tools 工具
trimesh2
- https://gfx.cs.princeton.edu/proj/trimesh2/
- https://github.com/Forceflow/trimesh2%EF%BC%9A%E8%BF%99%E6%98%AF%E5%8F%A6%E4%B8%80%E4%B8%AA%E4%BD%9C%E8%80%85%E5%9F%BA%E4%BA%8E%E4%B8%8A%E9%9D%A2%E7%9A%84%E5%8E%9F%E5%A7%8B%E7%9A%84 trimesh2 做的一些封装,增加了一些简单操作和功能。
trimesh2 is a C++ library and set of utilities for input, output, and basic manipulation of 3D triangle meshes. The goals of the code are ease of use and efficiency, possibly at the expense of some generality.
trimesh2 是一个 Princeton 内部使用的一个简洁的 3D mesh 操作工具。
笔者使用过后感觉它的优点有:
- 它包含了常见模型格式(例如 ply, obj,off 等)的 I/O、渲染(view)、去噪(filter)、平滑、对齐(align)、合并(combine)等多种常见操作。另外,它已经包含了和这些功能相关的可执行程序供直接使用,非常方便,例如 mesh_filter 支持非常多常见的基础操作。
- 最大优点:迷你简洁,消耗资源非常小,使用方便。例如可以用它来做 mesh viewer 等,以及很适合作为 3D model 操作的基础类。
- 跨平台并且编译很容易,支持了 windows, linux 和 Mac。
当然,缺点是它体量较小,功能不多,而且基本没有 GUI。
Build Trimesh2
Linux 中最简单,下载压缩包,解压,然后用 make -f Makedefs.Linux64
直接编译。也可以用下面 Mac 中的编译方法。
Windows 中,建议使用:https://github.com/Forceflow/trimesh2%E3%80%82%E8%BF%99%E4%B8%AA repo 给出了 Visual Studio 2017/2019 的编译接口,打开对应工程文件在 VS 中编译。
Mac 中,建议使用:https://github.com/jrock08/Trimesh2%E3%80%82%E8%BF%99%E4%B8%AA repo 提供了 CMake 编译接口,经测试没有问题。原始的 Trimesh2 中提供的 Makefile 似乎有问题,总是编译失败。不过这个 Repo 稍微有点老。
使用 mesh_filter 来 smooth a mesh
1 | ./mesh_filter input_mesh -smooth 3 output_mesh |
数值 3 代表 smooth 的程度,数值越大越平滑,根据经验来看,3 已经足够好了,比它小的话不够平滑,过大则过于平滑。具体可以参见 mesh_filter 的帮助(mesh_filter –help)
mesh_view 支持多个模型渲染
1 | mesh_view model1.ply model2.ply ... |
键盘操作:
-k
:
libigl
https://libigl.github.io/tutorial/
libigl is an open source C++ library for geometry processing research and development. Dropping the heavy data structures of tradition geometry libraries, libigl is a simple header-only library of encapsulated functions.
libigl 是一个功能强大的开源 C++ 3D Mesh 库,个人认为的优点是:
- 最大好处:它是 header-only 的,使用就很方便了;
- 它的底层是依赖于 Eigen,省去了数据转换;
- 包含了很多常见的 mesh 处理功能,甚至一些比较复杂的处理;
- 教程非常好,很详细,图文并茂,还提供了各种例子。
缺点:
- 不支持 2D Geometry 操作;
- 感觉支持的功能还是有点少,比如和 CGAL 肯定没法比,甚至一些常见的功能也没有;
meshroom
Meshroom is a free, open-source 3D Reconstruction Software based on the AliceVision framework. AliceVision is a Photogrammetric Computer Vision Framework which provides 3D Reconstruction and Camera Tracking algorithms. AliceVision comes up with strong software basis and state-of-the-art computer vision algorithms that can be tested, analyzed and reused. The project is a result of collaboration between academia and industry to provide cutting-edge algorithms with the robustness and the quality required for production usage.
Meshroom 是一个三维重建工具。它的核心流程是从二维图片中建立三维模型(即 structure from motion 这种)。它的优点是:
- 直接提供了图形化的 GUI 界面,已经非常类似一个商业软件了;
- 另一个类似商业软件的优点是,它重建出来的三维模型效果非常好看。它从不同角度的几张 2D 图片就可以重建出 texture 非常清晰的 dense mesh,这是由它的一个很长的重建流程实现的。而一般的 structure from motion 工具都是仅能实现一个稀疏点云或者一个粗糙的 mesh,即便有 texture 也不是很好。相比之下,Meshroom 生成的 texture 非常清楚。
- 上一个优点也介绍了,Meshroom 包含了一个很长的重建流程,按照顺序大概 Feature 提取、global optimization、depth map 预测、重建 dense mesh、mesh simplification、texture image optimization、texture mapping 等。这就使得它能够得到效果很好的 mesh。
个人认为的几个缺点:
- 多个流程需要借用 CUDA,并且很复杂,需要高配置的机器才行。
- 即便在高配置机器上跑,Meshroom 的流程耗时也很长,例如通常重建十几张图片都需要近一个小时。
- 使用不是很方便,因为它的官方教程很烂。教程只介绍了图形界面的软件的操作,并未介绍命令行的用法。这个比较恶心,因为很多服务器只能在命令行跑。
MagicaVoxel
https://ephtracy.github.io/index.html?page=mv_main#
一个非常强大的编辑渲染 voxel 模型的开源工具,渲染效果及其好。不过比较像是一个商业软件,使用方法复杂。
Open3D
Point cloud denoising
Get image data (like pixels) inside open3d.open3d.geometry.Image
https://github.com/intel-isl/Open3D/issues/957
Open3D 安装
注意:经本人测试,目前 0.11.0 版和更老的版本没有问题,但是更新的 0.11.1 和 0.11.2 都出现了 visualization window 在 Mac OSX 中打不开的问题。因此,建议安装 0.11.0 版。安装方法:
1 | pip install open3d==0.11.0 |
不知为什么,使用 conda install 时显示找不到 0.11.0 版本,因此建议使用上面的 pip install。
不过注意,0.11.0 版本中的 Open3D examples 代码和 github repo 上的最新代码有很多不同。因此,在Clone Open3D Repo 后,建议 checkout 0.11.0 版本对应的 commit:
1 | git checkout d5167ae |
OpenGL
http://www.songho.ca/opengl/gl_camera.html
Fyuses (iOS App)
Fyuses are interactive 3D images.
3D Face and Body 相关工作
3D Morphable Face Models - Past, Present and Future
一个很好的 survey paper: https://arxiv.org/pdf/1909.01815.pdf
SMPL
大名鼎鼎,不过多解释了。Siggraph Asia 2015的工作,提供了一个(几乎算是one of the earliest?)3D skinning human body dataset,包含模型以及 bone poses 等 skinning mesh 的所有信息。
优点:
- 提供了 SMPL 数据(废话);
- 提供了简单的使用 SMPL 的代码以及相关操作介绍。
- 论文中的有关 LBS、相关的 training 的介绍细节写的挺好的,值得一读。
GANerated Hands
https://handtracker.mpi-inf.mpg.de/projects/GANeratedHands/
CVPR 2018 的一个有名的工作 GANerated Hands,全名是 GANerated Hands for Real-Time 3D Hand Tracking from Monocular RGB,做单目相机的手部动作跟踪和模拟。优点是跟踪效果非常鲁棒,连很多复杂动作都可以做的非常好。
其它优点:
- 内部使用了“神经网络预测关键点 + 3D-to-2D 关键点的优化”相结合的方式,挺经典的一个优化策略,值得一读。
- 还提供了可执行程序代码,不过没有源码。
FaceScape
CVPR 2020 的工作,提供了一个高精度的 3D Face dataset。
数据目前已经放出来了,仅供研究使用,需要申请。
AvatarMe
https://github.com/lattas/AvatarMe
CVPR 2020 的工作,它可以从一张普通的人脸图片中重建出一个高精度的 texture 3D face mesh(当然它提前采集了很多的高精度人脸数据)。
结果模型未定,原始数据没有,源代码暂无(06/27/2020)。
PIFu
https://shunsukesaito.github.io/PIFu/
大名鼎鼎
3D Reconstruction 相关工作
3D Semantic Parsing of Large-Scale Indoor Spaces
http://buildingparser.stanford.edu/method.html#Introduction
这是一个发表在 CVPR 2016 的做 3D indoor point cloud parsing 的工作,可以将室内的点云分割成不同的分层的类别,例如不同房间、甚至一个房间内的不同部位(天花板、墙、地板、其余家具等)。
其它优点:
- 它提供了一个 point cloud parsing 数据库,和一个 2D-3D 语义数据库。
Implicit Neural Representations – Yaron Lipman
这是 CVPR 2020 的一个 Workshop – Deep Learning Foundations of Geometric Shape Modeling and Reconstruction – 中的其中一个部分,包含了 4-5 篇过去的重要工作的回顾。
主要讲述了隐式表示方法(Implicit Representation)在模型表达和三维重建中的应用。隐式表达结合神经网络后的优点有:
- flexible
- watertight
- 细节表现更好
等。
Structured Representations for 3D Computer Vision
CVPR 2020 的一个 Workshop – 2nd CVPR Workshop on 3D Scene Understanding for Vision, Graphics, and Robotics – 中的一个部分,回顾了 2 篇重要工作。
1. NASA: Neural Articulated Shape Approximation
- https://www.jiqizhixin.com/articles/2019-12-19-3%EF%BC%9A%E4%B8%AD%E6%96%87%E4%BB%8B%E7%BB%8D
- https://youtu.be/Im0OWyas9ew?t=964%EF%BC%9A%E8%A7%86%E9%A2%91%E9%93%BE%E6%8E%A5
- https://static.aminer.cn/misc/pdf/1912.03207.pdf%EF%BC%9A%E8%AE%BA%E6%96%87%E9%93%BE%E6%8E%A5
目前依然在 arXiv 上的文章,不过在 CVPR 2020 的 workshop 中有介绍,作者都来自 Google Research。这篇文章提出了利用神经网络对有关节、可变形的三维模型进行估计的方法,与传统方法相比,NASA具有复杂度低、模型水密性好、分辨率高、模型估计效果好等优势。
作者提出了一种新的方法用于训练解码器来估计有关节的三维模型,解码器生成的三维模型通过指示函数(indicator function)来表示,这一指示函数以三维模型的姿态作为参数,输入为三维空间中的点x,当该点位于三维模型内时,输出为1;位于三维模型外时,输出为0。与其他方法不同的是,NASA专注于通过姿态参数来估计三维模型的指示函数,这些姿态参数描述了三维模型是如何变形的。
这篇论文的贡献在于:
- 提出了一种通过神经网络估计有关节可变形的三维模型的方法;
- 通过明确地在网络中表示模型的变形结构,利用更少的模型参数实现了与之前方法相比相似的性能和更好的泛化能力;
- 指示函数这一表示方式支持交集和碰撞查询,无需再将其转换为其他的三维模型表示方式;
- 模型结果与之前的方法相比能够更好地学习三维人体模型的动作。
2. CvxNet: Learnable Convex Decomposition
这篇是 CVPR 2020 的工作。做的是将一个输入的模型图片转换成 3D(当然模型通常比较简单)。该工作认为任意一个 solid 物体都可以被分成若干个 convex 子部分,称为 convexes。该工作提出了一个神经网络 CvxNet 将输入的图片分割成不同的部分,并最终生成 3D mesh。
这篇工作也是在模型的隐式表示上做文章。
Single-view Reconstruction
单图或者几张图重建三维模型
pixelNeRF
项目网站:https://alexyu.net/pixelnerf/
DISN
源码:https://github.com/Xharlie/DISN
这两篇文章也引用了不少最前沿的论文
教程资料 Tutorials and Other Materials
GAMES101-现代计算机图形学入门-闫令琪
- 大牛的课程链接:https://sites.cs.ucsb.edu/~lingqi/
- B 站的 Introduction to Computer Graphics 的教学视频地址:https://www.bilibili.com/video/BV1X7411F744?p=13
闫令琪是 CG 这块的年轻大牛,目前是 UCSB 的助理教授,主要方向就是和 rendering 相关的几乎所有的子方向。他的论文和课程材料都非常给力。个人感觉他的课程的优点是:清晰明了,包含内容全面多样,并且还结合了当前最新的一些技术做介绍。非常值得一学。
Karman Filter
- 知乎上的中文介绍:https://zhuanlan.zhihu.com/p/39912633
- 上面的中文来源:https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/
Karman Filter 卡尔曼滤波是用途很广的一个滤波器。
AABB Tree
- One Good Tutorial: https://box2d.org/files/ErinCatto_DynamicBVH_GDC2019.pdf
- 3D Fast Intersection and Distance Computation with AABB Tree in CGAL: https://doc.cgal.org/latest/AABB_tree/index.html
AABB Tree 数据结构是用来进行三维物体间的快速求交/计算距离的,它通常用语快速碰撞检测,在几何处理中非常基础且应用广泛。
Estimating 3-D rigid body transformations: a comparison of four major algorithms
http://graphics.stanford.edu/~smr/ICP/comparison/eggert_comparison_mva97.pdf