【三维重建】Proc-GS:使用3DGS的程序性城市建筑生成

news2025/3/12 15:22:29

在这里插入图片描述


标题:《Proc-GS: Procedural Building Generation for City Assembly with 3D Gaussians》
项目:https://city-super.github.io/procgs/
来源:香港中文大学;上海人工智能实验室 等

文章目录

  • 摘要
  • 一、 程序代码定义 (Procedural Code Definition)
  • 二、资产获取 (Asset Acquisition)
  • 三、资产组装(Asset Assembly)
  • 四、实验


摘要

  建筑是城市的主要组成部分,通常以门窗等重复的元素为特色

传统建模(又叫过程化三维资产构建)本质是通过脚本对资产的组合进行建模,而且创建是劳动密集型的,需要专门的技能来开发设计规则,生成的建筑物模型不够真实。过程化建模相关的软件有很多,例如:

  • 地形生成:World Machine
  • 城市生成:CityEngine、SceneCity
  • 植物生成:SpeedTree、Terragen
  • 材质生成:Substance
  • 特效生成:Houdini
  • 体素生成:VoxelFarm
  • Blender发布的Geometry Node

效果如下:

在这里插入图片描述

  • 测绘/GIS行业:CityEngine (现属于ESRI),根据矢量数据(如建筑物底面和道路中心线)快速生成城市三维模型:

在这里插入图片描述

  高斯泼溅(Gaussian Splatting)建模是一种基于点云的渲染技术,通过高斯分布模拟光散射,适合实时渲染和大规模场景,并具有真实的场景还原精度,但不生成传统意义上的三维模型(mesh格式)。且模型难以编辑

  Proc-GS建模是第一个能够使用3DGS实现过程建模的管道。

Proc-GS框架包括两个阶段: (1) 资产获取阶段 ,指导3DGS遵循预定义的布局来约束它的优化。例如,当使用3DGS建模时,首先生成它的过程代码,或者手动或使用现成的分割模型。此代码用于为建筑的每个基本资产初始化一组高斯分布。然后根据程序代码对这些特定资产的高斯进行组装,并使用渲染损失对组装的高斯进行整体进行优化,如图3。重复的基本资产将同步更新;为了捕捉几何中各种细微变化,我们还学习了每个资产的方差代码。(2) 资产组装阶段 ,我们使用程序代码来操作基础资产,生成具有不同几何结构和逼真外观的建筑。新创建的架构可以与Houdini软件集成,允许可伸缩的场景组合与直观的控制。

  通过利用shared foundational assets, 显著减少了模型的大小,实现了对建筑组装的精确控制。为了展示Proc-GS的能力, 从City Sample中创建了MatrixBuilding数据集,包含了17个标志性建筑的多视图图像和程序代码。我们的Proc-GS方法通过组合来自不同建筑的资产,实现了灵活的几何编辑和创建新的结构,允许用户生成巨大的、定制的虚拟城市。我们还将Proc-GS迁移到现实世界的建筑中,并支持从实际结构转换为虚拟资产,支持可扩展的、逼真的城市生成,有利于游戏、自动驾驶和具体化的人工智能等。

一、 程序代码定义 (Procedural Code Definition)

  程序建模被广泛用于游戏场景中的构建生成,如UE5 中的城市样本,通过利用建筑的结构化性质和重复性资产。建筑被分层分解为不同 l e v e l level level,相同的 l e v e l level level可能会重复,如图2中的 l e v e l 2 、 3 和 5 level 2、3和5 level235。每个 l e v e l level level都由基本资产组成,如window、corner和piller,其中都有相同的资产在level中重复出现,如 l e v e l 1 level1 level1 中的CE和W1。因此 ,建筑可以由 程序代码字符串(procedural code string)和一组基本资产来表示,其中基本资产是由艺术家手工制作。

