iOS で SceneKit を試す(Swift 3) その34 - Scene Editor の Material プロパティ
前回紹介を省略したマテリアルのプロバティについてご紹介。
Physically Based の Metalness、Roughness やテクスチャマッピングに関しては他の記事で紹介する。
以下の説明では Physically Based 以外のものを列挙しているが、 ライティングモデルの Constant は Specular と Normal、Lambert では Specular の設定が存在しない。
Normal と Emission 以外の効果のかかり具合である intensity は 0 から 1。
0.1 刻みで変化が行なっている。
Diffuse (Ambient)
表面色の設定。
色を設定していても 0 が 黒になる。
完全に反射するマテリアル以外は 0 の値をとる完全な黒にしない方が良い。他の設定が反映されない可能性があるため。
また、マテリアルのデフォルト設定は Ambient のプロパティは有効にならない。
有効にした場合は Diffuse に Ambient が加算される。
Specular
光沢色の設定。
今回は白にしているが他の色も設定できる。
Normal
Normal Map 使用時の設定。
テクスチャ画像のみ使用可能。
画像の値から法線情報を変更し凹凸のあるような表面をつくる。
頂点や面を変更するわけではないので輪郭は元のジオメトリのまま。
iOS 11 の Height Map の場合、頂点が移動される。
Reflective
テクスチャ画像を使用して擬似的な鏡面反射を設定する。
現状はテクスチャ画像のみ使用可能。
今後紹介する Cube Map が使用できる。
Transparent
半透明時の設定。
ノードやジオメトリの半透明とは別にテクスチャ画像のグレイスケールから半透明にすることができる。
色で切り抜くため、Transpatency の Mode を RGB Zero にする必要がある。
Occlusion
Ambient Occlusion(画像)使用の際の設定。
主に 3DCG のソフトで Ambient Occlusion のテクスチャをベイクした使用する。
画像のように、光が当たらない部分に画像の暗部が適応される。
Illumimation
自発光しているように見せるための設定。
テクスチャ画像の白い部分を元にマテリアルの彩度が上がる。
サンプルではわかりやすく Diffuse のテクスチャを暗めに設定しており、適応する値を大きくすると中央部分の文字が明るくなっている。
Diffuse と Illumimation テクスチャ
Emission
自発光の値の設定。
ライトの陰に影響せず彩度が上がる。
このプロパティは Global Illumination で Light Probe 使用時に マテリアルをライトにすることがで、
下の画像では床がライトになっているため、球体の下の部分がライトの影響を受け赤くなっている。
また、カメラの HDR 使用時に Bloom の影響を受け、Emission の周囲にグローの効果を出すことができる。
詳しくはカメラの紹介で説明する。
Multiply
全ての設定適応後にこちらの値が乗算される設定。
白に近いものは他のマテリアル設定を写す。
Diffuse で テクスチャが設定されており、Multiply で白と赤のチェックの画像を設定している。
コード
色
let geometry = SCNSphere(radius: 2) geometry.firstMaterial?.diffuse.contents = UIColor.red geometry.firstMaterial?.diffuse.intensity = 1.0
let material = SCNMaterial() material.diffuse.contents = UIColor.red let geometry = SCNSphere(radius: 2) geometry.materials = [material]
テクスチャ
let geometry = SCNSphere(radius: 2) geometry.firstMaterial?.diffuse.contents = UIImage(named:"texture.png") geometry.firstMaterial?.diffuse.intensity = 1.0
let material = SCNMaterial() material.diffuse.contents = UIImage(named:"texture.png") let geometry = SCNSphere(radius: 2) geometry.materials = [material]
今回はここまで。