三维重建基础【知识点总结】

三维重建基础【知识点总结】

  • rasterization
  • volumetric ray-marching
  • SfM(Structure from Motion)
  • Spherical Harmonics
  • 多视图立体(Multiple View Stereo, MVS)
  • 动画制作专业术语

rasterization

Rasterization,中文通常译为“光栅化”,是计算机图形学中的一个关键技术,主要用于将三维几何数据转换为二维屏幕上可显示的像素数据的过程。这个过程是实时渲染管道中的关键一步,特别是在视频游戏、CAD设计、虚拟现实等应用中。

栅格化的基本概念
在三维场景中,复杂的模型由许多简单的几何形状(如三角形)组成。光栅化就是将这些三维空间中的几何形状投影到二维的图像平面上,并决定哪些像素应该被绘制以及它们的颜色应该是多少。这一过程可以分为几个子步骤:

  1. 投影(Projection):首先,三维模型通过投影变换转换到二维屏幕上,常见的有透视投影和正交投影。这一步骤确定了物体在最终图像上的大小和位置。
  2. 裁剪(Clipping):将投影后位于视锥(view frustum)以外的部分去除,只保留可视部分。
  3. 三角形设置与遍历(Triangle Setup and Traversal):将模型简化为一系列三角形,并为每个三角形计算其边界框,确定它覆盖哪些像素。
  4. 像素着色(Pixel Shading):对于每个确定应被绘制的像素,计算其颜色、纹理坐标、光照效果等属性。这通常涉及到纹理映射、阴影计算、法线贴图等高级渲染技术。
  5. 深度测试和混合(Depth Testing and Blending):为了避免隐藏面的错误显示,会进行深度测试,确保离观察者更近的物体覆盖远的物体。混合则处理透明或半透明对象的颜色叠加。
    实现算法
  • 投影法:从物方(对象空间)出发,将三角面直接投影到屏幕空间并计算像素颜色。这种方法效率较高,但可能在处理边缘和细节时精度稍差。
  • 光线法:从像方(屏幕空间)出发,模拟光线与物体表面的交点来确定像素颜色。虽然这种方法在理论上能提供更高的精度,但计算成本更高,因此较少用于实时渲染。

GPU的角色
现代图形处理器(GPU)专门优化了光栅化过程,能够高效地执行上述步骤,尤其是在处理大量几何数据和复杂场景时。GPU利用并行处理能力快速遍历像素和三角形,计算每个像素的颜色值,从而实现实时渲染效果。

总的来说,光栅化是连接三维几何世界与最终二维显示图像的桥梁,是图形渲染中不可或缺的一环。

volumetric ray-marching

Volumetric Ray-Marching 是一种用于体积渲染的技术,尤其适用于表现诸如烟雾、火焰、云朵等半透明、弥散的介质。与传统的光栅化或光线追踪技术不同,体积光追迹是专为处理具有体积的数据而设计的,它能够精确地模拟光线在不透明度连续变化的介质中的传播过程。
基本原理
在Volumetric Ray-Marching中,从观察者的视角出发,向场景中的每一个像素发出一条光线。与传统光线追踪每次直接寻找最近的交点不同,体积光追迹是逐步推进的(marching),即光线不是直接射到物体表面停止,而是在进入体积区域后,按照固定的步长或者根据密度场调整步长逐步前进,同时累积沿途中与介质相互作用产生的颜色和透明度信息。
关键特点

  1. 逐步推进(Step-by-step Advancement):光线不是直接寻找到交点,而是按照预定的步长或根据介质密度动态调整步长前进,直到超出体积范围或达到预设的终止条件。
  2. 累积贡献(Accumulation of Effects):每一步,根据当前点的介质密度和光源信息,计算光线的散射、吸收或发射等效果,并累加到最终的颜色上。
  3. 适合体积渲染:特别适合于没有明确表面的、连续分布的介质,如气体、液体中的光影效果模拟。
  4. Signed Distance Functions (SDFs):常与Ray-Marching配合使用,SDF定义了场景中每个点距离最近物体表面的距离,正负号表示内外,这有助于精确控制光线在体积中的推进。
  5. 灵活性与艺术控制:艺术家和开发者可以灵活控制体积内部的外观,通过调整密度函数、光照模型等,创造丰富的视觉效果。

