高斯溅射融合之路(一)- webgl渲染3d gaussian splatting

大家好,我是山海鲸的技术负责人。之前已经写了一个GIS融合系列。其实CesiumJS的整合有相当的难度,同时也有很多方面的工作,很难在几篇文章内写完,整个山海鲸团队也是投入了接近两年的时间,才把周边整套工具链进行了完善,后续有新的内容也会持续分享,隔壁系列传送门:GIS融合之路

一坑未平,一坑又起。去年年末,我们的AI合作伙伴突然给山海鲸技术团队丢来了一个新技术-3D Gaussian Splatting。我们的理解中,一直认为Nerf类似的技术还是实验室里的玩具,没想到这么快就可以实际应用了。我们技术团队一向自认无所不能,怎么能在AI领域毫无建树呢。

于是作为一名有好胜心的技术负责人,必须拉来团队开个会传递了一下不服输的精神:

大家都很平静了接受了我的提议,一致认为高斯溅射的渲染是未来的方向,是必须被整合进山海鲸的。好了,思想上同步了,团队摩拳擦掌,接下来就是了解一下到底什么是高斯溅射了。

经过了半天学习,不得不感慨一下,AI界相比GIS界那可是真的是太人性化了。当年整合GIS的时候,当年就光理解GIS界的黑话就花了一天,刚弄懂投影坐标系和球心坐标系,又得看WGS84和CGCS2000。刚以为终于算入门了,又被客户问了4490支持不支持,那真的是语言的迷宫啊。相比之下,AI界虽然高级词汇多,但人家是真的实打实的难啊。

不过难得的是,相比nerf,3d gaussian splatting对于渲染界的人来说,那可是太友好了,基本就是一个点云Plus,结合一下3D高斯分布。渲染起来基本就是一堆billboard,确实没有入门难度。网上一搜竟然有这么多开源的代码,那么作为一个讲究效率的技术负责人来说,那必然是没有自己研究的必要了,直接拿来就用吧。那么我们直接看下高斯泼溅在山海鲸中的渲染和功能集成效果吧:

山海鲸导入高斯泼溅模型效果,支持ply/splat格式 - 知乎

这么快就结束了?咱这可才是系列第一篇,而且从头到尾除了借鉴和废话,竟然没有对社会作出一丝自己的贡献,这心里自然是惴惴不安的

既然写不出啥原创,我就学习下科研界的办法,来写篇综述吧,也算从我个人的理解出发,说说对高斯溅射的理解:

1、渲染的几何表达

实际上现代的游戏和3D建模,基本上绝对的主流就是Mesh网格表达,也就是三角形。三角形的优点就是和现代GPU兼容度极佳,因此渲染速度很快。但实际上除了Mesh表达外,还有类似点云,有向距离场等等,而这些方案来说,点云才是最符合人物直觉能想到的最简单的3D模型的表现形式,甚至点云往表面的渲染,也不是从高斯溅射开始的,之前的渲染界也尝试了各种算法去填充点与点之间的空隙,只是最终Mesh网格成了渲染界最终赢家。而点云本身由于和激光扫描这类技术结合度较高,因此还是有着广泛的应用,山海鲸内目前也支持点云数据的接入。最后贴一张Games101中的PPT来看下几何表达的困难:

2、AI三维重建

其实要说三维重建,数字孪生领域最熟悉的莫过于倾斜摄影了,而倾斜摄影里也是用各个角度的图片通过识别同一像素点来先建立点云数据,再通过表面重建的形式转成网格模型的。那么为什么AI界要绕那么大弯从NeRF开始做呢,因为AI领域引以为傲的最快梯度下降法必须要求几何表达是可微的,否则就没法训练了。目前常规的可微的几何表达就是有向距离场,但有向距离场目前直接渲染画面的能力还不是很常规,更多用于阴影的计算这类辅助渲染,而NeRF采用体素的渲染,实现了几何表达的可微,但遗憾的是,体素渲染目前的效率还比较低,和光栅化不可同日而语。3D高斯泼溅使用点云作为渲染的基础,可以直接复用光栅化,同时又利用高斯函数的可微性进行训练实现了训练速度和渲染速度的兼得。

3、目前高斯溅射的格式

