
檢查異步學。
受Pixelkit&Renderkit的啟發。
iOS,MACOS和TVOS的直播圖形
在Renderkit上運行,由金屬驅動
Pixelkit結合了自定義著色器,金屬性能著色器,核心圖像過濾器和視覺,以創建用於實時渲染的工具。
示例:相機效果 - 綠屏
信息:協調空間 - 混合操作員 - 效果便利函數 - 高位模式
| Camerapix | Depthcamerapix | ImagePix | videopix | ScrencapturePix | StreaminPix | slopepix |
| colorpix | CirclePix | RectanglePix | 多邊形 | arcpix | linePix | 漸變圖 | StackPix |
| NOISEPIX | textpix | MetalPix | wirlpix | 反饋書 | delaypix | 夏普 | StreamOutPix |
| LevelSpix | Blurpix | EdgePix | 閾值 | QuantizePix | transformpix | 萬花筒 |
| ChannelMixPix | Chromakeypix | CornerPinpix | ColorsHiftPix | FlipflopPix | rangepix | starpix |
| Sepiapix | convertpix | 降低點 | 拼寫 | Freezepix | Flarepix | AirPlayPix | RecordPix |
| Blendpix | crosspix | lookuppix | ExpracePix | remappix | ReorderPix | 分辨率圖 | 雜種 |
| Blendspix | Lumalevelspix | LumablurPix | LumatransformPix | timemachinepix | arraypix |
. package ( url : " https://github.com/heestand-xyz/PixelKit " , from : " 3.0.0 " ) import SwiftUI
import PixelKit
struct ContentView : View {
@ StateObject var circlePix = CirclePIX ( )
@ StateObject var blurPix = BlurPIX ( )
var body : some View {
PixelView ( pix : blurPix )
. onAppear {
blurPix . input = circlePix
blurPix . radius = 0.25
}
}
}import UIKit
import PixelKit
class ViewController : UIViewController {
override func viewDidLoad ( ) {
super . viewDidLoad ( )
let circlePix = CirclePIX ( )
let blurPix = BlurPIX ( )
blurPix . input = circlePix
blurPix . radius = 0.25
let finalPix : PIX = blurPix
finalPix . view . frame = view . bounds
view . addSubview ( finalPix . view )
}
} 在PixelKit中,所有像素都有一個分辨率。一些像素已經定義了分辨率(默認為.auto ),並且一些像素已得出分辨率。
.auto分辨率將填充視圖並根據視圖大小獲得正確的分辨率。如果視圖為100x100點,則分辨率將為MACOS上的200x200像素,而iPhone上的300x300像素將為300x300像素。
導入解決方案軟件包以使用分辨率:
import Resolution您可以將分辨率乘以CGFloat或Int 。
有預定義的分辨率,例如._1080p & ._4K 。
. renderedImage // UIImage or NSImage
. renderedTexture // MTLTexture![]() | ![]() | ![]() | ![]() | ![]() |
|---|
import SwiftUI
import PixelKit
class ViewModel : ObservableObject {
let camera : CameraPIX
let levels : LevelsPIX
let colorShift : ColorShiftPIX
let blur : BlurPIX
let circle : CirclePIX
let finalPix : PIX
init ( ) {
camera = CameraPIX ( )
camera . cameraResolution = . _1080p
levels = LevelsPIX ( )
levels . input = camera
levels . brightness = 1.5
levels . gamma = 0.5
colorShift = ColorShiftPIX ( )
colorShift . input = levels
colorShift . saturation = 0.5
blur = BlurPIX ( )
blur . input = colorShift
blur . radius = 0.25
circle = CirclePIX ( at : . square ( 1080 ) )
circle . radius = 0.45
circle . backgroundColor = . clear
finalPix = blur & ( camera * circle )
}
}
struct ContentView : View {
@ StateObject var viewModel = ViewModel ( )
var body : some View {
PixelView ( pix : viewModel . finalPix )
}
}這也可以通過有效的便利功能來完成:
let pix = CameraPIX ( ) . pixBrightness ( 1.5 ) . pixGamma ( 0.5 ) . pixSaturation ( 0.5 ) . pixBlur ( 0.25 ) remeber將NSCameraUsageDescription添加到您的info.plist
![]() | ![]() | ![]() | ![]() |
|---|
import RenderKit import PixelKit
let cityImage = ImagePIX ( )
cityImage . image = UIImage ( named : " city " )
let supermanVideo = VideoPIX ( )
supermanVideo . load ( fileNamed : " superman " , withExtension : " mov " )
let supermanKeyed = ChromaKeyPIX ( )
supermanKeyed . input = supermanVideo
supermanKeyed . keyColor = . green
let blendPix = BlendPIX ( )
blendPix . blendingMode = . over
blendPix . inputA = cityImage
blendPix . inputB = supermanKeyed
let finalPix : PIX = blendPix
finalPix . view . frame = view . bounds
view . addSubview ( finalPix . view )這也可以使用混合運營商來完成,並效果便利函數:
let pix = cityImage & supermanVideo . pixChromaKey ( . green )import RenderKit import PixelKit
let cameraPix = CameraPIX ( )
cameraPix . camera = . front
let depthCameraPix = DepthCameraPIX . setup ( with : cameraPix )
let levelsPix = LevelsPIX ( )
levelsPix . input = depthCameraPix
levelsPix . inverted = true
let lumaBlurPix = cameraPix . pixLumaBlur ( pix : levelsPix , radius : 0.1 )
let finalPix : PIX = lumaBlurPix
finalPix . view . frame = view . bounds
view . addSubview ( finalPix . view ) DepthCameraPIX添加在Pixelkit v0.8.4中,需要iPhone X或更新。
注意使用setup(with:filter:) DepthCameraPIX的方法。
它將照顧方向,顏色和使CameraPIX的深度。
為了訪問0.0和1.0邊界的深度值OUSIDE,
啟用這樣的16 bit模式: PixelKit.main.render.bits = ._16
let cameraPix = CameraPIX ( )
cameraPix . camera = . back
let multiCameraPix = MultiCameraPIX . setup ( with : cameraPix , camera : . front )
let movedMultiCameraPix = multiCameraPix . pixScale ( by : 0.25 ) . pixTranslate ( x : 0.375 * ( 9 / 16 ) , y : 0.375 )
let finalPix : PIX = camearPix & movedMultiCameraPix
finalPix . view . frame = view . bounds
view . addSubview ( finalPix . view )注意MultiCameraPIX需要iOS 13。
PixelKit坐標空間被納向垂直軸(高度為1.0),中間的原點(0.0,0.0)。
請注意,與本機Uikit和Swiftui視圖相比,垂直軸被翻轉並移動,這在使用Pixelkit中的圖形時更具說服力。完整旋轉由1.0定義
中心: cgpoint(x:0,y:0)
左下: cgpoint(x:-0.5 * expackratio,y:-0.5)
右上: cgpoint(x:0.5 * expactratio,y:0.5)
提示: Resolution具有.aspect屬性:
let aspectRatio: CGFloat = Resolution._1080p.aspect
快速便捷地混合pix的方法
這些是受支持的BlendingMode運營商:
& | !& | + | - | * | ** | !** | % | ~ | ° |
|---|---|---|---|---|---|---|---|---|---|
| 。超過 | 。在下面 | 。添加 | 。減去 | 。乘 | 。力量 | .gamma | 。不同之處 | 。平均的 | 餘弦 |
<> | >< | ++ | -- | <-> | >-< | +-+ |
|---|---|---|---|---|---|---|
| 。最低限度 | 。最大限度 | .addwithalpha | .subtractWithAlpha | 裡面 | 外部 | 獨家 |
let blendPix = ( CameraPIX ( ) !** NoisePIX ( at : . fullHD ( . portrait ) ) ) * CirclePIX ( at : . fullHD ( . portrait ) )默認的全局混合操作員填充模式為.fit ,以下更改它:
PIX.blendOperators.globalPlacement = .fill
請記住,這些功能將創建新的像素。
請注意超載GPU內存,一些彈藥會創建幾個像素。
諸如替代品和Slopepix之類的效果可以從更高的位深度中受益。
默認值為8位。像這樣更改它: PixelKit.main.render.bits = ._16
在創建任何像素之前,啟用高位模式。
注意資源尚不支持更高的位。
當前有一些帶有資源的伽馬偏移。

