Apple Engine

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

iOS で SceneKit を試す(Swift 3) その51 - Scene Editor の IES Light

IES Light はテキストデータのファイルを使用し照明のシミュレーションを行い陰や光を与える。
Directional Light とほぼ同じで、Scale のパラメーターがなく、IES ファイルの選択がある。

基本的にはライトからのシャドウマップで表現しているため、アーティファクトが出る(データのエラーやノイズの出現する)場合がある。

その場合は、Casts Shadow の チェックをオンにして Shadow のパラメーター群で調整する。

 

IES ファイル

テキスト情報で光がどのように与えるか記述されている。
試しに、以下のコードを入れて .ies の拡張子でプロジェクトに保存してみる。

TILT=NONE
1 13172.61 1
37 1
1
2
0 0 0
1 1 0
0.00 2.50 5.00 7.50 9.11 10.00 10.80 12.50 15.83 22.50 25.00 27.50 32.50 34.28 35.00 42.50 47.02 47.50 47.81 50.00 50.78 52.50
55.00 57.50 60.00 62.50 65.00 67.50 70.00 72.50 75.00 77.50 80.00 82.50 85.00 87.50 90.00
0.00
8379.00 8409.00 8528.00 8126.65 8500.00 8564.00 8301.00 8158.61 8411.98 8036.59 7865.61 7283.76 5209.38 6038.93 4533.49 3091.00
3665.38 2996.97 3625.45 2194.62 3170.85 1115.28 651.00 450.00 244.00 102.00 80.00 43.00 5.00 2.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00

 

今回コードを書いているが、基本的には自分で作成することはないと思われるので、 照明メーカーなどで配布されているものを使用した方が良いと思われる。

www.usa.lighting.philips.com

 

シーン設定

Game (SceneKit) のテンプレートでプロジェクトを作成するか既存のファイルから ship.scn ファイルを選択。
(設定が面倒である場合は、下にサンプルファイルをダウンロード)

中身はいらないので Scene Graph View か、Scene Editor 上にあるものを全て削除。

Object Library (Command + Control + Option + 3) から Plane を2つ、Sphere、IES Light を以下のように設定する。

Plane

2つの座標

f:id:x67x6fx74x6f:20170804154050p:plain

f:id:x67x6fx74x6f:20170804154059p:plain

 

Attributes Inspector (Command + Control + Option + 4) で両方とも大きさを変更。

f:id:x67x6fx74x6f:20170804154119p:plain

 

Material Inspector (Command + Control + Option + 4) で両面描画のチェックを外す。

f:id:x67x6fx74x6f:20170804154134p:plain

 

Sphere

座標値変更

f:id:x67x6fx74x6f:20170804153917p:plain

 

Attributes Inspector で大きさを変更。

f:id:x67x6fx74x6f:20170804153928p:plain

 

IES Light

f:id:x67x6fx74x6f:20170804153901p:plain

 

IES Light の Attrubutes Inspector

以前紹介した共通の設定に IES Profile の読み込みと、キャストシャドウを追加したもの。

キャストシャドウは Spot Light で紹介しているのでこちらを参照。

f:id:x67x6fx74x6f:20170804153538p:plain

 

IES Parameters

IES Profile のファイルを選択する。 Scene Editor ではフォルダのマークを選択して、上の方でつくったものか、ダウンロードした IES ファイルを選ぶ。

照明が適応されたのがわかる。

f:id:x67x6fx74x6f:20170804153708p:plain

 

試しに Casts shadows のチェックを入れると背面にアーティファクトができる。

f:id:x67x6fx74x6f:20170804153803p:plain

 

Shadow のパラメーターを調整したもの

f:id:x67x6fx74x6f:20170804153723p:plain

  

注意点

  • コードではライトの種類を選択後 IES ファイルの読み込みが呼ばれると Omni、Spot など他のライトを選択していても IES に変更される
  • モバイルの GPU で再現するため記述されている IES が意図通りに表示されない可能性がある
  • Scene Editor で IES Profile に適合していないファイル(特にバイナリ)を読み込むと Xcode が落ちたり scn が壊れる可能性があるので慎重に
  • Scene Editor で IES Lgiht を使用した場合は、必ず IES ファイルをプロジェクトの中にあるものから読み込む。プロジクト外でも Scene Editor では読み込めるが、ビルドした環境では IES ファイルが読み込めなくなるため  

サンプル

今回は scn がそこそこ複雑なのでファイルを用意。

  • IES.scn
  • iesprofile.ies

github.com

 

コード

let light = SCNLight()
light.name = "IES"
light.type = .IES
light.intensity = 1000

light.castsShadow = true

let iesPath:String = Bundle.main.path(forResource: "iesprofile", ofType: "ies")!
let fileURL:URL = URL(fileURLWithPath: iesPath)
light.iesProfileURL = fileURL

let lightNode = SCNNode()
lightNode.light = light
lightNode.position = SCNVector3(x: 0, y: 10, z: 10)
scene.rootNode.addChildNode(lightNode)

 

今回はここまで