当前高斯溅射主流格式就是PLY格式,PLY格式是一个文件头是文本形式,而顶点数据是二进制的模式,文件头中给出了每个顶点所有的属性,是一个扩展性很强的文件格式,只是读取的时候要先读取头文件内容以确定数据部分如何读取,因此这个过程相对较慢。而现在主流的方案就是把这个PLY文件先读取进来,然后对每个顶点只保留位置 旋转 颜色 和 高斯函数的参数的形式生成SPLAT文件,牺牲掉PLY文件的扩展性,换来更快的加载速度。

山海鲸目前也同时支持的ply文件和splat文件的载入。

4、目前山海鲸整合渲染时的问题

由于高斯溅射算法更多的考虑的独立渲染,和其他元素进行整合渲染就会出现各种各样的问题

首先就是和光照的互动,目前山海鲸中可以加入如平行光,IBL,点光源等等的光照,这些光照还不能直接和高斯溅射的模型产生效果。

其次高斯溅射由于没有直接的depth和normal信息的输出,导致在雾效,空气透视,延迟渲染等类后处理中很难处理。

最后同GIS相关技术对比,高斯溅射在坐标系支持,瓦片加载等相关周边功能的支持度上都还较为欠缺。

当然,目前高斯溅射技术领域还在蓬勃发展,我们山海鲸也会一同逐步完善高斯溅射在渲染中的整合程度,也欢迎大家下载软件进行体验。

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

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

相关文章

Rust入门-引用借用

