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 ...
- usando una escena de SpriteKit con un SKVideoNode pero:
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í :