這看起來像一個自定義內核的工作。
您可以使用CIRandomGenerator
生成一個隨機噪聲字段,然後使用一些定製的核心圖像核心語言在條帶中使用sin
來將它合成到原始圖像上以控制間距。通過smoothstep
傳遞垂直位置的正弦會產生很好的效果。
你的內核應該是這個樣子:
let kernel = CIColorKernel(string:
"kernel vec4 vhsNoise(__sample image, __sample noise, float time, float spacing, float stripeHeight, float backgroundNoise)" +
"{" +
" vec2 uv = destCoord();" +
" float stripe = smoothstep(1.0 - stripeHeight, 1.0, sin((time + uv.y)/spacing)); " +
" return image + (noise * noise * stripe) + (noise * backgroundNoise);" +
"}"
)!
其實我已經寫了CIFilter
要做到這一點,你可以find here。
Simon Simon
上面的代碼應該使用destCoord()而不是samplerCoord(image)。 samplerCoord()函數採用「採樣器」而不是「__sample」。 –
事實上 - 我的小學生錯誤。現在已經發生了變化,儘管它與'samplerCoord'一起工作。 –