一、引用借用,是什么、为什么、怎么用 所有权上篇我们已经讨论过了,所以这篇我们讨论Rust的引用借用 1、引用借用 是什么? Rust 通过借用(Borrowing) 这个概念来达成上述的目的,获取变量的引用,称之为借用(borrowin…

nodejs工具脚本json转excel

json转excel 主要使用 sheetjs 库 vim convertJsonToExcel.js 封装转换方法 import fs from fs; import XLSX from xlsx;/*** 扁平化嵌套json对象* param {Object} jsonObj* param {String} prefix* returns*/ export function flattenKeys(jsonObj, prefix ) {const resul…

Echarts-丝带图

Echarts-丝带图 demo地址 打开CodePen 什么是丝带图? 丝带图是Power BI中独有额可视化视觉对象,它的工具提示能展示指标当期与下期的数据以及排名。需求:使用丝带图展示"2022年点播订单表"不同月份不同点播套餐对应订单数据。 …

给rwkv-pytorch 写个chat ui demo

rwkv-pytorch 项目地址 rwkv-pytorch from nicegui import uimessage_dict {1: [{"name":"Assistant","text":"你好"}]} current_name 1 import aiohttpasync def get_text_async(text"Hello, how are you?"):# 定义AP…

统一SQL-支持CHAR和VARCHAR2 (size BYTE|CHAR)转换

统一SQL介绍 https://www.light-pg.com/docs/LTSQL/current/index.html 源和目标 源数据库:Oracle 目标数据库:Postgresql,TDSQL-MySQL,达梦8,LightDB-Oracle 操作目标 在Oracle中的CHAR和VARCHAR2数据类型&…

stm32二刷-GPIO

一 什么是 GPIO: GPIO(general porpose intput output), 通用输入输出端口 . 二 我们先认识芯片控制 GPIO 输出控制。 2.1LED 硬件原理如图: 当电流从这根电线流通, LED 亮。当电流不通过这根电线, LED 灭。 上面 PF** ,芯片电…

Windows下使用SDKMAN对JDK(Java)进行多版本管理

Windows下使用SDKMAN对JDK(Java)进行多版本管理 1.背景2.基于msys2工具2.1. msys2简介2.2. 安装与配置2.2. Windows环境变量配置参考2.3 结果确认 3. 基于WSL 1.背景 前端有nvm,python有miniconda,miniforge等,java呢?java在Linu…

【机器学习】Q-Learning算法:在序列决策问题中的实践与探索

在序列决策问题中的实践与探索 一、Q-Learning算法概述二、Q-Learning算法实例分析三、Q-Learning算法代码实现四、总结与展望 在人工智能领域,序列决策问题一直是一个核心挑战。面对复杂的环境和动态变化的状态,智能体如何做出最优决策,以达…

电动汽车充电站的最优选址定容(matlab程序)

0.代码链接 电动汽车充电站的最优选址定容(matlab程序)_电动汽车充电站配置程序资源-CSDN文库 1.简述 随着经济的快速发展,环境污染和能源紧缺问题越来越严重,电动汽车的出现可以起到保护环境,节约能源的作用。未来随着我国电动汽车数量的快速增加,充电…

OpenHarmony实战开发-如何视频弹幕功能。

介绍 本示例介绍如何使用ohos.danmakuflamemaster和ohos.gsyvideoplayer开发支持视频弹幕的播放器。可以自定义弹幕样式、占据屏幕宽度,发送弹幕,开关弹幕视图。 效果图预览 使用说明 点击播放按钮,进行视频播放,弹幕自动开启点…

Linux的学习之路:14、文件(1)

摘要 有一说一文件一天学不完,细节太多了,所以这里也没更新完,这里部分文件知识,然后C语言和os两种的文件操作 目录 摘要 一、文件预备 二、c文件操作 三、OS文件操作 1、系统文件I/O 2、接口介绍 四、思维导图 一、文件…

基于STM32实现流水灯【Proteus仿真】

详情更多 wechat:嵌入式工程师成长日记 https://mp.weixin.qq.com/s?__bizMzg4Mzc3NDUxOQ&mid2247485624&idx1&sn4e553234c2624777409bd2067a07aad8&chksmcf430de0f83484f6189b119d9d83ea6e6f2a85d13afaa04d218483918231c38e6382d3007061&tok…

nginx-ingress详解

一、ingress概述 1、概述 Kubernetes是一个拥有强大故障恢复功能的集群,当pod挂掉时,集群会重新创建一个pod出来,但是pod的IP也会随之发生变化,为了应对这种情况,引入了service,通过service的标签匹配&am…

aspx页面 ASP.NET Web Forms中的DropDownList添加搜索功能使用select2

.NET兼职社区 select2依赖jquery JS直接去官网下载&#xff1a;https://select2.org/getting-started/basic-usage或者https://www.bootcdn.cn/ <% Page Title"Home Page" Language"C#" MasterPageFile"~/Site.Master" AutoEventWireup&qu…

uniapp_微信小程序_预约时间组件的使用

一、官方文档 DatetimePicker 选择器 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 (uviewui.com) 二、完成的效果 之前使用的是Calendar 日历 这个太耗性能了&#xff0c;直接页面卡顿&#xff0c;所以就换成以上选择器了 三、代码 <u-datetime-p…

Spring Boot集成fastdfs快速入门Demo

1.什么是fastdfs FastDFS 是一个开源的高性能分布式文件系统&#xff08;DFS&#xff09;。它的主要功能包括&#xff1a;文件存储&#xff0c;文件同步和文件访问&#xff0c;以及高容量和负载平衡。主要解决了海量数据存储问题&#xff0c;特别适合以中小文件&#xff08;建议…

UDP文件传输工具之UDP怎么限流

UDP&#xff08;用户数据报协议&#xff09;以其低延迟和高速度的特点&#xff0c;在实时应用和大数据传输中扮演着重要角色。然而&#xff0c;UDP作为一种无连接的协议&#xff0c;并不保证数据包的顺序、完整性或可靠性。 因此&#xff0c;企业在寻求一种方式&#xff0c;有…

PCA(Principal Component Analysis,主成分分析)与矩阵X的协方差矩阵之间的联系

PCA&#xff08;Principal Component Analysis&#xff0c;主成分分析&#xff09;是一种常用的降维技术&#xff0c;用于将高维数据集投影到低维空间中。在PCA中&#xff0c;投影方程将原始特征向量 ( x 1 , x 2 , … , x p ) (x_1, x_2, \ldots, x_p) (x1​,x2​,…,xp​)映射…

服务器基本故障和排查方法

前言 服务器运维工作中遇到的问题形形色色&#xff0c;无论何种故障&#xff0c;都需要结合具体情况&#xff0c;预防为主的思想&#xff0c;熟悉各种工具和技术手段&#xff0c;养成良好的日志分析习惯&#xff0c;同时建立完善的应急预案和备份恢复策略&#xff0c;才能有效…

45、二叉树-二叉树的右视图

思路 层序遍历 从左向右遍历每一层取最后一个数&#xff0c;代码如下&#xff1a; public List<Integer> rightSideView(TreeNode root) {if (rootnull){return new ArrayList<>();}Queue<TreeNode> queue new LinkedList<>();List<Integer> …
最新文章