3D高斯溅射:面向三维场景的实时渲染技术

2024-02-12 17:04

本文主要是介绍3D高斯溅射:面向三维场景的实时渲染技术,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 前言

高斯溅射技术【1】一经推出,立刻引起学术界和工业界的广泛关注。相比传统的隐式神经散射场渲染技术,高斯溅射依托椭球空间,显性地表示多目图像的三维空间关系,其计算效率和综合性能均有较大的提升,且更容易理解。可以预见,未来2年针对高斯溅射的应用研究将会迎来爆炸式发展。通过本篇博文,我和大家来一起了解高斯溅射技术,希望对有需要的同学提供一点帮助。


2. 简介

高斯溅射3D Guassian Splatting是2023年Siggraph发表的一项创新性技术,其基本的思路为利用运动结构恢复SfM【2】,从一组多目图像中估计一个显性的稀疏点云。对于该点云中的每一个点,构造一个类似散射场的高斯椭球概率预测模型,通过神经网络完成学习,获得每一个椭球的对应参数,进而得到一个类似体像素的离散表示,以支持多角度的体渲染和光栅化。

高斯椭球 起初,图形学几何表达并不局限于三角面片。基于椭球的三维几何表示一度被工程化,例如1994年发售的魔城迷踪ecstatica:知乎:3D Gaussian Splatting入门

实际的现实世界是离散的,面片的位置是确定的,即“空白”区域就是没有数据,可以用标量0表示,有实物的区域或者一个实体表面,就是有数据的,可以用标量1表示。针对现实世界,数据显然是不可微的,因为从无到有是一个标量从0到1的跳变。由于不可微,导致不能直接套用基于微分的优化方法。而神经散射场技术的成功之处在于针对三维世界建立了一个可微的体渲染方式已解决该问题。简单解释,就是对三维世界进行渲染时,一个区域是否有物体,不是一个非0即1的二值判断,而是一个概率的预测。即空间的每一个位置都有一个基于概率的数值。这样,从0到1的跳变就转换成了一个连续的概率变换。优点是使渲染或三维表示变得可微,缺点是不能准确的确定一个几何结构。由于对整个空间建立体概率预测,训练效率较低,即使使用了GPU并行加速和类似八叉树的结构优化,依然不能获得实时的渲染性能。这时,高斯椭球被重新采用。

神经散射场的问题在于无法将概率预测控制在一个可控的区域。高斯椭球提供了一个有效的解决方案,该技术将概率预测压缩在一个基于稀疏点云的多个高斯分布中。即每一个概率预测的计算都是以稀疏点云中的一个点为标定,一个特定的作用范围作为概率预测的界限。这样,体渲染面对的不是全局场景,而是椭球限定的一组小区域。全局优化被拆解为一组局部优化,对应的计算效率自然会有所提升。高斯溅射技术就是基于上述思路提出,以平衡渲染效率和精度。


3. 算法流程

算法输入为一个静态场景的一组多目视图。首先通过SfM技术产生一组稀疏点云。基于该点云的每一个点建立一个3D高斯模型,伴随一组参数,包括位置,协方差矩阵(变换),透明度还有颜色。由于每一个局部的高斯模型对应不同的参数,那么这种体渲染是各向异性的,具有比较好的灵活性。散射场的颜色对应一个球谐函数的解。在完成优化后,高斯模型的对应参数被学习获得,体渲染需要的信息被获知,即可通过光栅化实现三维渲染的可视化。

可微分的3D高斯溅射 使用一组3D高斯模型来表示几何,优点在于不需要精确估计法向量。高斯模型由一个定义在世界坐标系下的满秩3D协方差矩阵Σ,由中点𝜇定位:

上面的高斯模型经由透明度α累加合成。3D高斯是一个事实上的三维表达,同时也是一种概率散射场体渲染表示,最终通过2D光栅化呈现。协方差矩阵Σ可由缩放矩阵S和旋转矩阵R表示:

3D高斯的自适应优化 基于高斯模型,高斯溅射的核心技术为对模型内参数的优化,以获得一组显性的高斯椭球估计。由于高斯溅射需要考虑从3D到2D的映射,错误的几何估计是不可避免的。这时需要在优化过程删除错误的几何估计。作者使用了一个随机梯度下降技术,借助标准GPU加速结构,实现对高斯模型参数的高效优化。注:这里有一部分参数选择的介绍,以及当高斯覆盖区域过大而误差显著时,需要进行分割的实现细节,我并没有搞清楚,需要研究代码后再看。

基于高斯的光栅化 高斯溅射的目标是提供任意角度的2D渲染。从一组高斯模型中实现到图像的光栅化是一个需要面对的挑战。作者采用一种基于瓷砖的光栅化(tile-based rasterizer,是计算机图形学中的一种渲染技术。它将屏幕划分为小的矩形区域,称为瓷砖。每个瓷砖都独立处理,以减少冗余计算和内存访问)。首先将屏幕分成16*16个瓷砖,基于视锥体区域剔除域外高斯。利用估计的透明度α,对瓷砖进行排序,并为每一个瓷砖分配一个线程。对于一个像素,按照光栅化步骤,在视锥体中,逐个检索瓷砖,结合透明度与颜色,确定像素的具体信息。到此,整个高斯溅射的核心技术都已经做了简要的介绍。确实是一个非常巧妙且便于理解的体渲染方法。


实验结果:

可以看到,对场景种的一些细节,高斯溅射技术(第二列)能够获得更精确的结果。


参考文献:

[1] Kerbl B, Kopanas G, Leimkühler T, et al. 3D Gaussian Splatting for Real-Time Radiance Field Rendering[J]. ACM Transactions on Graphics, 2023, 42(4).

[2] Snavely N, Seitz S M, Szeliski R. Photo tourism: exploring photo collections in 3D[M]. ACM siggraph 2006 papers. 2006: 835-846.

[3] Lassner C, Zollhofer M. Pulsar: Efficient sphere-based neural rendering[C]. Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 1440-1449.

这篇关于3D高斯溅射:面向三维场景的实时渲染技术的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/703112

相关文章

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2