如何用多个高斯泼溅合成新的场景【3DGS】

3D高斯泼溅(3D Gaussian Splatting)作为一种突破性摄影测量和可视化技术作为 SIGGRAPH 2023 上发表的研究论文的一部分发布。我相信3DGS是允许像你我这样的日常用户扫描 3D 的最佳现代方法并保留有机材料的精细细节,尤其是植物、树木、花卉和其他自然元素——所有我们希望在街道上看到更多的东西!

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割

这仍然是一个研发项目,尚未成为 3DStreet 支持的内置功能。在这篇文章中,我们分享了关于如何在 Three.js 和 A-Frame(支持 3DStreet 的底层 3D 框架)中使用深度缓冲区和选择性 splat 丢弃来改进从多个 splat 合成新场景的视觉外观的研究和进展。

1、3DGS爆炸!

大量3GS工具已经进入市场——使用手机进行3D扫描的创建应用程序(Polycam和Luma)以及适用于所有可以想象的平台和设备(太多而无法列出)的查看器,甚至是基于浏览器的裁剪和编辑工具。

然而,现有的高斯泼溅研究和开发大部分都集中在只有一个大splat的场景。

通过 3DStreet,我们正在探索一些新的东西——利用现有 3D 碎片构建全新的街道场景。

2、问题:three.js 中同时渲染多个 splats 很难

如果我们可以在场景中绘制一个高斯泼溅,为什么不能绘制更多呢?事实证明这很难。现有的 Three.js / A-Frame splat 查看库尚不支持合成,因此它导致人们无法将其用作产品,例如这个消防栓和树被更远的花箱遮挡。

为了解决这个问题,我们与 WebXR 和全栈开发人员 Arthur Mougin 合作,他很高兴能够应对新的挑战。这是他关于我们如何启用正确的 splat 排序的文章,最后对接下来的内容进行了一些讨论。

2、正确设置深度缓冲区

在分析了 Threejs 的着色器和渲染管道之后,我们首先确定我们需要有适当的场景级遮挡。

在场景层面,Splats 只是具有独特绘制方法的经典不透明对象。这很好,因为我们可以利用深度缓冲区。这是一个灰度图像,着色器用它来知道它们的像素是否低于或高于已绘制的内容。默认情况下,splats 不会写入其中,当绘制顺序与深度顺序不匹配时,会导致奇怪的伪像。递归遮挡也是如此。

因此,我们添加了使用 depthWrite:true 将渲染的图块写入深度缓冲区的功能。打开它可以极大地改善我们的遮挡问题。

3、修复边框和边缘混合问题

有时边界并不完全干净,我们也想要一种方法来改进它。

这次是在片段着色器中完成的,其中丢弃导致像素不被绘制。我们比较每个斑点像素的不透明度,如果它低于我们的限制,则不会渲染。

此限制(即丢弃过滤器)在设置为 0 时无效,但有助于清除不必要的斑点,这些斑点可能会破坏两个图块之间的正确过渡。由于它适用于所有 splat 的斑点,因此打开它会影响 splats 的质量。

不幸的是,不同方法之间需要权衡。正如你在下面的下一个示例中所看到的。右侧是带有不考虑遮挡的原始 A-Frame splatting 组件的测试场景。左侧使用深度写入,它可以正确地对树、消防栓和花箱的遮挡进行排序,但也会导致在花箱底部与人行道相交处特别明显的伪影。

调整 discardFilter可以让你控制找到正确的值,但是当你继续增加丢弃过滤器值接近 1 时,板片开始在基材上形成孔,并且看起来距离更远。

对伪像的部分有效缓解是使用 PlayCanvas 的 SuperSplat 等工具严格裁剪你的 splats。

4、更新 aframe-gaussian-splatting 存储库

过去,我们一直直接对原始A-Frame Gaussian Splat仓库做出更改,Arthur建议了包含这些更改的PR,但我们想在这些更改能够合并之前发布这篇文章,所以我们分叉了这个repo目前在 3DStreet GitHub 组织中。

GitHub |  演示场景(使用 WASD 键移动) | 演示场景源(也使用剪切实体)

5、结合光栅化方法

现在我们的库支持 splat 合成,是时候测试它们在 3DStreet 场景中的样子了。

