小编2sh*_*shy的帖子

ARKit/SpriteKit - 将pixelBufferAttributes设置为SKVideoNode或在视频中制作透明像素(色度键效果)另一种方式

我的目标是使用在真实环境中呈现2D动画角色ARKit.动画角色是视频的一部分,在视频的以下快照中显示:

来自视频的快照

使用代码完全显示视频本身没有任何问题:

func view(_ view: ARSKView, nodeFor anchor: ARAnchor) -> SKNode? {
    guard let urlString = Bundle.main.path(forResource: "resourceName", ofType: "mp4") else { return nil }

    let url = URL(fileURLWithPath: urlString)
    let asset = AVAsset(url: url)
    let item = AVPlayerItem(asset: asset)
    let player = AVPlayer(playerItem: item)

    let videoNode = SKVideoNode(avPlayer: player)
    videoNode.size = CGSize(width: 200.0, height: 150.0)
    videoNode.anchorPoint = CGPoint(x: 0.5, y: 0.0)

    return videoNode
}
Run Code Online (Sandbox Code Playgroud)

此代码的结果显示在以下应用程序的屏幕截图中,如预期:

应用截图#1

但正如你所看到的,角色的背景并不是很好,所以我需要让它消失,以便创造出实际上站在水平面上的角色的幻觉.我试图通过对视频产生色度键效果来实现这一点.

  • 对于那些不熟悉色度键的人来说,这是有时在电视上看到的"绿屏效果"的名称,以使颜色透明.

我对色度键效果的处理方法是创建基于的自定义过滤器"CIColorCube" CIFilter,然后使用过滤器对视频应用AVVideoComposition.

首先,是创建过滤器的代码:

func RGBtoHSV(r : …
Run Code Online (Sandbox Code Playgroud)

ios sprite-kit skvideonode swift arkit

8
推荐指数
1
解决办法
978
查看次数

标签 统计

arkit ×1

ios ×1

skvideonode ×1

sprite-kit ×1

swift ×1