Apple Engine

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

iOS で SceneKit を試す(Swift 3) その83 - 画面全体の色調整(カラーグレーディング)を行う LUT 画像ファイルの作成、編集を試す

以前、Scene Editor でのカメラのポストプロセス処理を行う際に、 色調整を行うカラーグレーディングで専用画像を使用した。

今回はその使い方とつくりかたについて説明していこうと思う。

編集に関しては Photoshop など、何らかの画像編集が必要になる。

 

専用の画像とは?

色対応表 (LUT, Look Up Table) と呼ばれるもので、
以下のような 16 x 16 画像を横に 16 個敷き詰めた画像を使用する。

f:id:x67x6fx74x6f:20170829183210p:plain

 

Unreal Engine や Unity でも使用可能で、 物によっては 16x16x32 の物もある

 

16 x 16 の画像はどのような法則で並べられているのか

RGB 3色分の色の見本をつくるため、色が3次元的な配置となっている。
16 x 16 の画像ごとに青色 0 〜 1。全て左下原点で X 軸は赤の 0 〜 1、Y 軸は緑の 0 〜 1 となっている。

 

Photoshop や Illustrator などで試したい場合は以下のような感じ。

ブラックをは背景にして、透明度 0 から 1 で全面に着色された B (青) の上に、
X軸 0 〜 16px 間を透明度 0 から 1 の R (赤)、
Y軸 0 〜 16px 間を透明度 0 から 1 の B (緑)の2つを除外(Exclusion)で重ねるそれを16連ねたものとなる。

f:id:x67x6fx74x6f:20170829183411p:plain

 

Photoshop を使用して LUT を作成、編集して適応してみる

準備

今回は Photoshop CC 2017 を使用。
多分、他のレタッチソフトでも似たような方法で編集できると思われる。

まず、色調を変更したい画像を読み込み、ベースとなる LUT 画像のファイルをレイヤーとして適当な場所に配置する。

f:id:x67x6fx74x6f:20170829193140p:plain

 

調整

例えば、新規調整レイヤーから「グラデーションマップ」を選択すると色の明度にに合わせてグラデーションの色適応することができる。 下の画像では赤外線カメラのような感じ。

f:id:x67x6fx74x6f:20170829193211p:plain

 

画像作成

必要なのは LUT 画像部分だけなので、背景となっている画像を消す。

f:id:x67x6fx74x6f:20170829193241p:plain

 

透過部分はいらないので、メニューバーの「イメージ」 > 「トリミング」で透明ピクセルを消して書き出し。

今回はひとまず「lut.png」として保存した。

f:id:x67x6fx74x6f:20170829193255p:plain

 

コードを書く

Xcode の Game テンプレートもしくは、既存の SceneKit のプロジェクトに、
先ほどの lut.png をドラッグ&ドロップなどでインポートし、以下のコードのカメラのノードに適応する。

let camera = SCNCamera()
camera.colorGrading.contents = UIImage(named:"lut.png")
camera.colorGrading.intensity = 1.0

以前、説明しているように intensity は適応具合。
1.0 が 100% となり、0.5 にすると半分の適応度合いとなる。

f:id:x67x6fx74x6f:20170829193335p:plain

 

作例

露出を変更して色を狭めて見たり、 トーンカーブで明暗部分の変更して見たり、いろいろな色調補正ができると思われる。

 

露出を変更したもの

f:id:x67x6fx74x6f:20170829193450p:plain

 

f:id:x67x6fx74x6f:20170829193501p:plain

 

f:id:x67x6fx74x6f:20170829194503p:plain

 

トーンカーブで変更したもの

f:id:x67x6fx74x6f:20170829193537p:plain

 

f:id:x67x6fx74x6f:20170829193546p:plain

 

f:id:x67x6fx74x6f:20170829194514p:plain

 

注意点

iOS シミュレーターでは Metal が使用できず、ポストプロセス処理が無視されるので注意。

 

今回はここまで。