我们创建了一个示例场景,该场景加载 3DStreet 街道场景,其中手动放置的 splat 实体放置在场景周围的适当位置。这是第一次尝试了解图块与场景的契合度,以及我们需要对 3DStreet 编辑器进行哪些更改以支持使用用户界面管理这些图块。

此图显示了混合轿车和公交车站的 splat 和低多边形网格对应物的并排视图:

由于每个图块都是 A 形框架实体,因此 3DStreet 编辑器可以提供一种快速的方法来移动它们并排列自定义场景:

6、结束语

我们创建了一个概念验证演示,其中显示了我在旧金山周围扫描的图块,并结合了从 3DStreet 自动创建的多边形网格模型。

这仍然是一项研究技术。即使就在过去的一周,Luma AI 发布了一个全新的 WegGL splat 查看库,而且关于这个主题的更多研究似乎每周都在更新。我们提出的方法可能很快就会被一种奇特的新算法所取代。

我们将继续迭代该技术在街道安全和更一般的城市设计用例中的应用。如果这引起了用户的共鸣,我们可以探索如何使其易于访问,以便所有用户都可以使用他们从自己的街道扫描的模型创建自定义的 splat 场景。


原文链接:用多个splat合成新场景 - BimAnt

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【青龙面板教程】保姆级拉库 Faker库 以及依赖安装教程

青龙面板最新版拉库教程 新版青龙(订阅)拉库教程 拉库前请打开青龙面板-配置文件 第18行 GithubProxyUrl"" 双引号中的内容清空复制以下拉库命令即可。Faker2 助力池版【安全本地sign防CK泄漏】使用助力池请在群里发"助力池" 机器…

初阶数据结构之单链表详解

目录 一:单链表概念 二:单链表的基本操作 1.定义结点 2.创建链表(初始化链表) 3:新增结点 4.单链表尾插 5.单链表头插 6.单链表尾删 7:单链表头删 8.打印单链表 9.查找单链表结点 10.单链表删除指定结点 1…

【C语言】static关键字用法

目录 一、static修饰局部变量 二、static修饰全局变量 三、static修饰函数 一、static修饰局部变量 首先我们来看两段代码: 代码1&#xff08;不加static&#xff09; #include <stdio.h> void test() {int i 0;i;printf("%d ", i); } int main() {int i…

UE5材质基础(2)——数学节点篇

UE5材质基础&#xff08;2&#xff09;——数学节点篇1 目录 UE5材质基础&#xff08;2&#xff09;——数学节点篇1 Add节点 Append节点 Abs节点 Subtract节点 Multiply节点 Divide节点 Clamp节点 Time节点 Lerp节点 Add节点 快捷键&#xff1a;A鼠标左键 值相加…

C++学习第十二天(继承)

1、继承的概念以及定义 继承的概念 继承机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行拓展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的层次结构&#x…

EditReady for Mac激活版:专业视频转码工具

对于视频专业人员来说&#xff0c;一款高效的视频转码工具是不可或缺的。EditReady for Mac正是这样一款强大的工具&#xff0c;它拥有简洁直观的操作界面和强大的功能&#xff0c;让您的视频处理工作事半功倍。 EditReady for Mac支持多种视频格式的转码&#xff0c;并且支持常…

多线程学习Day09

10.Tomcat线程池 LimitLatch 用来限流&#xff0c;可以控制最大连接个数&#xff0c;类似 J.U.C 中的 Semaphore 后面再讲 Acceptor 只负责【接收新的 socket 连接】 Poller 只负责监听 socket channel 是否有【可读的 I/O 事件】 一旦可读&#xff0c;封装一个任务对象&#x…

阿里云VOD视频点播流程(2)

二、视频点播 1、入门代码 基于OSS原生SDK上传 &#xff0c;参考文档&#xff1a;https://help.aliyun.com/zh/vod/user-guide/upload-media-files-by-using-oss-sdks?spma2c4g.11186623.0.0.1f02273fj4lxNJ 视频点播面向开发者提供了丰富的上传方式&#xff0c;其中上传SDK&…

软件测试实战项目(含电商、银行、APP等)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 今天给大家带来几个软件测试项目的实战总结及经验&#xff0c;适…

