iOS で SceneKit を試す(Swift 3) その45 - Scene Editor の Light について
今回はシーンのライトについて軽くご紹介。
シーン上には必ずライトとなるものが1つ必要となり、
SCNNode で light プロパティに SCNLight を設定するか、
以前、紹介したシーン設定の Light Environment (Image Based Lighting) を設定することで、
ジオメトリのマテリアルに光を照らしカメラに物体を映すことができる。
SCNLight の種類
Directional と Ambient は設置場所に関係なく一定の光を設定する。
ライトの種類 | 説明 |
---|---|
Omni | オムニライト。豆電球のように球状に光が広がるライト |
Directional | ディレクショナルライト。太陽のように一定方向の光を設定するライト |
Spot | スポットライト。現実のスポットライト同様に円錐状に光を設定するライト |
Ambient | アンビエントライト。シーン全体に光を与えるライト |
IES | IES ライト。照明設定が記述されたテキストファイルを読み込み設定するライト |
Light Probe | これ自体はライトではなく、Light Probe 内に SCNMaterial の Emision が設定されたジオメトリがあった場合、そのジオメトリをライトに設定する |
SCNLight の制限
ドキュメントでは SCNLight はノードで使用できるの 8 つまでとのこと。
通常、ライトを 8 つ使用することはあまりないが、 軽く試したところ、アンビエントライトや 光の変更を行わないモードであるスタティックにしたライト、 ライトプローブを除くライトが 8 個以上あると 9個目からはライトが無視される。
SCNLight の注意点
3DCG はシーン内のライトの数と種類でレンダリングパフォーマンスが変化する。
SceneKit で効率的なレンダリングを行う場合、シーン内のライティング設定を見直す必要がある。
以下、調整例
- 光の当たり方が固定の場合は、あらかじめ 3DCG のオーサリングツールでライトをライトマップテクスチャにベイクし、SCNMaterial にそのテクスチャ適応して multiply で色等を調整する
- 必要のないライトやジオメトリで影の描画を行わない
- ゲームキャラクタなど正確な影の形が必要ない場合、影を輪郭がぼやけた丸などの画像にしてしまう
- スポット、オムニ、ディレクショナルライト で attenuationEndDistance プロパティを設定し有効範囲を制限する
- SCNLight の categoryBitmask 使用してライトを必要ないジオメトリにはライトを適応しない
今回はここまで。
次回、種類別に紹介していく。