在这里插入图片描述

  本文提出了一种从多视图图像中提取基础资产的替代方法。为了简化问题,我们首先假设提供了GroudTruth的程序代码。我们创建了基于CitySample中的17栋建筑的矩阵建筑数据集,人工制作的模拟来自纽约、芝加哥和旧金山等城市的建筑风格。每个场景包括密集的多视图图像,GroudTruth的像机位姿,和GroudTruth的程序代码。框架可以在合成世界上运行,并且对于现实世界的场景也很实用。我们发现了 一种从真实场景中获得过程代码的有效方法 首先训练2D-GS [20]来获得几何上精确的点云和网格。随后使用 [CVPR 2022:Finding good configurations of planar primitives in unorganized point clouds]方法自动估计建筑立面。对于每个面,渲染一个直接面向建筑立面的图像,并在二维图像上标注过程代码。然后将二维过程代码投影到网格上,得到三维过程代码

  

二、资产获取 (Asset Acquisition)

  我们的目标是在3D-GS 的训练过程中自动提取这些3D基础资产。为了实现这一点,我们假设程序代码是可用的,无论是来自MatrixBuilding数据集的GroudTruth代码,还是来自真实场景的估计代码

  每个基础资产的属性

  • 资产边界框的大小 ( x e , y e , z e ) (x_e, y_e, z_e) xe,ye,ze
  • 局部坐标中的轴位置 ( x c , y c , z c ) (x_c, y_c, z_c) xc,yc,zc
  • 世界坐标系中 , K K K 个实例的变换集合:{ [ R 1 , T 1 , S 1 ] 、 [ R 2 , T 2 , S 2 ] , . . . , [ R K , T K , S K ] [R_1,T_1,S_1]、[R_2,T_2,S_2],...,[R_K,T_K,S_K] [R1,T1,S1][R2,T2,S2],...,[RK,TK,SK]},其中 T ∈ R 3 × 1 T∈R^{3×1} TR3×1为平移向量, R ∈ R 3 × 3 R∈R^{3×3} RR3×3为旋转矩阵, S ∈ R 3 × 1 S∈R^{3×1} SR3×1是比例因子。

  高斯初始化。在世界坐标系的原点处,初始化每个基础资产的枢轴,(枢轴是资产自己的局部坐标系的原点):第 i i i个基本资产的边界框表示为 ( x m i n i , y m i n i , z m i n i , x m a x i , y m a x i , z m a x i ) (x^i _{min}, y_{min}^i, z_{min}^i, x^i_{max}, y_{max}^i, z_{max}^i) xmini,ymini,zmini,xmaxi,ymaxi,zmaxi, 其中 x m i n i = x c i − x e i 2 x^i _{min} = x^i _c−\frac {x^i _e}{2} xmini=xci2xei x m a x i = x c i + x e i 2 x^i _{max} = x^i _c+\frac {x^i _e}{2} xmaxi=xci+2xei。合成场景和真实世界场景的操作有细微的差别。

  合成场景中,每个由M个基本资产组成的建筑,初始化 N N N个点。对于第 i i i项资产, N i N^i Ni点在其边界框内随机初始化,由资产的边界框体积与所有资产的总体积的比值决定,如公式4:

在这里插入图片描述

   方差资产 :不同场景的基本资产实例化,在外观和几何形状上都会有微小的差异,因此我们为第 i i i个基础资产的每个实例化初始化一个方差资产。对于第j个实例化,我们首先在第i个基资产的边界框内随机初始化 N i N^i Ni点。然后,我们更新了该方差资产中三维高斯分布的中心 µ µ µ、旋转 R R R和尺度 S S S,如公式5。

对于真实场景,给定具有 K K K个实例的第 i i i个基本资产,我们应用变换映射其边界框,获得所有K个实例的边界框。对于每个实例化,我们过滤其边界框内的SfM点,以进行方差初始化。然后使用第i个基本资产的逆转换将这些点云转换回世界坐标原点并连接起来。最后,我们将生成的点云均匀降采样K因子,以初始化第i个基本资产。

