Apple Engine

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

iOS で SceneKit を試す(Swift 3) その34 - Scene Editor の Material プロパティ

前回紹介を省略したマテリアルのプロバティについてご紹介。

Physically Based の Metalness、Roughness やテクスチャマッピングに関しては他の記事で紹介する。

f:id:x67x6fx74x6f:20170720195632p:plain

 

以下の説明では Physically Based 以外のものを列挙しているが、 ライティングモデルの Constant は Specular と Normal、Lambert では Specular の設定が存在しない。

Normal と Emission 以外の効果のかかり具合である intensity は 0 から 1。
0.1 刻みで変化が行なっている。

 

Diffuse (Ambient)

表面色の設定。

色を設定していても 0 が 黒になる。
完全に反射するマテリアル以外は 0 の値をとる完全な黒にしない方が良い。他の設定が反映されない可能性があるため。

f:id:x67x6fx74x6f:20170720195744p:plain

 

また、マテリアルのデフォルト設定は Ambient のプロパティは有効にならない。
有効にした場合は Diffuse に Ambient が加算される。

 

Specular

光沢色の設定。
今回は白にしているが他の色も設定できる。

f:id:x67x6fx74x6f:20170720195717p:plain

 

Normal

Normal Map 使用時の設定。
テクスチャ画像のみ使用可能。
画像の値から法線情報を変更し凹凸のあるような表面をつくる。

f:id:x67x6fx74x6f:20170720195845p:plain

 

頂点や面を変更するわけではないので輪郭は元のジオメトリのまま。

f:id:x67x6fx74x6f:20170720195856p:plain

 

iOS 11 の Height Map の場合、頂点が移動される。

 

Reflective

テクスチャ画像を使用して擬似的な鏡面反射を設定する。
現状はテクスチャ画像のみ使用可能。

今後紹介する Cube Map が使用できる。

f:id:x67x6fx74x6f:20170720195926p:plain

 

Transparent

半透明時の設定。
ノードやジオメトリの半透明とは別にテクスチャ画像のグレイスケールから半透明にすることができる。

f:id:x67x6fx74x6f:20170720200033p:plain

 

色で切り抜くため、Transpatency の Mode を RGB Zero にする必要がある。

 

Occlusion

Ambient Occlusion(画像)使用の際の設定。
主に 3DCG のソフトで Ambient Occlusion のテクスチャをベイクした使用する。

画像のように、光が当たらない部分に画像の暗部が適応される。

f:id:x67x6fx74x6f:20170720200054p:plain

 

Illumimation

自発光しているように見せるための設定。
テクスチャ画像の白い部分を元にマテリアルの彩度が上がる。

サンプルではわかりやすく Diffuse のテクスチャを暗めに設定しており、適応する値を大きくすると中央部分の文字が明るくなっている。

f:id:x67x6fx74x6f:20170720200114p:plain

 

Diffuse と Illumimation テクスチャ

f:id:x67x6fx74x6f:20170720200637p:plain

 

Emission

自発光の値の設定。
ライトの陰に影響せず彩度が上がる。

f:id:x67x6fx74x6f:20170720200133p:plain

 

このプロパティは Global Illumination で Light Probe 使用時に マテリアルをライトにすることがで、
下の画像では床がライトになっているため、球体の下の部分がライトの影響を受け赤くなっている。

f:id:x67x6fx74x6f:20170721095933p:plain

 

また、カメラの HDR 使用時に Bloom の影響を受け、Emission の周囲にグローの効果を出すことができる。
詳しくはカメラの紹介で説明する。

 

Multiply

全ての設定適応後にこちらの値が乗算される設定。
白に近いものは他のマテリアル設定を写す。

Diffuse で テクスチャが設定されており、Multiply で白と赤のチェックの画像を設定している。

f:id:x67x6fx74x6f:20170720200204p:plain

 

コード

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]

 

今回はここまで。