Apple Engine

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

iOS で SceneKit を試す(Swift 3) その46 - SCNLight の共通設定

前回の書き忘れがあったのでライトの種類の前にこちらの紹介。

ライトには種類があったが、Light Probe 以外でいくつかの共通設定があるので、まずはこちらから。 

f:id:x67x6fx74x6f:20170801173301p:plain

 

Name

コードで使用するための識別用の名前。
Light Probe でも使用可能。

 

Type

ライトの種類を SCNLight.LightType を使用し設定する。
以下、SCNLight.LightType のプロパティ

プロパティ 名前
.ambient アンビエントライト
.omni オムニライト
.directional ディレクショナルライト
.spot スポットライト
.IES IES ライト
.probe Light Probe

 

ちなみに、type の後に IES ライトのファイルを読み込む関数 iesProfileURL を使用すると、何が設定されていても IES ライトに変更される。

 

Mode

デフォルト値は Dynamic。
Static はライトマップのベイク作成時に使用。

この設定は Scene Editor 内でのベイクのためだけにあるようなので、SCNLight クラスにこのプロパティはない。
( 確か Model I/O の機能だったはず )

 

Color

ライトの色。この色と共にジオメトリなどのマテリアル設定に反映させ物体に色をつける。

 

Intensity

光の強さ。
値を上げると光沢の範囲が増えや形がシャープになる。

デフォルト値は 1000。

 

コードで使用可能な項目

temperature

色温度の単位、ケルビンでライトの設定を行う。
6500 K で白色となっており、低くすると赤みがかり、高くすると青くなる。

デフォルト値は 6500 になっており、設定できる値は 0 〜 40000

 

iOS SceneKit のテンプレートに SCNFloor を追加して、オムニライトに temperature を設定したもの。

// create and add a light to the scene
let lightNode = SCNNode()
lightNode.light = SCNLight()
lightNode.light!.type = .omni

// 追加箇所
lightNode.light!.temperature = 3000

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

f:id:x67x6fx74x6f:20170801124726p:plain

  

以下で intensity と色をつけたもの

lightNode.light!.color = UIColor.init(red: 1.0, green: 0.8, blue: 0.8, alpha: 1.0)

f:id:x67x6fx74x6f:20170801124113p:plain

 

categoryBitMask

ジオメトリのノードの categoryBitMask と ライトのビットマスクと AND 演算して 0 以外であった場合 このライトに適応させる。

デフォルトの値は -1 となっており、すべてのジオメトリに適応される。

注意:SCNLight をアタッチしている SCNNode ではなく、SCNLight の categoryBitMask を設定しないと変化しないので間違えないように。

注意2:アンビエントライトは categoryBitMask が無視されるため適応できない

 

init(mdlLight: MDLLight)

Model I/O で作成したライトを適応できる。
基本的には SceneKit で使用されているライトなので直接 MDLLight を設定することはないと思われる。

 

今回はここまで。