应用场景
● 电影特效与动画:创建逼真的爆炸、烟雾、水流等自然现象。
● 视频游戏:在游戏中实时渲染云、雾、火等环境效果。
● 医学影像:用于可视化人体内部结构,如CT扫描的三维重建。
● 科学研究与可视化:展示流体动力学、气象模型等科学数据。
技术挑战
● 性能优化:体积渲染计算密集,特别是在高分辨率下,需要高效的算法和硬件加速。
● 内存使用:体积数据通常占用大量内存,如何有效管理内存是一个挑战。
● 真实感模拟:模拟真实的物理交互,如散射、吸收、发射,对算法精度要求高。
Volumetric Ray-Marching作为一种强大的渲染技术,随着硬件能力的提升和算法的不断优化,其在多个领域的应用前景越来越广阔。

SfM(Structure from Motion)

3D的SfM(Structure from Motion)是一种计算机视觉技术,用于从一系列二维图像中恢复并重建三维场景的结构和相机的运动轨迹。这项技术是基于多视图几何原理,通过分析不同视角下同一场景的图像来估计场景中点的三维坐标以及拍摄这些图像时相机的位置和姿态。以下是SfM技术的关键步骤和组成部分:

  1. 特征提取与匹配:首先,从各个图像中提取特征点,如角点、边缘等,并在不同图像间进行特征匹配。这些匹配点是后续三维重建的基础。
  2. 相机姿态估计:利用特征匹配的结果,通过几何算法(如基础矩阵、本质矩阵)计算出相机之间的相对姿态(旋转和平移)。这一过程通常涉及RANSAC(随机抽样一致)算法来去除错误匹配。
  3. 三维点云重建:通过三角法或其他算法,结合已知的相机姿态和匹配点对,计算场景中特征点的三维坐标,形成稀疏或稠密的点云模型。
  4. 捆绑调整(Bundle Adjustment):这是一个优化过程,旨在同时优化所有相机的姿态参数和场景点的三维坐标,使得重投影误差最小化。这个步骤对于提高整个三维重建的准确性和稳定性至关重要。
  5. 稠密化与表面重建:在得到稀疏点云后,可以通过各种方法进一步稠密化点云,并构建表面模型,如使用多视图立体匹配技术或基于机器学习的方法填充空隙,生成精细的三维网格或体素模型。

SfM技术的优势在于不需要专门的设备,仅需一组普通的二维图像即可进行三维重建,广泛应用于考古学、地理信息系统、电影特效、虚拟现实、无人机测绘、机器人导航等领域。然而,它也面临一些挑战,如在低纹理区域的特征匹配困难、大尺度重建的精度问题以及对大量计算资源的需求等。

Spherical Harmonics

Spherical Harmonics,即球谐函数,是一组定义在三维空间中单位球面上的复杂函数,常用于表示周期性或具有某种对称性的函数。它们构成了在球面上的正交完备基,类似于在一维空间中的正弦和余弦函数,或在二维平面上的复指数函数(Fourier级数)。
球谐函数的基本性质和应用包括:

  1. 数学定义:球谐函数由两个参数索引,通常是整数l(阶数)和m(从-l到l的整数,称为序数),记作Y_l^m(θ, φ),其中θ是极角(天顶角),φ是方位角(方位角)。它们是Legendre多项式的径向函数与角度函数的乘积,并满足球面上的拉普拉斯方程。
  2. 正交性与完备性:不同阶数和序数的球谐函数在单位球面上是正交的,并且作为函数空间的一组基,可以用来展开任何在球面上的平方可积函数。
  3. 物理与工程应用:
    ○ 物理学:在量子力学中,球谐函数用于描述原子轨道的形状,特别是在解决薛定谔方程时。
    ○ 图形学:在计算机图形学中,球谐函数用于高效地表示和处理全局光照,特别是环境光照的预计算和动态物体的光照计算(球谐光照)。
    ○ 信号处理与数据分析:用于处理具有球对称性质的数据,例如地球物理数据、医学成像中的脑部扫描等。
  4. 可视化:球谐函数的图形通常展示为具有特定对称性的模式,随着阶数增加,这些模式变得更加复杂,展现出从简单的偶极子、四极子到更高阶的多极子结构。
  5. 数学工具:在数学上,球谐函数是研究旋转对称性问题的重要工具,也是傅里叶分析在球面上的推广。

由于其独特的性质和广泛的应用范围,球谐函数在多个学科领域内都是一个重要的数学工具。

多视图立体(Multiple View Stereo, MVS)

