2017-07-31 44 views
-1

我想创建一个全息图,通过kinect输出到一个hololense。但速度很慢。Kinect v1与处理到.obj到统一

我使用this教程来收集点云数据,而this库使用.obj格式将我的数据导出为3D对象。导出obj的库不接受点,所以我不得不绘制小三角形。我保存我的本地xampp文件.obj .png和.mtl。

接下来,我使用统一脚本和WWW对象下载文件。我还使用unity资产商店的运行时OBJ导入器在运行时创建3D对象。

最后一部分是导出统一应用程序在一个hololense上。 (我会接下来做)。

但在此之前, 该过程正在运行,但速度很慢。我想让全息图变得流畅。大量的时间被浪费:Kinect的的

  • 采取深度和RGB数据
  • 将数据导出到一个OBJ PNG和MTL文件
  • 下载文件团结频繁地
  • 渲染文件

我认为流媒体,但没有统一需要一个完整的OBJ文件来渲染?如果我将.png压缩为.jpg会增加一些时间吗?

你有一些指导来帮助我吗?

+0

仅供参考:这听起来像你有功能代码,这只是不达到你想要的性能水平。 [codereview.se]的功能代码审查(并明确表示性能)是主题。但是,你必须真正把你的代码放在问题中(这也是一个需求)。 – Makyen

+0

谢谢,让我们说代码是非常基本的我正在使用我提到的库和教程。但我的问题是战略和知识。 –

回答

0

目前您的问题的表述方式令人困惑:目前尚不清楚您是否希望记录稍后在Unity中加载和渲染的点云,或者您想以某种方式将点云与对齐的RGB纹理以接近实时的方式流到统一。

您最初的尝试正在使用处理。

在记录数据方面,我推荐使用SimpleOpenNI library,它可以将深度数据和RGB数据记录到.oni文件(请参阅RecorderPlay example)。

一旦你有一个录音,你可以遍历每一帧,并为每个帧存储顶点到一个文件。

就保存到.obj而言,您需要将点云转换为网格(以三维方式对顶点进行三角化)。

另一种选择是将点云存储为像.ply这样的格式。 您可以找到有关this answer

写在处理.ply文件流数据方面的详细信息,这将是复杂的:

  • 如果传输所有顶点它,这是一个很大的数据:高达921600浮点数((640 x 480 = 307200)* 3)
  • 如果您同时传输深度(11bit 640x480)和RGB(8bit 640x480)图像,将获得更多数据。 一种选择可能是仅发送具有深度和整体跳过点的顶点(例如,每隔3个点发送一次)。在发送数据方面,你可以尝试OSC

一旦你在Unity获得积分,你应该能够render a point cloud in Unity

什么是在网络性能方面的理想是一个编解码器(压缩/解压缩)为深度数据。到目前为止,我还没有使用过,但是做得很快,我看到有诸如this one(非常约会)之类的选项。 您需要做一些研究,看看已经有哪些kinect v1深度流媒体库,然后测试并了解哪种方案最适合您的场景。 理想情况下,如果库是用C#编写的,那么您就有机会使用它来解码Unity中收到的内容。

+0

谢谢你的回答, 是的我想要实时传输看到在hololense全息图。 我使用Shiffman的图书馆,因为它是第一个,它的工作原理。你的意思是说简单的开放式教程更快吗? 我使用ObjExporter,但它不适用于点,所以我必须创建一些三角形来保存.png文件和.mtl文件.obj文件。你认为.ply方法更好吗? 我想找到瓶颈,它是我的计算器,是Unity还是Processing。我仍然在学习,非常感谢你的指点。 –

+0

我推荐SimpleOpenNI的唯一原因是内置序列化:能够轻松保存/加载深度+ RGB流。如果你需要这个实时,这是没有真正的理由。使用KinectP5库,您可以很好地掌握pointcloud数据。尝试将有效点云的低分辨率版本进行流式传输并在Unity中渲染(作为顶点,而不是三角网格)。看看表现如何。如果在视觉效果方面没什么问题,可以查看流媒体纹理(无论是整体还是仅用于lo-res 3d点的值列表) –

+0

......否则,您可能需要查找深度图编解码器通过网络使用,如果你仍然在学习,这是一个更加核心的问题,但是编解码器的重点是它们处理基本的数据压缩/解压缩。如果答案是有帮助的,可以随意投票和/或标记为你认为合适的;) –