在这里插入图片描述

   用程序代码渲染。图3(1)说明了渲染方式。首先根据程序代码组装基本资产。第 i i i个基本资产具有一组三维高斯 A i A_i Ai和变换{ [ R 1 i , T 1 i , S 1 i ] , [ R 2 i , T 2 i , S 2 i ] , … , [ R j i , T j i , S j i ] , . . . , [ R K i , T K i , S K i ] [R_1^i,T_1^i,S_1^i ],[R_2^i,T_2^i,S_2^i ],…,[R_j^i,T_j^i,S_j^i ],...,[R_K^i,T_K^i,S_K^i ] [R1i,T1i,S1i],[R2i,T2i,S2i],,[Rji,Tji,Sji],...,[RKi,TKi,SKi]}。对于第 i i i个基本资产的第 j j j个实例高斯,除中心 µ µ µ、旋转 R R R和刻度 S S S外,三维高斯性质保持不变,其更新为

在这里插入图片描述

  根据程序代码实例化所有的基础资产,并添加方差资产。然后,整个建筑的三维高斯分布被输入光栅化器来渲染图像,由训练视图监督。优化过程中,来自重复实例的梯度被反向传播到共享的基础资产和各自的方差资产,从而细化高斯参数。

在这里插入图片描述

   高斯的Bbox自适应控制。3DGS的内部排序可能是混乱的,虽然有好的渲染结果,但基本资产的边界会出现无序,使后续的编辑和生成变得复杂(图6)。为了解决这个问题,我们除了致密化和修剪外,还使用 Adaptive Clamp operation involves 操作 来增强原始3DGS(图4)。对于每个基本资产,操作包括:(1)Clamp Scale:使用稍大一点的“软”边界框,以避免过度clamping。如果一个高斯超过了软盒的边界,它的尺度就会减半。(2)Clamp Position:将超过边界框的高斯的中心拉回其边缘。基础资产和方差资产每100次迭代执行一次,以保持有序的边界并促进有效的提取和操作。

在这里插入图片描述

三、资产组装(Asset Assembly)

  从多视图图像中提取基本资产后,我们可以操作过程代码来生成新的建筑。组装过程由一个 building generator 和一个city layout generator组成。

  建筑生成器。为了进行建筑生成,我们首先分析了原始建筑中每层内和楼层之间的基础资产的排列模式,并通过GPT-4o 将它们转换为常规的程序代码,并在提示中提供了几个示例。实例过程见图10。在常规程序代码中,指定了楼层内部和楼层之间可重复和可伸缩的组合。具体地说,()中的组合被设计为可重复的元素,而标记有∗的资产则可扩展,以适应建筑的大小。随后,我们可以根据程序代码和指定的建筑尺寸(例如,长度、宽度和高度)来放置资产,以生成具有不同安排和尺寸的新建筑。值得注意的是,在构建生成过程中,每个基本资产都被随机分配了一个相应的方差资产,以增强多样性和真实性。此外,我们还可以从不同建筑来源提取的基础资产中创建新建筑。

在这里插入图片描述

  城市布局生成器。对于城市生成,用户首先选择城市地图的边界点(紫色边界)和主要道路的端点(绿线),如图3 (2)所示。随后,我们根据主要道路将城市划分为几个相互连接的街区,每个街区被随机分配给区域特征(如建筑规模的分布)。然后,我们生成垂直的二级道路,并根据预定义的规则确定建筑位置、拓扑结构和尺寸。最后,我们在道路上随机放置装饰元素,如路灯、垃圾桶和邮箱,这些也由3D-GS收集。

四、实验

  数据集。CitySample[1]的建筑数据集,包括17栋建筑的密集多视图图像及其相应的GroundTruth程序代码。按照MatrixCity 禁用运动模糊,并在渲染过程中使用了抗锯齿,以实现尽可能高的图像质量。 附录a提供了每个建筑的细节和摄像机捕捉轨迹。我们还在无人机捕获的三个真实场景上做了方法验证。

  细节。3D-GS是我们的主要基线,都经过30k的迭代训练,稠密化到15k;合成数据初始化的高斯数 N = 10 k N=10k N=10k,如公式4。3DGS初始化与由随机初始化的基本资产组装的建筑。软边界框超出边界框20厘米 λ S S I M λ_{SSIM} λSSIM=0.2;在单个RTX 3090 GPU上训练。

  指标。新视图合成采用: PSNR,SSIM [43]和LPIPS ;还报告了高斯模型的数量来评估模型的紧致性。这些指标在所有场景中取平均值,以进行定量比较。对于城市生成,按照EG3D [6]和CityDreamer的深度误差(DE)和相机误差(CE),以评估3D场景的几何形状和一致性。对于DE,我们利用预先训练的模型[36]来估计渲染图像的深度图,并计算归一化估计深度和渲染深度之间的 ℓ2距离。对于CE,我们首先使用半球采样的相机位姿渲染图像,然后使用COLMAP [37]估计这些位姿。摄像机误差计算为估计值和的真实pose之间的尺度不变 ℓ2损失。

在这里插入图片描述

--------------------------------------------------------------------------------------------真实数据结果--------------------------------------------------------------------------------------

  对于合成数据,Proc-GS实现了较好的新视图合成质量,同时显著减少模型大小的4倍,证明了我们的方法的有效性。对于真实世界的场景,由于其复杂的外观、几何形状和缺乏地面真实的程序代码,优化变得更具挑战性,需要更多的高斯分布的方差资产。虽然压缩率低于合成情况,但与3D-GS相比,我们的模型仍然保持着更小的尺寸。更重要的是,我们获得了灵活的控制能力,而精度仅略有下降,这在定性结果中几乎不明显(图5)

在这里插入图片描述

  

在这里插入图片描述

  

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

商业智能BI的未来,如何看待AI+BI这种模式?

昨天在和一位朋友线上聊天的时候,提了一个问题,你是如何看待AI(人工智能)BI(商业智能)这种模式和方向的,我大概来说一下我个人的看法。 以我在商业智能BI项目中接触到的行业和企业,…

25.3.12.Linux内核如何和设备树协同工作的?

1.编写设备树 cd arch/riscv/boot/dts/ 再cd到厂商,例如下述内容。 2.编译设备树(dts->dtb)通过dtc命令来转换 3.解析设备树 例如上述内容,都是对设备树的解析。 这里重点说一下内核对设备树的处理吧,因为这个内容是设备树的重点了。 从源代码文件 dts 文件开始

Flutter 基础组件 Text 详解

目录 1. 引言 2. 基本使用 3. 自定义样式 4. 文本对齐与溢出控制 5. 外边距 5.1 使用 Container 包裹 5.2 使用 Padding 组件 5.3 在 Row/Column 中使用 5.4 动态边距调整 5.5 关键区别说明 5.6 设置 margin 无效 6. 结论 相关推荐 1. 引言 Text 组件是 Flutter 中…

Torch 模型 model => .onnx => .trt 及利用 TensorTR 在 C++ 下的模型部署教程

一、模型训练环境搭建和模型训练 模型训练环境搭建主要牵扯 Nvidia driver、Cuda、Cudnn、Anaconda、Torch 的安装,相关安装教程可以参考【StarCoder 微调《个人编程助手: 训练你自己的编码助手》】中 5.1 之前的章节。 模型训练的相关知识可以参考 Torch的编程方…

爱普生可编程晶振SG-8200CJ特性与应用

在高速发展的电子技术领域,时钟源作为电子系统的“心脏”,其性能直接影响设备的稳定性与可靠性。爱普生SG-8200CJ可编程晶振凭借其优秀的频率精度、低抖动性能及广泛的环境适应性,正成为众多领域的得力之选,为各类设备的高效运行与…

ubuntu中用docker下载opengauss

