Apple Engine

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

iOS で SceneKit を試す(Swift 3) その40 - Scene Editor カメラの HDR 設定 Part2

引き続き HDR の説明。

カメラとなる SCNCamara の HDR とは、
トーンマッピング処理を行い、シーン全体の輝度値を、ディスプレイに表示できる狭い範囲の輝度値に変換するすること。 具体的には露出調整、Bloom 効果を表現する。

また、HDR は Scene Editor のカメラのプロパティにある HDR のチェックをオンにするか、
コードで SCNCamara の wantsHDR を true にしないと、どの機能プロパティを設定しても動作しない。

 

Scene Editor の パラメーター

f:id:x67x6fx74x6f:20170726152110p:plain

 

HDR

HDR

チェックをオンにすると HDR の機能を動作できるようにする。

f:id:x67x6fx74x6f:20170726152913p:plain

 

Average Gray

HDR を使用する際、Photoshop のトーンカーブのように光の情報をどのように LDR に適応するかトーンマッピングカーブを作成する。

Average Gray はトーンマッピングカーブの中間点として使用する輝度レベルを設定し、暗いまたは明るいコンテンツのシーンを調整することができる。

値を高くすると画面全体の輝度高くなり、 値を低くすると輝度低くなる。

デフォルト値は 0.18。

 

0.05

f:id:x67x6fx74x6f:20170726152536p:plain

 

0.5

f:id:x67x6fx74x6f:20170726152519p:plain

 

White Point

ハイライトとシャドウ間で光の情報の緩やかな遷移、または急な遷移を行う。
デフォルト値は 1.0

 

10.0

f:id:x67x6fx74x6f:20170726152640p:plain

 

0.3

f:id:x67x6fx74x6f:20170726152653p:plain

 

Adaptation

Auto Adapt

チェックを入れると、現在のカメラが映す輝度を自動的に測定し、それに応じて露出レベルを調整する。 さらに、遮蔽物などでシーンの輝度が変化すると、自動的に新しい露出レベルへ変更するアニメーションが行われる。

ドキュメントではデフォルトでオンとなっているが、値は false が返す。

Apple のコードサンプル Badger で洞窟から出る際、この効果が顕著に現れる。

developer.apple.com

 

Auto Adapt なし / あり

f:id:x67x6fx74x6f:20170726152740p:plain

 

Speed Factor

Brightening と Darkening の値があり、暗い領域から明るくなる領域、または明るいところから暗くなる際の持続時間。

デフォルト値では Brightening は 0.4、 Darkening 0.5 と変化が異なる。

 

Exposure

Minimum、Maximum

露光量と最小値を最大値。
最小値を下げると暗い部分が露出不足(均一に黒)になり、 最大値をあげると露出オーバー(均一に白)になる。

1.0 で 2 倍、 2.0 で 4 倍、-1.0 で 1/2。
差が大きいほど、コントラストが低くなる。

デフォルトでは Minimum が -15、Maximum が 15。

 

Minimum -15、Maximum -3。

f:id:x67x6fx74x6f:20170726153839p:plain

 

Minimum 1、Maximum -15。

f:id:x67x6fx74x6f:20170726154034p:plain

 

Offset

トーンマッピングカーブの明暗にオフセット(偏り)をつける。
プラス値を与えると画面全体の輝度が上がり、マイナス値を与えると下がる。

デフォルト値は 0.0

-3

f:id:x67x6fx74x6f:20170726154114p:plain

 

3

f:id:x67x6fx74x6f:20170726154130p:plain

 

Bloom

ブルームエフェクトを与える。
ブルームエフェクトとは、シーンのハイライト(明るい色の領域)にソフトグローを追加し、明るいハイライトを実際の人間の目や物理カメラに表示する方法をシミュレートする。

輝度によって処理が行われるため、設定によってはエフェクトが表示されないことがあるので注意。

 

Intensity

ブルームエフェクトの強さを設定する。
値を小さくすると微妙な効果を得られ、大きくすると非常に明るい輝きが発生する。

デフォルト値は 0.0 で効果は現れない。

 

Threshold

ブルームエフェクトをトリガするために必要な輝度レベルを設定する。 値を小さくするとシーンの広範囲に適応され、 値を大きくするとハイライトのみにエフェクトが適用される。

デフォルト値は 1.0。

 

Blur Radius

ブルームエフェクトでハイライトに適用されるソフトグローのぼかしのピクセル単位の半径。

値を大きくすると広範囲で柔らかいグローが表現され、0 で無効になる。

デフォルト値は 4.0 ピクセル。

 

以下の設定を設定したブルームエフェクト

プロパティ
Exposure Offset 2
Bloom Threshold 6
Bloom Blur Radius 18

f:id:x67x6fx74x6f:20170726160103p:plain

 

コード

let camera = SCNCamera()

// HDR
camera.wantsHDR = true
camera.averageGray = 0.18
camera.whitePoint = 1.0

// Adaptation
camera.wantsExposureAdaptation = true
camera.exposureAdaptationBrighteningSpeedFactor = 0.4
camera.exposureAdaptationDarkeningSpeedFactor = 0.6

// Exposure
camera.minimumExposure = -15.0
camera.maximumExposure = 15.0
camera.exposureOffset = 0.0

// Bloom
camera.bloomIntensity = 0.0
camera.bloomThreshold = 0.5
camera.bloomBlurRadius = 4.0

 

今回はここまで。