【发布时间】:2017-01-25 07:34:13
【问题描述】:
在使用自定义着色器时,如何在 SceneKit 的节点上将视频渲染为漫反射纹理?这听起来很简单,但是:
- SceneKit 元素不支持
AVPlayerLayer作为输入纹理 (SO) - 替代方案是:
- 使用带有 SKVideoNode 的 SpriteKit 场景,但是:
- 将视频输出转换为 CGImage,将其传递给 CALayer,并将该层传递给 SceneKit 视频节点(不涉及 SpriteKit)这是详细的here,但一旦视频是有点大,因为所有输出都被复制到图像中,这很昂贵..
我仍然不太愿意退出 SceneKit,因为它使用 opengl/metal 处理了很多烦人的低级事情,但我现在无法让事情正常工作......
另外一个坏消息是,SpriteKit 在与 Metal 一起使用时似乎存在内存泄漏,并且它使 SceneView 保持活动状态,因此所有父视图以及附加到它们的所有内容......
【问题讨论】:
-
去年 SpriteKit 向前迈进了一步(一定是有所改进),大约向后退了三步(iOS 9)。苹果花了好几个月才开始解决这些问题。尽管有许多具体的、反复出现的和匹配的投诉,但他们从未公开承认这些问题。
-
iOS 10 看起来该轮到 SceneKit 后退几步了,然后向前一步 (PBR)。 SceneKit 拥有 SpriteKit 用户的 1/20(或更少)。所以他们可能需要一整年的时间来解决问题。话虽如此,在 SceneKit 上工作的两个人都活跃在这些论坛中。
-
你知道我怎么知道问题是来自 SceneKit 还是 SpriteKit?
-
并非如此,这在很大程度上取决于您如何做事,以及实现这一目标的正确方法有多模糊。 Sprite Kit 的 Apple 文档很差。 SceneKit 的文档很糟糕。
-
这没有直接的帮助,但是……如果你喜欢它,再提交一次,我们就可以开始记录我们学到的关于 SceneKit 的任何东西。我不是 SO.Docs 的忠实信徒,但这是一个可能适合的用例:stackoverflow.com/documentation/scenekit/commit
标签: video opengl-es sprite-kit scenekit metal