1.安装docker sudo apt install docker.io2.拉取opengauss镜像 sudo docker pull enmotech/opengauss3.创建容器 sudo docker run --name opengauss --privilegedtrue -d -e GS_PASSWORDEnmo123 enmotech/opengauss:latest3.5.如果容器停止运行(比如关机了&#…

tslib

使用tslib来读取触摸屏的数据,可以得到原始数据,也可以在原始数据的基础上进行一些处理。比如有些触摸屏比较不稳定,跳动比较大,我们可以将跳动比较大的数据给删除掉 plugins里面的每个文件都会被编译成一个动态库,这些…

MoonSharp 文档三

MoonSharp 文档一-CSDN博客 MoonSharp 文档二-CSDN博客 MoonSharp 文档四-CSDN博客 MoonSharp 文档五-CSDN博客 7.Proxy objects(代理对象) 如何封装你的实现,同时又为脚本提供一个有意义的对象模型 官方文档:MoonSharp 在实际…

linux和windows之间的复制

第一步 sudo apt-get autoremove open-vm-tools第二步 sudo apt-get update第三步 sudo apt-get install open-vm-tools-desktop按y 第四步 重启虚拟机,终端下输入 rebootLinux下 按“ CtrlShiftC V ”复制粘贴 Windows下按“ Ctrl C V ”复制粘贴

在资源有限中逆势突围:从抗战智谋到寒门高考的破局智慧

目录 引言 一、历史中的非对称作战:从李牧到八路军的智谋传承 李牧戍边:古代军事博弈中的资源重构 八路军的游击战:现代战争中的智慧延续 二、创业界的逆袭之道:小米与拼多多的资源重构 从MVP到杠杆解 社交裂变与资源错配 …

javascript-es6 (六)

编程思想 面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次 调用就可以了 就是按照我们分析好了的步骤,按照步骤解决问题 面向对象 面向对象是把事务分解成为一个个对象&…

Spring AI 1.0.0 M6新特性MCP

Spring AI 1.0.0 M6新特性MCP 前言一、MCP是什么?(Model Context Protocol)二、它的发展历程三、核心架构四、MCP Java SDK的核心能力Java MCP实现遵循三层架构:MCP客户端MCP服务器总结MCP 的核心能力总结多种传输选项 搭建服务端…

【性能测试入门_01性能测试jmeter基础实操场景详解】

一、应用项目如何部署在服务器上 可以将项目进行打jar包 双击install,控制台就会打印打包的过程 最终打的包,会存放在打印的那个路径下 这个jar包,就是开发人员开发好,直接可以部署的 可以通过命令,在终端直接启动这…

跨越时空的对话:图灵与GPT-4聊AI的前世今生

(背景:虚拟咖啡厅,图灵身着1950年代西装,端着一杯热茶,GPT-4以全息投影形态坐在对面) 图灵(喝了口茶):“听说你能写诗?我当年在布莱切利园破解Enigma时&…

如何通过 Seatunnel 实现 MySQL 到 OceanBase的数据迁移同步

1. 准备传输工具 本方案采用 Apache Seatunnel(简称seatunnel)进行MySQL 到 OceanBase 的数据迁移和同步,出于对方案轻量性的考量,我们采用其内置的Zeta引擎来实现,包括全量同步、离线增量同步,以及CDC方案…

软件设计模式之简单工厂模式

目录 一.类图(手机生产) 二.代码实现 Iphone类: Vivo类: Mobile类: MobileFactory类: Client类: 一.类图(手机生产) 补充:MobileFactory也可以直接指向…

LiveGBS流媒体平台GB/T28181常见问题-视频流安全控制HTTP接口鉴权勾选流地址鉴权后401Unauthorized如何播放调用接口流地址校验

LiveGBS流媒体平台GB/T28181常见问题频流安全控制HTTP接口鉴权勾选流地址鉴权后401Unauthorized如何播放调用接口流地址校验? 1、安全控制1.1、HTTP接口鉴权1.2、流地址鉴权 2、401 Unauthorized2.1、携带token调用接口2.1.1、获取鉴权token2.1.2、调用其它接口2.1.…

Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

接口自动化入门 —— Http的请求头,请求体,响应码解析!

在接口自动化测试中,HTTP请求头、请求体和响应码是核心组成部分。理解它们的作用、格式和解析方法对于进行有效的接口测试至关重要。以下是详细解析: 1. HTTP 请求头(Request Header) 1.1 作用 请求头是客户端向服务器发送的附加…

upload-labs(1-20)详解(专业版)

目录 第1关 第2关 第3关 第4题 第5题 第6题 第7题 第8题 第9题 第10题 第11题 第12题 第13题 第1关 查看源码 在第一关是一个前端js的一个后缀识别:当不为jpg、png、gif时候出现弹窗 检查源码 将return checkFile() 改为 return ture 就可以将php顺利…