2015-10-31 43 views
3

我嘗試使用下面的代碼片段創建一個模糊效果:CIFilter高斯模糊,似乎在iOS9.x(與SKEffectNode使用)被打破

let glowEffectNode = SKEffectNode() 
    glowEffectNode.shouldRasterize = true 

    let glowSize = CGSize(width: barSize.width, height: barSize.height) 
    let glowEffectSprite = SKSpriteNode(color: barColorData.topColor, size: glowSize) 
    glowEffectNode.addChild(glowEffectSprite) 

    let glowFilter = CIFilter(name: "CIGaussianBlur") 
    glowFilter!.setDefaults() 
    glowFilter!.setValue(5, forKey: "inputRadius") 

    glowEffectNode.filter = glowFilter 

當然iOS上8.x中它完美的作品,但是從iOS 9.x(同時在9.0和9.1上都嘗試過)模糊不能正常工作。 (模擬器上的節點似乎有點透明的,但絕對不是模糊和設備上似乎模糊了,但隨之而來,也有從中間位置偏移:/)

是否有一個快速的方法來解決這個問題使用CIFilter?

+0

是吧'CIFilter '_in general_(即核心圖像框架)已被打破,或者只針對'SKEffec tNode'(SpriteKit框架)?根據答案,我會稍微修改問題的標題。另外,感謝您的解決方案。 –

+0

@NicolasMiari我只用SpriteKit進行了測試 – giorashc

+0

我想知道它是如何在Mac OS操作系統上運行的...... –

回答

1

我撥弄多一點與此並找到了解決...

首先,似乎使用奇數的模糊半徑導致整個節點到具有偏移(被渲染??? )所以使用10例如修正了抵消問題。

其次,它似乎是模糊裁剪因爲整個節點是渲染精靈和模糊效果,你讓我用一個透明的精靈了額外的空間,下面的代碼片段現在工作需要一個額外的空間:

let glowEffectNode = SKEffectNode() 
glowEffectNode.shouldRasterize = true 

let glowBackgroundSize = CGSize(width: barSize.width + 60, height: barSize.height + 60) 
let glowSize = CGSize(width: barSize.width + 10, height: barSize.height + 10) 
let glowEffectSprite = SKSpriteNode(color: barColorData.topColor, size: glowSize) 
glowEffectNode.addChild(SKSpriteNode(color: SKColor.clearColor(), size: glowBackgroundSize)) 
glowEffectNode.addChild(glowEffectSprite) 

let glowFilter = CIFilter(name: "CIGaussianBlur") 
glowFilter!.setDefaults() 
glowFilter!.setValue(10, forKey: "inputRadius") 

glowEffectNode.filter = glowFilter 

我應該提到,我創建使用view.textureFromNode(glowEffectNode)爲了效率的目的這個節點的質感,但我嘗試使用節點本身和問題仍然存在這樣上面的應該工作,無論