我想创建一个全息影像,通过 kinect 导出到全息影像。但它非常慢。
我使用本教程收集点云数据,使用此库将数据导出为 .obj 格式的 3D 对象。导出 obj 的库不接受点,所以我不得不画小三角形。我将文件.obj .png和.mtl保存在我的本地xampp上。
接下来,我使用 Unity 脚本和 WWW 对象下载文件。我还使用 Unity 资源商店中的运行时 OBJ 导入器在运行时创建 3D 对象。
最后一部分是在全息上导出 unity 应用程序。(我接下来会这样做(。
但在此之前, 该过程正在工作,但非常缓慢。我希望全息影像是流畅的。浪费了很多时间:
- 获取 Kinect 的深度和 RGB 数据
- 将数据导出到 obj PNG 和 MTL 文件
- 尽可能频繁地在 Unity 上下载文件
- 渲染文件
我想到了流式处理,但 Unity 需要一个完整的 obj 文件来渲染吗?如果我将.png压缩到.jpg会获得一些时间吗?
你有一些指示可以帮助我吗?
目前,您的问题的措辞方式令人困惑:不清楚您是要记录稍后在 Unity 中加载和渲染的点云,还是想以某种方式将具有对齐的 RGB 纹理的点云近乎实时地流式传输到 Unity。
您初次尝试使用的是处理。
在记录数据方面,我建议使用SimpleOpenNI库,它可以将深度和RGB数据记录到.oni文件中(请参阅RecorderPlay示例(。
录制后,您可以循环遍历每个帧,并为每个帧将顶点存储到文件中。
在保存到.obj方面,您需要将点云转换为网格(在3D中对顶点进行三角测量(。
另一种选择是将点云存储为.ply等格式。 您可以在此答案的处理中找到有关写入 .ply 文件的更多信息
在流式传输数据方面,这将很复杂:
- 如果您流式传输所有顶点,则需要大量数据:最多 921600 个浮点数 ((640 x 480 = 307200( * 3( 如果您同时流式传输深度(11 位 640x480(
- 和 RGB(8 位 640x480(图像,那将是更多的数据。 一种选择可能是仅发送具有深度和整体跳过点的顶点(例如,每 3 个点发送一次(。在发送数据方面,您可以尝试 OSC
在 Unity 中获得点后,您应该能够在 Unity 中渲染点云
就网络性能而言,理想的是深度数据的编解码器(压缩器/解压缩器(。到目前为止,我还没有使用过一个,但是快速操作我看到有这样的选项(非常日期(。 你需要做一些研究,看看已经有哪些 kinect v1 深度流式处理库,测试并看看什么最适合你的方案。 理想情况下,如果库是用 C# 编写的,则有机会使用它来解码 Unity 中接收到的内容。