2013-04-24 149 views
0

我可以在頁面上加載HTML 5視頻元素,將它們映射到THREE.Texture,並在3D中使用MeshBasicMaterial在立方體上顯示視頻紋理。 (所有的視頻設置爲自動播放和循環)。 每個動畫/渲染週期,對於每個紋理我檢查:Three.js視頻紋理和GPU

if (video.HAVE_ENOUGH_DATA) 
    texture.needsUpdate = true 

當我打開視頻越來越多,以這種方式幀率繼續下降玩。如果我能做些什麼來提高性能呢?我是否需要將視頻作爲DOM元素加載?無論如何,我可以利用片段着色器/ GPU並行化?

回答

3

這裏有幾件事我會嘗試...

  1. 加載JavaScript中的視頻元素,沒有附加到DOM。如果視頻是display: none,它可能沒有太大的區別,但它不會傷害。

  2. 縮小視頻。在這種情況下,具有良好的壓縮比是不夠的,因爲瓶頸很可能會將未壓縮的視頻幀複製到GPU內存。

  3. 在每一幀,檢查,看看是否.currentTime每個視頻已經改變。如果您在幀之間,則可能不需要更新紋理。您最終可能會失去一幀,因爲即使在更新currentTime之後,更新視頻幀有時也需要幾毫秒。但是,這通常只有在視頻暫停時纔會顯着。通常情況下,我有一個特殊情況,如果視頻暫停,我會在每一幀持續更新半秒左右。

  4. 您可以嘗試將視頻尺寸設置爲2的冪。這可能取決於GPU硬件,但測試它並不會造成傷害。

  5. 如果視頻長度相同並且在同一時間線上播放,則可能有助於將它們合併爲一個,將其全部加載到單個紋理中並相應地設置UV座標。

    • 複製視頻幀到GPU內存:

更一般地,你可能應該與有關。沒有更多,也沒有比必要的更大。

  • 降低瀏覽器管理視頻文件的開銷