2017-07-31 47 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

......否則,您可能需要查找深度圖編解碼器通過網絡使用,如果你仍然在學習,這是一個更加核心的問題,但是編解碼器的重點是它們處理基本的數據壓縮/解壓縮。如果答案是有幫助的,可以隨意投票和/或標記爲你認爲合適的;) –