点击下方卡片,关注“具身智能之心”公众号
编辑丨具身智能之心
本文只做学术分享,如有侵权,联系删文
>>
更多干货,欢迎加入国内首个具身智能全栈学习社区:(戳我),这里包含所有你想要的。
一、写在前面&背景
神经渲染(NERF/3DGS)引发了三维重建技术的革命,目前已经在辅助驾驶/具身智能领域得到大量应用。NERF和3DGS使用神经网络表达空间,其在新视角合成方面的优越表现直击辅助驾驶/具身智能仿真的一大痛点:传感器仿真。如果这一类深度学习技术能够推广应用,就能够很大程度上解决传统计算机图形学渲染出的图像缺乏真实性的问题,可以广泛应用在算法的闭环测试和训练中。
目前已经有一些研究项目在围绕NERF和3DGS技术打造全新的面向闭环测试的仿真框架。然而完全新开发一个仿真框架,使其具有现行场景仿真软件类似的功能将会有巨大的工作量。因此另一个应用神经渲染新技术的思路是:将NERF和3DGS训练出的模型嵌入到现有仿真软件的框架中去,在保证实时渲染的前提下,同时能够应用仿真软件已有的3D数字资产和算法接口等工具链。
在NERF和3DGS的研究兴起之初,就已经有相关的工程工作旨在将训练好的模型嵌入到现行游戏引擎的渲染框架中去,例如LumaAI的3DGS插件就可以将训练出的高斯点云ply插入到基于Unreal的CARLA。而在今年,具身智能领域广泛使用的仿真软件,来自NVIDIA的Isaac Sim也在软件中支持了神经渲染技术,具体信息可以参考文末。
本文将结合以上链接,展现在Isaac Sim中插入3DGS模型的具体流程,最终可以不仅让3DGS模型成为仿真环境的静态背景,还可以成为仿真环境中动态可交互的物体。
NVIDIA在开源项目中提出了自己的三维高斯渲染方法,我们可以在使用该方法建立三维高斯模型的同时,输出能够在Isaac Sim中渲染的usdz模型。另外,3DGRUT也提供了工具,可以让我们将用其他3DGS类方法建立的高斯点云ply转化成usdz模型,详见参考。
3DGRUT生成的usdz模型文件可以直接解压缩,解压出的文件夹内包含default.usda、gauss.usda等描述文件和一个nurec格式的模型文件,这些文件将会在下文描述的过程中使用。
二、静态背景
需要注意的是,Isaac Sim的神经渲染功能NuRec只能在5.0.0以上的软件版本(>Omniverse Kit 107.3)中使用。按照官方中的方法安装好之后,打开gui界面,继续以下操作:
在下方Content栏内导航到上一节提到的3DGRUT生成的usdz模型解压后的文件夹中,将gauss.usda直接拖动到上方Stage中,也可以右键gauss.usda选择将其插入到Stage中:等待片刻后,就可以看到你使用3DGRUT方法得到的三维高斯模型出现在了Isaac Sim中!
本文完。
:)
显然,这样做是不够的。3DGRUT生成的模型,在Isaac Sim中仅仅是一个能够被“渲染”出的对象,也就是说只具备视觉特征,不具备任何物理特征。当然,如果你仅仅想用三维高斯模型做一个单纯的静态背景,那到此就已经足够了。但如果你想让机器人对这一团高斯点云“看得见”也“摸得着”,我们还要解决一些其他问题。
所幸在此时此刻,在3DGS类的方法中提取场景mesh的方法已经有很多,在此我选择了作为提取mesh的方法。在以下视频中,我选择了mipnerf360中的garden场景作为静态背景渲染的范例。
首先用3DGRUT进行训练,并生成garden的usdz模型。然后使用2DGS建立garden的mesh。如上文所述将3DGRUT生成的usdz模型导入Isaac Sim后,可以继续操作导入mesh:在Isaac Sim工具栏点击File->Import,接下来选择garden的mesh(ply格式文件),点击Import,之后在右侧Stage栏中就可以看到导入的fuse_post这个对象,且该对象包含有一个mesh。
但因为不同方法的尺度问题,我们还需要调整mesh的scale,以便和usdz模型的渲染结果匹配。同样,我们也需要调整mesh的位姿,使其能尽量贴近usdz的渲染结果。
下面是一步关键操作:将usdz模型与对应的mesh进行绑定。在gauss的Property中选择Raw USD Properties,找到其中的proxy,点击Add Target,选择fuse_post中的mesh。最后勾选上omni:nurec:useProxyTransform这个特性,将渲染结果和mesh最终对齐。
在上面的视频中,我们在仿真环境中插入一个球体,开始仿真后,发现球体穿过了garden的地面继续下落,这显然和我们预想的不一样!那是因为我们还没有对导入的模型添加物理属性。右键选择mesh,在Add中找到Physics,选择Collider,给这个mesh增加碰撞属性。
接下来在mesh的Property中勾选Matte Object,这将使拥有mesh的usdz模型在仿真环境中具有光影交互的效果,这还需要和DomeLight光照配合使用。为了避免不必要的mesh反光,我们可以给mesh添加一个OmniPBR的材料,并在材料特性中将Reflectivity中的Specular降到最低。
经过这一番操作,让我们再次运行仿真,我们可以明显观察到球体在渲染模型上的投影,并且先后落在桌面和地面上。
这个建立的场景可以保存为一个usd文件,方便我们后续继续编辑和使用。
三、动态物体
至此,一个机器人仿真环境的背景已经完成。那么我们是否能够更进一步,让3DGS的建模结果变成仿真环境中的动态物体呢?其实,这仅仅只剩一步之遥!
在这一节中,我将使用mipnerf360数据集中的kitchen场景作为示例,我将把kitchen中桌子上的神经渲染经典物品乐高推土机抠出来作为动态物体导入仿真环境。由于3DGRUT方法不直接生成ply文件,所以我选择原生的3DGS训练了kitchen场景,并选择了一个在线对ply进行编辑,最终获得推土机的点云ply,如下图:

上面编辑后的ply就可以经过3DGRUT的处理,转化成usdz模型文件。2DGS生成的mesh点云也可以经过类似的处理将推土机抠出来。
接下来的操作和第二节类似,如上面的视频所示,经过导入usdz,导入mesh,绑定mesh和usdz之后,我们发现没有添加足够物理属性的模型仍然无法和仿真世界交互。所以在此我们可以给mesh添加一个Rigid Body with Colliders Preset的属性,而在增加了Rigid Body的物理属性后,我们就不难给这个物体增加更多的如质量等物理属性了。最终,推土机和球体以及地面产生了碰撞交互。
我们可以把以上方法导入的推土机放入garden场景看一下效果:3DGS生成的模型之间、模型和仿真环境原生物体间产生了动态交互。
仿真背景换成mipnerf360中的room场景的效果如以上视频所示。
Stage窗口的右上角实时显示了当前的计算速度、资源消耗等情况,可以看出显存占用不大,且即使是在一个3090的显卡上,计算的fps也是相当不错的。
四、未来:
NuRec技术为3DGS模型在仿真环境中的应用提供了便捷方法,我们可以看到,使用3DGS模型制作仿真环境中的静态背景和动态物体已有了相对成熟的流程。但本文还没有探究的问题包括:
在仿真环境渲染过程中3DGS模型间的光影交互关系问题:从视频4和视频5中可以看到,推土机并没有像人工创建的球体一样在神经渲染的背景中投下阴影。
包含神经渲染的仿真环境测试具体算法的效果:例如将机器人放置在room环境中,我们给VLA算法下达“捡起地毯上的乐高推土机”会怎么样?
此外,如果真的想要严肃考虑神经渲染在具身智能仿真中的技术落地,笔者认为还需要解决的问题有:
包含神经渲染的仿真环境如何快速准确提供rbg图像外的真值信息,如图像分割、对象标注标签等。
如果使用神经渲染技术创建可被操作的动态物体,如何获取物体的其他物理属性真值,如硬度、摩擦系数、质量等,是个更为棘手的问题。
如果在仿真中包含更多神经渲染的对象、更大规模的神经渲染场景,能否进一步提高计算效率。
参考链接:
[1]https://docs.omniverse.nvidia.com/materials-and-rendering/latest/neural-rendering.html-and-importing-nurec-primitives
[2]https://developer.nvidia.com/blog/how-to-instantly-render-real-world-scenes-in-interactive-simulation/
[3]https://github.com/nv-tlabs/3dgrut
[4]https://docs.isaacsim.omniverse.nvidia.com/5.0.0/index.html
[5]https://github.com/hbb1/2d-gaussian-splatting
[6]https://github.com/graphdeco-inria/gaussian-splatting
[7]https://superspl.at/editor