ps5电玩计时收费系统软件教程,电玩店适合的计时器,电脑定时语音提醒

ps5电玩计时收费系统软件教程&#xff0c;电玩店适合的计时器&#xff0c;电脑定时语音提醒 一、前言 以下软件操作教程以&#xff0c;佳易王电玩计时计费管理软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、计时计费功能&#xff1a;只…

PHPStudy 访问网页 403 Forbidden禁止访问

涉及靶场 upload-labd sqli-labs pikachu dvwa 以及所有部署在phpstudy中的靶场 注意&#xff1a;一定要安装解压软件 很多同学解压靶场代码以后访问报错的原因是&#xff1a;电脑上没有解压软件。 这个时候压缩包看起来就是黄色公文包的样子&#xff0c;右键只有“全部提取…

SpringCloud Alibaba Sentinel 修改Dashboard用户名和密码

目录 一、下载Sentinel的Jar包 二、在启动时修改用户名和密码的命令 三、测试登录成功 在网上找到了一大堆文章&#xff0c;没一个有用的&#xff0c;最终还是通过不断测试找到了这个方法。 一、下载Sentinel的Jar包 Releases alibaba/Sentinel GitHub 二、在启动时修改…

设计模式:命令模式

文章目录 一、什么是命令模式二、命令模式结构三、命令模式实现步骤四、命令模式应用场景 一、什么是命令模式 它允许将请求封装为对象&#xff0c;一个请求对应于一个命令&#xff0c;将发出命令的责任和执行命令的责任分割开。每一个命令都是一个操作&#xff1a;请求的一方…

【管理咨询宝藏93】大型制造集团数字化转型设计方案

【管理咨询宝藏93】大型制造集团数字化转型设计方案 【格式】PDF版本 【关键词】国际咨询公司、制造型企业转型、数字化转型 【核心观点】 - 235页大型制造型集团数字化转型方案设计&#xff01;细节非常详尽&#xff0c;图表丰富&#xff01; - 系统架构必须采用成熟、具有国…

JS数组操作基础

1、JS数组常用方法 2、函数使用实例 2.1 concat() 功能&#xff1a;可以合并一个或多个数组&#xff0c;返回合并数组之后的数据&#xff0c;不会改变原来的数组 var str1 [12,3,"hello"]; var str2 ["world",123]; console.log(str1,concat(str2)); …

leetcode--560和为k的子数组

问题 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums [1,2…

IP协议,网络层

一、IP协议报文 在网络层最主要的协议是IP协议&#xff0c;网络层的主要任务是进行&#xff1a;1.地址管理 2.路由选择 地址管理&#xff1a;使用一套地址体系&#xff0c;描述互联网中每个设备所处的位置。 IP地址有两个版本&#xff0c;1.IPV4 2.IPV6 &#xff0c;IP…

基于STM32F103ZE平台分析FreeRtos(九)——协程

目录 一、协程简介 二、协程工作机制 2.1 协程控制块结构 2.2 协程管理方式 2.3 协程调度方式 2.4 协程通信机制 三、协程状态及状态切换 3.1 协程状态 3.2 状态切换 四、协程创建 五、协程调度分析 5.1 源码分析 5.2 逻辑图分析 六、协程通信 6.1 协程发送消息…

Edge的使用心得和深度探索-Sider: ChatGPT 侧边栏

作为一款备受欢迎的网络浏览器&#xff0c;Microsoft Edge在用户体验和功能方面都有着诸多优势。在长期的使用中&#xff0c;我总结出了三条使用心得&#xff0c;同时也发现了三个能够极大提高效率的功能。让我们一起深度探索Edge的潜力吧&#xff01; 使用心得&#xff1a; 界…

Android 10.0 Launcher3定制folder文件夹2x2布局之一xml文件配置和解析相关属性

1.前言 在10.0的系统rom产品定制化开发中,在对Launcher3的folder文件夹功能定制中,要求folder文件夹跨行显示,就是 2x2布局显示,默认的都是占1格的,现在要求占4格显示,系统默认是不支持显示4格的,所以接下来需要分析相关的 功能,然后来实现这个功能 2.Launcher3定制fo…