3D高斯泼溅(Splatting)简明教程
在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器
3D 高斯泼溅(Splatting)是用于实时辐射场渲染的 3D 高斯分布描述的一种光栅化技术,它允许实时渲染从小图像样本中学习到的逼真场景。 本文将详细介绍它的工作原理以及它对图形学的未来意味着什么。
1、什么是 3D 高斯泼溅?
3D 高斯泼溅的核心是一种光栅化技术。 这意味着:
- 有描述场景的数据。
- 在屏幕上绘制数据。
- 类似于计算机图形学中的三角形光栅化,用于在屏幕上绘制许多三角形:
然而,它不是三角形,而是高斯分布。 这是一个栅格化的高斯函数,为了清晰起见,绘制了边框:
高斯泼溅由以下参数描述:
- 位置:它所在的位置 (XYZ)
- 协方差:如何拉伸/缩放(3x3 矩阵)
- 颜色:它是什么颜色(RGB)
- Alpha:透明度如何 (α)
在实践中,会同时绘制多个高斯曲线:
这是三个高斯。 那么 700 万高斯呢?
这是每个高斯光栅化完全不透明的样子:
这是对 3D 高斯分布的非常简短的概述。 接下来,让我们逐步完成本文中描述的完整过程。
1、3D高斯泼溅原理
3D高斯泼溅的实现原理分为一下几个部分:
- 运动结构恢复:利用SfM得到点云
- 点云转高斯分布
- 模型训练
- 光栅化
1.1 运动结构恢复
第一步是使用运动结构恢复 (SfM: Structure from Motion) 方法从一组图像中估计点云。 这是一种从一组 2D 图像估计 3D 点云的方法。 这可以通过 COLMAP 库来完成。
1.2 转换为高斯分布
接下来,每个点都转换为高斯分布。 这对于光栅化来说已经足够了。 然而,只能从 SfM 数据推断位置和颜色。 为了学习产生高质量结果的表示,我们需要对其进行训练。
1.3 模型训练
训练过程使用随机梯度下降,类似于神经网络,但没有层。 训练步骤为:
- 使用可微分高斯光栅化将高斯光栅化为图像(稍后详细介绍)
- 根据光栅化图像和地面真实图像之间的差异计算损失
- 根据损失调整高斯参数
- 应用自动致密化和修剪
步骤 1-3 从概念上讲非常简单。 第 4 步涉及以下内容:
- 如果对于给定的高斯梯度很大(即它太错误),则分割/克隆它
- 如果高斯很小,则克隆它
- 如果高斯很大,则将其分割
- 如果高斯的 alpha 太低,请将其删除
此过程有助于高斯更好地拟合细粒度细节,同时修剪不必要的高斯。
1.4 可微分高斯光栅化
如前所述,3D 高斯分布是一种光栅化方法,它将数据绘制到屏幕上。 然而,一些重要的元素还包括:
- 快速
- 可微分
光栅化器的原始实现可以在这里找到。 光栅化涉及:
- 从相机角度将每个高斯投影为 2D。
- 按深度对高斯进行排序。
- 对于每个像素,从前到后迭代每个高斯,将它们混合在一起。
这篇论文中描述了其他优化。
光栅化器是可微分的也很重要,这样就可以用随机梯度下降来训练它。 然而,这仅与训练相关 - 训练有素的高斯也可以用不可微的方法呈现。
2、谁关注3D高斯泼溅?
为什么 3D 高斯溅射受到如此多的关注? 显而易见的答案是结果不言自明 - 这是高质量的实时场景。 然而,故事可能还有更多。
关于高斯泼溅还能做什么还有很多未知数。 它们可以动画化吗? 即将发表的论文《动态 3D 高斯:通过持久动态视图合成进行跟踪》表明他们可以。 还有许多其他未知数。 他们能做反思吗? 可以在没有参考图像训练的情况下对它们进行建模吗?
最后,人们对嵌入式人工智能的研究兴趣日益浓厚。 这是人工智能研究的一个领域,最先进的性能仍然低于人类性能几个数量级,其中大部分挑战在于表示 3D 空间。 鉴于 3D 高斯分布可以产生非常密集的 3D 空间表示,这对具身AI 研究有何影响?
这些问题需要注意方法。 实际影响如何还有待观察。
3、图形学的未来
那么这对图形学的未来意味着什么呢? 好吧,让我们将其分为优点/缺点:
优点
- 高品质、逼真的场景
- 快速、实时光栅化
- 训练速度相对较快
缺点
- 高 VRAM 使用率(4GB 用于查看,12GB 用于训练)
- 大量磁盘占用(一个场景 1GB+)
- 与现有渲染管道不兼容
- 静态(暂时)
到目前为止,原始的 CUDA 实现尚未适应生产渲染管道,如 Vulkan、DirectX、WebGPU 等,因此还有待观察会产生什么影响。
目前已经进行了以下适应性工作:
- 远程查看器
- WebGPU查看器
- WebGL 查看器
- Unity查看器
- 优化的 WebGL 查看器
这些依赖于远程流传输 (1) 或传统的基于四元组的光栅化方法 (2-5)。 虽然基于四元组的方法与数十年的图形技术兼容,但它可能会导致质量/性能降低。 然而,查看器 #5 表明,尽管采用基于四元组的方法,优化技巧仍可以带来高质量/性能。
那么我们会看到 3D 高斯泼溅在生产环境中完全重新实现吗? 答案可能是肯定的。 主要瓶颈是对数百万个高斯进行排序,这在原始实现中使用 CUB 设备基数排序(一种仅在 CUDA 中可用的高度优化的排序)有效完成。 然而,只要付出足够的努力,在其他渲染管道中当然可以达到这种性能水平。
原文链接:3D高斯泼溅 — BimAnt
相关文章:

3D高斯泼溅(Splatting)简明教程
在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器 3D 高斯泼溅(Splatting)是用于实时辐射场渲染的 3D 高斯分布描述的一种光栅化技术,它允许实时渲染从小图像样…...
为什么要停止在 SpringBoot 中使用字段注,改用构造器注入
停止在 SpringBoot 中使用字段注入! 本文为翻译文,同时加入了一些自己的理解,翻译来源:https://medium.com 在 Spring Boot 依赖项注入的上下文中,存在关于注入依赖项最佳实践的争论:字段注入、Setter注入和构造函数…...

数据可视化:地图
1.基础地图的使用 如何添加颜色表示层级 代码实现 """基础地图的使用 """ from pyecharts.charts import Map from pyecharts.options import VisualMapOpts# 准备地图对象 map Map() # 准备数据 data [("北京市", 9),("上海市…...

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层
文章目录 数据结构总结ArrayList源码底层LinkedList底层源码 迭代器底层 数据结构 对于数据结构我这边只告诉你右边框框里的 栈的特点:后进先出,先进后出,入栈也成为压栈,出栈也成为弹栈 栈就像一个弹夹 队列先进先出后进后出 队列像排队 链表查询满 但是增删快(相对于数组而…...
如何在Python编程中应用Linux环境下的框架,以实现高效算法?
python是一种广泛使用的编程语言,能够帮助开发人员快速开发高效的算法。与此同时,linux环境下提供了许多优秀的框架,可以进一步提高Python编程的效率。本文将介绍如何在Python编程中应用Linux环境下的框架,以实现高效算法。 一、Python和Linux环境的优势 Python是一种易学…...

多机位直播案例
目录 1、案例简述 2、设备准备: (1)笔记本电脑 (2)手机 (3)触控一体机 (4)教室前端监控摄像机 (5)教室后端监控摄像机 (6&…...

前沿重器[37] | 大模型对任务型对话的作用研究
前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经…...

第三章:boundary-value analysis
文章目录 Boundary-value Analysiscomputational faults 计算错误boundary shift 边界偏移boundary value analysis 的优势Path condition, domain, and domain boundary (路径条件、域和域边界)Open and closed boundaries (闭合边界 / 开放边界)on / off pointGuidelinestr…...

Python模块psutil:系统进程管理与Selenium效率提升的完美结合
前言 在前面编写一个Selenium的自动化程序时候,发现一个问题。 因笔记本配置较为差,所以每次初始化Selenium的WebDriver都会非常慢,整个等待过程是不友好的。 所以我就想到: 在程序中初始化一个全局的WebDriver对象,…...

glibc 里的线程 id
这里讲的是通过 pthread_create() 函数返回的线程 id,其实就是 glibc 库里维护的线程id,它跟内核维护的线程 id 不一样,pthread_create() 返回的线程 id 并不一定是唯一的。我们看 pthread_create 函数的源码,它最后返回的线程 id…...

nacos的部署与配置中心
文章目录 一、nacos部署安装的方式单机模式:集群模式:多集群模式: 二、安装的步骤1、预备环境准备2、载安装包以及安装2.1、Nacos有以下两种安装方式:2.2、更换数据源数据源切换为MySQL 2.3、开启控制台授权登录(可选) 3、配置中心的使用3.1、创建配置信…...
undefined 与 undeclared 的区别?
在 JavaScript 中,undefined 和 undeclared 是两个不同的概念,表示不同的情况: 1:undefined: undefined 是一个特殊的值,表示一个变量已经被声明,但尚未被赋予一个值。当一个变量被声明但未进…...

Leetcode周赛370补题(3 / 3)
目录 1、找到冠军 Ⅰ- 暴力 2、找到冠军 Ⅱ - 寻找入度为0的点 3、在树上执行操作以后得到的最大分数 - dfs树 逆向思考 1、找到冠军 Ⅰ- 暴力 100115. 找到冠军 I class Solution {public int findChampion(int[][] g) {int ng.length;for(int i0;i<n;i){int cnt0;for…...

PyTorch深度学习实战——图像着色
PyTorch深度学习实战——图像着色 0. 前言1. 模型与数据集分析1.1 数据集介绍1.2 模型策略 2. 实现图像着色相关链接 0. 前言 图像着色指的是将黑白或灰度图像转换为彩色图像的过程,传统的图像处理技术通常基于直方图匹配和颜色传递的方法或基于用户交互的方法等完…...

InfiniBand 的前世今生
今年,以 ChatGPT 为代表的 AI 大模型强势崛起,而 ChatGPT 所使用的网络,正是 InfiniBand,这也让 InfiniBand 大火了起来。那么,到底什么是 InfiniBand 呢?下面,我们就来带你深入了解 InfiniBand…...

分享一下微信小程序里怎么添加社区团购功能
随着互联网的快速发展,线上购物已经成为我们日常生活的一部分。而在这个数字化时代,微信小程序作为一种便捷的电商渠道,正逐渐成为新的趋势。其中,社区团购功能更是受到广大用户的热烈欢迎。本文将探讨如何在微信小程序中添加社区…...
软考高项-IT部分
信息化体系 信息化技术应用:龙头 信息资源:核心任务 信息网络:应用基础 信息技术和产业:建设基础 信息化人才:成功之本 信息化法规:保障 信息化趋势 产业信息化、产品信息化、社会生活信息化、国民经济信息化 新型基础设施建设 2018年召开的中央经济工作会议,首…...

hugetlb核心组件
1 概述 hugetlb机制是一种使用大页的方法,与THP(transparent huge page)是两种完全不同的机制,它需要: 管理员通过系统接口reserve一定量的大页,用户通过hugetlbfs申请使用大页, 核心组件如下图: 围绕着…...

vscode配置环境变量
首先点击下面这个链接。 sMinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net 然后选择Files这个选项 向下移选择下载这个文件 解压完成之后,找到这个文件的bin目录复制路径后,添加到环境变量中 依次点击后打开cmd࿰…...
react:封装组件
封装 /components/Pagination.tsx import React from react import { Pagination } from antdconst PaginationWarp ({ total, paramsInfo, setParamsInfo }) > {return (<Paginationtotal{total}current{paramsInfo.page}showSizeChangershowQuickJumperdefaultPageSi…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...