使用自定义着色器时,如何在SceneKit中的节点上将视频渲染为漫反射贴图?这听起来很简单,但是:
- SceneKit元素不支持
AVPlayerLayer
作为输入纹理(SO)
- 替代方案是:
- 使用带有SKVideoNode的SpriteKit场景但是:
- 自从iOS 10以来,只要涉及SpriteKit场景(SO),使用openGL渲染就会失败,我已经填满了雷达
- 在使用Metal(SO)时,我无法弄清楚如何将制服传递到着色器修饰符。事情与openGL完美配合(在iOS 9上,当SpriteKit正在工作时)令人惊讶的是很少有文档在那里这一点。
- 当SceneKit场景中涉及视频时,SCNProgram似乎失败(SO)没有视频的相同设置工作正常
- 将视频输出转换为CGImage,将其传递给CALayer,并将此图层传递给SceneKit视频节点(不涉及SpriteKit)这是详细here,但视频不是可行的解决方案有点大,因为所有输出都被复制到图像,这是昂贵的..
我仍然不愿意离开SceneKit,因为它使用opengl / metal来处理很多讨厌的低级别事情,但我现在无法让事情发挥作用......
作为一个额外的坏消息,看起来SpriteKit在与Metal一起使用时会出现内存泄漏,并且它会使SceneView保持活动状态,因此所有父视图和附加到它们的所有内容......
您可以找到此问题的复制品here,以及更简单的here: