vegas renderizar renderizado rapido que pro mejor formato como video opengl-es sprite-kit scenekit metal

renderizar - iOS10+SceneKit: renderiza un video con sombreador personalizado



mejor renderizado sony vegas pro 15 (1)

Al no poder resolver este problema, escribí mi propia biblioteca que imita algunas funcionalidades de SceneKit: https://github.com/team-pie/DDDKit

¿Cómo puedo renderizar un video como una textura difusa en un nodo en SceneKit mientras uso un sombreador personalizado? Esto suena como algo simple de hacer, pero:

  • Los elementos SceneKit no son compatibles con AVPlayerLayer como textura de entrada ( SO )
  • las alternativas son:
    • usando una escena de SpriteKit con un SKVideoNode pero:
      • Desde iOS 10, la representación con OpenGL falla tan pronto como una escena de SpriteKit está involucrada ( SO ) he llenado un radar
      • No pude imaginar cómo pasar uniformes a un modificador de sombreado cuando usé Metal ( SO ). Las cosas funcionaban perfectamente con OpenGL (en iOS 9, cuando SpriteKit estaba funcionando). Sorprendentemente, hay muy poca documentación sobre eso.
      • SCNProgram parece fallar tan pronto como un video está involucrado en la escena SceneKit ( SO ) Las cosas funcionan bien con la misma configuración sin video
    • transformando la salida de video a CGImage, pasándola a un CALayer, y pasando esta capa al video nodo SceneKit (no SpriteKit involucrado) Esto se detalla aquí , pero no es una solución viable tan pronto como el video es un poco grande, porque todos la salida se está copiando a la imagen y esto es costoso ...

Todavía soy bastante reacio a salir de SceneKit, ya que maneja muchas de las cosas molestas de bajo nivel con opengl / metal, pero no puedo hacer que las cosas funcionen ahora mismo ...

Como una mala noticia adicional, parece que SpriteKit tiene pérdida de memoria cuando se usa con Metal, y que mantiene vivo el SceneView, y por lo tanto todas las vistas principales y todo lo que se les atribuye ...

Puede encontrar una reproducción de este problema aquí , y una más simple aquí :