3D的多视图立体(Multiple View Stereo, MVS)是一种计算机视觉技术,它可以从多个不同视角拍摄的2D图像中重建出场景的三维几何结构。MVS是立体匹配概念的扩展,它不仅限于一对图像,而是利用两个以上的图像来估计场景的深度和三维形状。以下是MVS技术的一些关键方面:

  1. 基本原理:MVS技术依赖于立体匹配的原则,即同一场景点在不同视角下的对应关系。通过对多幅图像中的对应特征点进行匹配,可以计算出这些点的空间位置。这涉及到解决视差问题,即将不同视图中同一物理点的投影差异转换为深度信息。
  2. 三维重建目标:MVS的主要目标是从一组已知视点拍摄的照片中,估计出最有可能解释这些照片的三维形状。这一过程通常假定材料特性、相机视点和照明条件是已知的,尽管实际操作中这些因素往往是未知或需要估计的。
  3. 技术流程:
    ○ 特征提取与匹配:首先在各个视图间找到对应的特征点。
    ○ 相机校准:确定各相机的内在参数(如焦距)和外在参数(如位置和朝向)。
    ○ 三维成本体构建:创建一个三维体积,其中每个体素代表场景中某点的可能性或成本,依据视图间对应特征的匹配质量和几何一致性。
    ○ 深度估计与优化:通过分析成本体,估计场景点的深度,并通过优化算法(如 Bundle Adjustment)精化结果,减少误差。
    ○ 稠密化与表面重建:将深度图转换为点云,进一步处理得到表面模型,如网格或体素模型。
  4. 深度学习方法:近年来,深度学习技术被引入MVS,如MVSNet,它使用深度神经网络直接从多视图图像中估计深度图,提高了精度和效率。这类方法通常包含特征提取、成本体构建、深度图预测和后处理等多个阶段。
  5. 应用: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/37721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雅思词汇及发音积累 2024.7.1

旅游场景 1.credit card 信用卡 2.driving license/licence 驾照 3.expire /ɪkˈspaɪə(r)/ 驾照/护照等过期 4.platform 站台 5.Currency 货币 6.Pound 英镑 7.Deserts /dɪˈzɜːts/ 沙漠 8. hilly areas 丘陵地带 9.wetlands 沼泽地 10.bushlands 灌木丛 11.tropi…

Dns被莫名篡改的问题定位(笔记)

引言:最近发现用户的多台机器上出现了Dns被莫名修改的问题,从系统事件上看并未能正常确定到是那个具体软件所为,现在的需求就是确定和定位哪个软件具体所为。 解决思路: 首先到IPv4设置页面对Dns进行设置:通过ProcExp…

缺失d3dx9_43.dll是怎么回事?教你几种靠谱的解决方法

在日常生活和工作中,电脑已经成为我们不可或缺的工具。然而,在使用电脑的过程中,我们常常会遇到一些问题,其中之一就是软件运行时提示d3dx9_43.dll丢失。这个问题会导致软件游戏无法启动运行,但只要我们了解其原因和解…

LinkedHashMap、TreeMap

LinkedHashMap: 有序、不重复、无索引,底层是双链表 TreeMap:底层基于红黑树,可以对键进行排序 默认排序:integer和string都是从小到大排序 例题:

git合并分支的疑问

今天遇到一个奇怪的问题: 1、后端从master拉了三个分支。分别为dev、test、和stage。 2、研发1从dev拉了分支feature1,然后commit、commit、commit……。最后request merge到dev、test和stage。成功了。 3、研发2从dev拉了分支feature2,注意,feature2…

Dataweave2 语法教程

DataWeave 是 MuleSoft 的数据语言,专门用于数据转换和映射。在 MuleSoft 的 Anypoint Platform 中,它是数据集成的一部分。下面是一个 DataWeave 语法教程,涵盖基本的语法和用法。 基本语法 DataWeave 脚本分为三个部分:%dw 声…

SpringBoot整合WebClient进行Http远程调用

使用WebClient进行Http远程调用 文章目录 使用WebClient进行Http远程调用1.WebClient对象创建2.WebClient对象抽取config配置3.Get请求url参数设置4.获取ResponseEntity对象5.Post请求测试示例代码 WebClient 一旦创建,就是不可修改的,如果需要设置默认值…

DP:子数组问题

文章目录 引言子数组问题介绍动态规划的基本概念具体问题的解决方法动态规划解法:关于子数组问题的几个题1.最大子数组和2.环形子数组的最大和3.乘积最大子数组4.乘积为正数的最长子数组长度5.等差数列划分 总结 引言 介绍动态规划(DP)在解决…

