2016-09-17 92 views
4

如何在使用自定義着色器時在SceneKit中的節點上將視頻渲染爲漫反射紋理?這聽起來像一個簡單的事,但:iOS10 + SceneKit:使用自定義着色器渲染視頻

  • SceneKit元素不支持AVPlayerLayer作爲輸入紋理(SO
  • 替代方案:用SpriteKit場景與SKVideoNode但
      • 由於iOS的10,用OpenGL渲染,只要一個SpriteKit場景涉及失敗(SO)我已經填補了雷達
      • 我無法弄清楚如何在使用Metal時將制服傳遞給着色器修改器(SO)事情與openGL完美配合(在iOS 9上,當SpriteKit工作時)在那裏出乎意料的非常少的文檔。
      • SCNProgram似乎只要一個視頻參與SceneKit場景(SO)事情做工精細用相同的設置,但不視頻
    • 轉化的視頻輸出到CGImage,將它傳遞給一個CALayer的失敗,並將此圖層傳遞到SceneKit視頻節點(不涉及SpriteKit)這是詳細的here,但只要視頻有點大,就不是一個可行的解決方案,因爲所有的輸出都被複制到圖像上,並且這是昂貴的。

我仍然很不願意擺脫SceneKit,因爲它處理了很多opengl/metal的令人討厭的低級別事情,但是我現在無法正常工作......

作爲附加壞消息,它看起來像SpriteKit與Metal一起使用時存在內存泄漏,並且它保持活動的SceneView,因此所有父視圖和附加到它們的所有東西...

你可以找到這個問題的複製here ,並且更簡單一個here

+1

去年SpriteKit向前邁進了一步(一定是有所改進),並且大概有三個步驟(iOS 9)。蘋果開始解決這些問題花了好幾個月的時間。儘管有許多具體的,經常性的和相互矛盾的投訴,但他們並未公開承認問題。 – Confused

+1

iOS 10看起來像是SceneKit回到了幾步,還有一次前進(PBR)。 SceneKit擁有1/20(或更少)的SpriteKit用戶。所以他們可能需要一整年的時間來解決問題。說了這麼多,在SceneKit上工作的兩個人在這些論壇中都很活躍。 – Confused

+1

你知道嗎?如果問題來自SceneKit或SpriteKit,我怎麼能有一個想法? – Guig

回答

3

無法解決此問題,我編寫了自己的庫來模擬SceneKit的某些功能:https://github.com/team-pie/DDDKit

+0

這不會提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/15212577) –

+1

我是作家。把它放在這裏可以提供更多的可見性,這種替代方法雖然不是對問題的直接回答,但卻解決了僅使用SceneKit解決帶着色器的3D渲染原始問題的問題。我沒有接受這個答案,也不會這樣做。當有人提供完整的答案時,我會刪除這個迄今爲止最好的答案。如果你有更好的答案,請繼續! – Guig

+0

@Guig看起來像一個偉大的圖書館 - 忽略堆棧溢出警察,他們是絕望的。 – Jordan