Apple Engine

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

iOS で SceneKit を試す(Swift 3) その42 - Scene Editor カメラのポストプロセス

カメラとなる SCNCamara では画面描画後に簡易的な画像処理を行うことができる。

使用できる処理は以下のもの。

  • 画面の周りを暗くするケラレ処理
  • ブラウン管のような色のにじみを出すカラーフリンジ
  • 簡易的な色の調整を行うカラーグレーディング

 

さらに複雑な処理をしたい場合は SCNTechnique を使用し、自前でシェーダーを書いて合成する。

 

Scene Editor の パラメーター

f:id:x67x6fx74x6f:20170726190154p:plain

 

元画像

f:id:x67x6fx74x6f:20170726191754p:plain

 

Vignetting

ケラレ処理を行う。
Power が適応範囲で、Intensity が適応度合い。
デフォルト値は Power が 0 で、Intensity が 1。

Power が 0 の場合は処理が行われない。

 

Power: 1 / Intensity: 1

f:id:x67x6fx74x6f:20170726191819p:plain

 

Color Fringe

フリンジの処理を行う

Strength の値を大きくするほどフリンジの色のシフトと広がりが顕著になり、Intensity が適応度合い。
デフォルト値は Strength が 0 で、Intensity が 1。

Strength が 0 の場合は処理が行われない。

 

Strength: 4 / Intensity: 1

f:id:x67x6fx74x6f:20170726191840p:plain

 

Color Grading

Saturation

画面の彩度を設定する。 デフォルト値は 1.0 で 0 にするとグレイスケールになる。

 

Saturation: 0

f:id:x67x6fx74x6f:20170726191913p:plain

 

Contrast

画面のコントラスト変更する。
デフォルト値は 0.0。

 

Contrast: 4

f:id:x67x6fx74x6f:20170726192016p:plain

  

コード

let camera = SCNCamera()

// Vignetting
camera.vignettingPower = 0.0
camera.vignettingIntensity = 1.0

// Color Fringe
camera.colorFringeStrength = 0.0
camera.colorFringeIntensity = 1.0

// Saturation
camera.saturation = 1.0
camera.contrast = 0.0

また、コードのみだがカラーグレーディング用のテクスチャを作成し、適応させると細かな色の調整ができる模様。

Color Grading のドキュメント

colorGrading - SCNCamera | Apple Developer Documentation

 

上記の設定でテクスチャ画像を作成し、
レンダリング画像に対して 80% の適応度合いで試したもの。

f:id:x67x6fx74x6f:20170726192636p:plain

let camera = SCNCamera()

camera.colorGrading.contents = NSImage(named:"colorgrading.png")
camera.colorGrading.intensity = 0.8

 

カラーグレーディングの画像についてはまたいつか説明しようと思う。

 

今回はここまで。