iOS で SceneKit を試す(Swift 3) その46 - SCNLight の共通設定
前回の書き忘れがあったのでライトの種類の前にこちらの紹介。
ライトには種類があったが、Light Probe 以外でいくつかの共通設定があるので、まずはこちらから。
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)
以下で intensity と色をつけたもの
lightNode.light!.color = UIColor.init(red: 1.0, green: 0.8, blue: 0.8, alpha: 1.0)
categoryBitMask
ジオメトリのノードの categoryBitMask と ライトのビットマスクと AND 演算して 0 以外であった場合 このライトに適応させる。
デフォルトの値は -1 となっており、すべてのジオメトリに適応される。
注意:SCNLight をアタッチしている SCNNode ではなく、SCNLight の categoryBitMask を設定しないと変化しないので間違えないように。
注意2:アンビエントライトは categoryBitMask が無視されるため適応できない
init(mdlLight: MDLLight)
Model I/O で作成したライトを適応できる。
基本的には SceneKit で使用されているライトなので直接 MDLLight を設定することはないと思われる。
今回はここまで。