Apple Engine

Apple, iPhone, iOS, その周辺のことについて

iOS で SceneKit を試す(Swift 3) その80 - ジオメトリにフィルター効果(Core Image Filter)をつける

SceneKit ではジオメトリなどノードに Core Image Filter を使用してエフェクトをつけることができ、Metal Shader で行うより簡単にできる。

多分、他のゲームエンジンではこれほど簡単にエフェクトをかけるのは難しいと思われる。

とりあえず、試した感じだと、Metal Shader の方がパフォーマンスが良さそう。

 

コードを書いてみる

いつも通り、Xcode で Game のテンプレートで SceneKit を選択。
ship の下らへんに以下のコードを書いてみる。

let ship = scene.rootNode.childNode(withName: "ship", recursively: true)!

let filter = CIFilter.init(name: "CIPixellate")
ship.filters = [filter!]

 

ビルドすると宇宙船にモザイクがかかる。

f:id:x67x6fx74x6f:20170826003744p:plain

 

コードを見るとわかるように SCNNode のプロパティ filters に CIFilter を入れるだけ。
今回はパラメーターは入れていないが設定可能かつ、複数のフィルターを適応可能。

 

背景にジオメトリを置くと手前だけフィルターがかかっているのがわかる。

f:id:x67x6fx74x6f:20170826003926p:plain

 

CICMYKHalftone を適応するとカラー印刷の網点のような効果が出たりする。

f:id:x67x6fx74x6f:20170826004250p:plain

 

Core Image Filter の一覧。
2つ画像が必要なものやジェネレーターなどはあるが、ある程度のものは使用できる。

developer.apple.com

 

今回はここまで。