let metalPix = MetalPIX ( at : . _1080p , code :
"""
pix = float4(u, v, 0.0, 1.0);
"""
) let metalEffectPix = MetalEffectPIX ( code :
"""
float gamma = 0.25;
pix = pow(input, 1.0 / gamma);
"""
)
metalEffectPix . input = CameraPIX ( ) let metalMergerEffectPix = MetalMergerEffectPIX ( code :
"""
pix = pow(inputA, 1.0 / inputB);
"""
)
metalMergerEffectPix . inputA = CameraPIX ( )
metalMergerEffectPix . inputB = ImagePIX ( " img_name " ) let metalMultiEffectPix = MetalMultiEffectPIX ( code :
"""
float4 inPixA = inTexs.sample(s, uv, 0);
float4 inPixB = inTexs.sample(s, uv, 1);
float4 inPixC = inTexs.sample(s, uv, 2);
pix = inPixA + inPixB + inPixC;
"""
)
metalMultiEffectPix . inputs = [ ImagePIX ( " img_a " ) , ImagePIX ( " img_b " ) , ImagePIX ( " img_c " ) ] var lumUniform = MetalUniform ( name : " lum " )
let metalPix = MetalPIX ( at : . _1080p , code :
"""
pix = float4(in.lum, in.lum, in.lum, 1.0);
""" ,
uniforms : [ lumUniform ]
)
lumUniform . value = 0.5受到安東·海斯特(Anton Heestand Xyz)創建的觸摸設計師的啟發