音视频开发31 FFmpeg 编码- avcodec_find_encoder和avcodec_find_encoder_by_name

avcodec_find_encoder /** * Find a registered encoder with a matching codec ID. * * param id AVCodecID of the requested encoder * return An encoder if one was found, NULL otherwise. */ AVCodec *avcodec_find_encoder(enum AVCodecID id); 那么这个 AVCodec…

14分Top刊NC代码开源|NSCLC单细胞+空转肿瘤微环境分析

说在前面 说起肺癌真的过去回忆历历在目,小编毕业后职业生涯的第一个项目——非小细胞肺癌预后有效靶点筛选。当时肝的是转录组预后建模筛选。 做研发其实要求是远远高于发文章的,文章投不出去就降分,加工作量,做药要是烂尾或者…

2024年7月1日 (周一) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键,实现一键唤起、一键隐藏的 Windows 工具,并且支持窗口动态绑定快捷键(无需设置自动实现)。 喜马拉雅下载工具: 字面意思 《星刃》早期概念图分享 末世破败环境推主Genki分享了《星…

Spire.PDF for .NET【文档操作】演示:在 PDF 中创建目录 (TOC)

目录在增强文档的可读性和可导航性方面起着至关重要的作用。它为读者提供了文档结构的清晰概述,使他们能够快速找到并访问他们感兴趣的特定部分或信息。这对于较长的文档(例如报告、书籍或学术论文)尤其有价值,因为读者可能需要多…

部署calico网络插件

部署calico网络插件 之前的k8s环境中主要使用了flannel作为网络插件,这次改用calico。calico支持多种安装方式,以下是具体的操作步骤。 1. 准备工作 环境信息 # 系统信息 rootmaster1:~# cat /etc/issue Ubuntu 24.04 LTS \n \lrootmaster1:~# uname…

MyBatisPlus 常用的注解 表映射 主键映射 字段映射

介绍 官网:https://baomidou.com/reference/annotation/ 指定映射表 实体类使用驼峰命名,表名应为xx_xxx等格式这样才可以映射,但是实际开发过程中可能不一致就可以使用该方法处理。 Data TableName("employee_235") //映射的表…

求质数题目

//需求:键盘录入一个正整数x,判断该整数是否为一个质数。 //质数: //如果一个整数只能被1和本身整除,那么这个数就是质数。否则这个数叫做合数 package Base_se.Base_701;import java.util.Scanner;/*** author gyf* ClassName test* Date 2024/7/1 19:…

Linux启动elasticsearch,提示权限不够

Linux启动elasticsearch,提示权限不够,如下图所示: 解决办法: 设置文件所有者,即使用户由权限访问文件 sudo chown -R 用户名[:新组] ./elasticsearch-8.10.4 //切换到elasticsearch-8.10.4目录同级 chown详细格式…

银行家算法-操作系统中避免死锁的最著名算法

背景 有很多文章都会介绍银行家算法。在百度和CSDN上搜一搜能搜出很多来。很多同学会觉得这个算法很深奥,有些文章写的又很复杂,其实真的很简单。这里简单记录一下基本原理,然后大家再配合其他文章看,就能加深理解。 算法原理 …

LLaVA1.5训练数据和时间分析

LLaVA的PT+SFT训练_llava sft-CSDN博客文章浏览阅读379次。这个阶段,使用8个A100(80G)训练LLaVA-v1.5-13B大约需要20h。全量微调,非lora跑不起来啊,以前一直用swift,llama-factory这种框架式的代码库,但用原作者开源的代码也是有很多好处的。在这个阶段,使用 8 个 A100(…

Oracle中 ROW_NUMBER()的语法及在对应不同需求下应如何使用

Oracle数据库中的ROW_NUMBER()函数是一个窗口函数,它为查询结果集中的每一行分配一个唯一的序号。这个函数在数据分析、分页查询、数据去重和排名问题等方面非常有用。ROW_NUMBER()函数的语法如下: ROW_NUMBER() OVER ( [ PARTITION BY column ] ORDER …

3.用户程序与驱动交互

驱动程序请使用第二章https://blog.csdn.net/chenhequanlalala/article/details/140034424 用户app与驱动交互最常见的做法是insmod驱动后,生成一个设备节点,app通过open,read等系统调用去操作这个设备节点,这里先用mknode命令调…