三维重建基础【知识点总结】
- rasterization
- volumetric ray-marching
- SfM(Structure from Motion)
- Spherical Harmonics
- 多视图立体(Multiple View Stereo, MVS)
- 动画制作专业术语
rasterization
Rasterization,中文通常译为“光栅化”,是计算机图形学中的一个关键技术,主要用于将三维几何数据转换为二维屏幕上可显示的像素数据的过程。这个过程是实时渲染管道中的关键一步,特别是在视频游戏、CAD设计、虚拟现实等应用中。
栅格化的基本概念
在三维场景中,复杂的模型由许多简单的几何形状(如三角形)组成。光栅化就是将这些三维空间中的几何形状投影到二维的图像平面上,并决定哪些像素应该被绘制以及它们的颜色应该是多少。这一过程可以分为几个子步骤:
- 投影(Projection):首先,三维模型通过投影变换转换到二维屏幕上,常见的有透视投影和正交投影。这一步骤确定了物体在最终图像上的大小和位置。
- 裁剪(Clipping):将投影后位于视锥(view frustum)以外的部分去除,只保留可视部分。
- 三角形设置与遍历(Triangle Setup and Traversal):将模型简化为一系列三角形,并为每个三角形计算其边界框,确定它覆盖哪些像素。
- 像素着色(Pixel Shading):对于每个确定应被绘制的像素,计算其颜色、纹理坐标、光照效果等属性。这通常涉及到纹理映射、阴影计算、法线贴图等高级渲染技术。
- 深度测试和混合(Depth Testing and Blending):为了避免隐藏面的错误显示,会进行深度测试,确保离观察者更近的物体覆盖远的物体。混合则处理透明或半透明对象的颜色叠加。
实现算法
- 投影法:从物方(对象空间)出发,将三角面直接投影到屏幕空间并计算像素颜色。这种方法效率较高,但可能在处理边缘和细节时精度稍差。
- 光线法:从像方(屏幕空间)出发,模拟光线与物体表面的交点来确定像素颜色。虽然这种方法在理论上能提供更高的精度,但计算成本更高,因此较少用于实时渲染。
GPU的角色
现代图形处理器(GPU)专门优化了光栅化过程,能够高效地执行上述步骤,尤其是在处理大量几何数据和复杂场景时。GPU利用并行处理能力快速遍历像素和三角形,计算每个像素的颜色值,从而实现实时渲染效果。
总的来说,光栅化是连接三维几何世界与最终二维显示图像的桥梁,是图形渲染中不可或缺的一环。
volumetric ray-marching
Volumetric Ray-Marching 是一种用于体积渲染的技术,尤其适用于表现诸如烟雾、火焰、云朵等半透明、弥散的介质。与传统的光栅化或光线追踪技术不同,体积光追迹是专为处理具有体积的数据而设计的,它能够精确地模拟光线在不透明度连续变化的介质中的传播过程。
基本原理
在Volumetric Ray-Marching中,从观察者的视角出发,向场景中的每一个像素发出一条光线。与传统光线追踪每次直接寻找最近的交点不同,体积光追迹是逐步推进的(marching),即光线不是直接射到物体表面停止,而是在进入体积区域后,按照固定的步长或者根据密度场调整步长逐步前进,同时累积沿途中与介质相互作用产生的颜色和透明度信息。
关键特点
- 逐步推进(Step-by-step Advancement):光线不是直接寻找到交点,而是按照预定的步长或根据介质密度动态调整步长前进,直到超出体积范围或达到预设的终止条件。
- 累积贡献(Accumulation of Effects):每一步,根据当前点的介质密度和光源信息,计算光线的散射、吸收或发射等效果,并累加到最终的颜色上。
- 适合体积渲染:特别适合于没有明确表面的、连续分布的介质,如气体、液体中的光影效果模拟。
- Signed Distance Functions (SDFs):常与Ray-Marching配合使用,SDF定义了场景中每个点距离最近物体表面的距离,正负号表示内外,这有助于精确控制光线在体积中的推进。
- 灵活性与艺术控制:艺术家和开发者可以灵活控制体积内部的外观,通过调整密度函数、光照模型等,创造丰富的视觉效果。
应用场景
● 电影特效与动画:创建逼真的爆炸、烟雾、水流等自然现象。
● 视频游戏:在游戏中实时渲染云、雾、火等环境效果。
● 医学影像:用于可视化人体内部结构,如CT扫描的三维重建。
● 科学研究与可视化:展示流体动力学、气象模型等科学数据。
技术挑战
● 性能优化:体积渲染计算密集,特别是在高分辨率下,需要高效的算法和硬件加速。
● 内存使用:体积数据通常占用大量内存,如何有效管理内存是一个挑战。
● 真实感模拟:模拟真实的物理交互,如散射、吸收、发射,对算法精度要求高。
Volumetric Ray-Marching作为一种强大的渲染技术,随着硬件能力的提升和算法的不断优化,其在多个领域的应用前景越来越广阔。
SfM(Structure from Motion)
3D的SfM(Structure from Motion)是一种计算机视觉技术,用于从一系列二维图像中恢复并重建三维场景的结构和相机的运动轨迹。这项技术是基于多视图几何原理,通过分析不同视角下同一场景的图像来估计场景中点的三维坐标以及拍摄这些图像时相机的位置和姿态。以下是SfM技术的关键步骤和组成部分:
- 特征提取与匹配:首先,从各个图像中提取特征点,如角点、边缘等,并在不同图像间进行特征匹配。这些匹配点是后续三维重建的基础。
- 相机姿态估计:利用特征匹配的结果,通过几何算法(如基础矩阵、本质矩阵)计算出相机之间的相对姿态(旋转和平移)。这一过程通常涉及RANSAC(随机抽样一致)算法来去除错误匹配。
- 三维点云重建:通过三角法或其他算法,结合已知的相机姿态和匹配点对,计算场景中特征点的三维坐标,形成稀疏或稠密的点云模型。
- 捆绑调整(Bundle Adjustment):这是一个优化过程,旨在同时优化所有相机的姿态参数和场景点的三维坐标,使得重投影误差最小化。这个步骤对于提高整个三维重建的准确性和稳定性至关重要。
- 稠密化与表面重建:在得到稀疏点云后,可以通过各种方法进一步稠密化点云,并构建表面模型,如使用多视图立体匹配技术或基于机器学习的方法填充空隙,生成精细的三维网格或体素模型。
SfM技术的优势在于不需要专门的设备,仅需一组普通的二维图像即可进行三维重建,广泛应用于考古学、地理信息系统、电影特效、虚拟现实、无人机测绘、机器人导航等领域。然而,它也面临一些挑战,如在低纹理区域的特征匹配困难、大尺度重建的精度问题以及对大量计算资源的需求等。
Spherical Harmonics
Spherical Harmonics,即球谐函数,是一组定义在三维空间中单位球面上的复杂函数,常用于表示周期性或具有某种对称性的函数。它们构成了在球面上的正交完备基,类似于在一维空间中的正弦和余弦函数,或在二维平面上的复指数函数(Fourier级数)。
球谐函数的基本性质和应用包括:
- 数学定义:球谐函数由两个参数索引,通常是整数l(阶数)和m(从-l到l的整数,称为序数),记作Y_l^m(θ, φ),其中θ是极角(天顶角),φ是方位角(方位角)。它们是Legendre多项式的径向函数与角度函数的乘积,并满足球面上的拉普拉斯方程。
- 正交性与完备性:不同阶数和序数的球谐函数在单位球面上是正交的,并且作为函数空间的一组基,可以用来展开任何在球面上的平方可积函数。
- 物理与工程应用:
○ 物理学:在量子力学中,球谐函数用于描述原子轨道的形状,特别是在解决薛定谔方程时。
○ 图形学:在计算机图形学中,球谐函数用于高效地表示和处理全局光照,特别是环境光照的预计算和动态物体的光照计算(球谐光照)。
○ 信号处理与数据分析:用于处理具有球对称性质的数据,例如地球物理数据、医学成像中的脑部扫描等。 - 可视化:球谐函数的图形通常展示为具有特定对称性的模式,随着阶数增加,这些模式变得更加复杂,展现出从简单的偶极子、四极子到更高阶的多极子结构。
- 数学工具:在数学上,球谐函数是研究旋转对称性问题的重要工具,也是傅里叶分析在球面上的推广。
由于其独特的性质和广泛的应用范围,球谐函数在多个学科领域内都是一个重要的数学工具。
多视图立体(Multiple View Stereo, MVS)
3D的多视图立体(Multiple View Stereo, MVS)是一种计算机视觉技术,它可以从多个不同视角拍摄的2D图像中重建出场景的三维几何结构。MVS是立体匹配概念的扩展,它不仅限于一对图像,而是利用两个以上的图像来估计场景的深度和三维形状。以下是MVS技术的一些关键方面:
- 基本原理:MVS技术依赖于立体匹配的原则,即同一场景点在不同视角下的对应关系。通过对多幅图像中的对应特征点进行匹配,可以计算出这些点的空间位置。这涉及到解决视差问题,即将不同视图中同一物理点的投影差异转换为深度信息。
- 三维重建目标:MVS的主要目标是从一组已知视点拍摄的照片中,估计出最有可能解释这些照片的三维形状。这一过程通常假定材料特性、相机视点和照明条件是已知的,尽管实际操作中这些因素往往是未知或需要估计的。
- 技术流程:
○ 特征提取与匹配:首先在各个视图间找到对应的特征点。
○ 相机校准:确定各相机的内在参数(如焦距)和外在参数(如位置和朝向)。
○ 三维成本体构建:创建一个三维体积,其中每个体素代表场景中某点的可能性或成本,依据视图间对应特征的匹配质量和几何一致性。
○ 深度估计与优化:通过分析成本体,估计场景点的深度,并通过优化算法(如 Bundle Adjustment)精化结果,减少误差。
○ 稠密化与表面重建:将深度图转换为点云,进一步处理得到表面模型,如网格或体素模型。 - 深度学习方法:近年来,深度学习技术被引入MVS,如MVSNet,它使用深度神经网络直接从多视图图像中估计深度图,提高了精度和效率。这类方法通常包含特征提取、成本体构建、深度图预测和后处理等多个阶段。
- 应用:MVS技术广泛应用于地图制作、三维建模、虚拟现实、增强现实、文化遗产保护、机器人导航、自动驾驶汽车等领域。
MVS面临的挑战包括处理无纹理区域、光照变化、遮挡问题以及大规模场景重建时的计算复杂度和内存需求。随着算法的进步和计算能力的提升,这些挑战正在逐步被克服。
动画制作专业术语
科普几个有关动画制作的关键词(可能不是很正确),对于一个动画人物模型,比如Unity模型,有:
- 顶点(vertex):动画模型可以看成多个小三角形(四边形)组成,每个小三角形就可以看成一个顶点。顶点越多,动画模型越精细。
- 骨骼点:人体的一些关节点,类似于人体姿态估计的关键点。每个骨骼点都由一个三元组作为参数去控制(可以查看欧拉角,四元数相关概念)
- 骨骼蒙皮(Rig):建立骨骼点和顶点的关联关系。每个骨骼点会关联许多顶点,并且每一个顶点权重不一样。通过这种关联关系,就可以通过控制骨骼点的旋转向量来控制整个人运动。
- 纹理贴图:动画人体模型的表面纹理,即衣服裤子这些。
- BlendShape:控制动画角色运动有两种,一种是上面说的利用Rig,还有一种是利用BlendShape。比如:生成一种笑脸和正常脸,那么通过BlendShape就可以自动生成二者过渡的动画。这种方式相比于利用Rig,可以不定义骨骼点,比较方便。
- 蒙皮:将模型从一个姿态转变为另一个姿态,使用的转换矩阵叫做蒙皮矩阵。(Linear Blend Skinning算法)
- 顶点权重(vertex weights):用于变形网格mesh
- uv map:将3D多边形网格展开到2D平面得到 UV图像
- texture map:将3D多边形网格表面的纹理展开到2D平面,得到纹理图像
- 拓扑(topology):重新拓扑是将高分辨率模型转换为可用于动画的较小模型的过程。两个mesh拓扑结构相同是指两个mesh上面任一个三角面片的三个顶点的ID是一样的(如某一个三角面片三个顶点是2,5,8;另一个mesh上也必有一个2,5,8组成的三角面片)
- linear blend skinning algorithm
每个关节的数据结构包含:关节名字、骨骼中其父节点的索引、关节的绑定姿势之逆变换(蒙皮网格顶点绑定至骨骼时,关节的位置、定向及缩放)
参考https://zhuanlan.zhihu.com/p/256358005