Apple Engine

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

iOS で SceneKit を試す(Swift 3) その33 - ジオメトリの質感を決めるマテリアルについて

SceneKit で言うマテリアルとはジオメトリの質感を決めるための設定だと考えてもらえば良いかと。
これまででも、firstMaterial などで設定していたがもう少し詳しくを紹介していく。

以前に、3DCG にはカメラ、ジオメトリ、ライトが必要だと書いたが、もう一つ重要なのがジオメトリの質感である。
大体の 3DCG の制作ツールなどでは最初に設定されているため、マテリアル設定がないということはないが、マテリアルが存在しないとジオメトリが描画されない。

 

マテリアルは何をしているのか

ジオメトリの法線情報を元に、ジオメトリがどのような色の光を反射しているか決めており、
赤い物体は赤色を反射するし、光が強いとハイライトができる。

 

f:id:x67x6fx74x6f:20170719141555p:plain

 

法線とは

ざっくり書くと、主な役目はジオメトリの頂点や面がどの方向を向いているかの情報。

f:id:x67x6fx74x6f:20170719141726p:plain

 

例えば、カメラやライトの光に対して表を見ているか裏を見ているか。 カメラから見て裏にあるものは、ものに隠れるので描画しなくても良いし、 ライトから見て裏にある部分は陰を落とす。

 

強引にジオメトリの断面を書いたが、
ライトが光を照射している方向の反対向きに法線がある場合はハイライトになるし、同じ向きに近い方は影になる。

f:id:x67x6fx74x6f:20170719141751p:plain

 

SceneKit のマテリアルの種類 (Lighting Model)

マテリアルでは 3DCG の制作ソフト同様に、
光の処理が異なるライティングモデルが用意されている。

ほとんどの場合 Physically Based を使用することが多いと思われる。

  • Constant
  • Lambert
  • Blinn
  • Phong
  • Physically Based

 

f:id:x67x6fx74x6f:20170719155448p:plain  

Constant

単色で塗られ光の影響を受けない。

 

Lambert

光沢のないつや消しを行なっている物体に向いている質感。
ハイライトはつかない。

 

Blinn

金属のような広めのハイライトをもつ物体に向いている質感。
2番目に計算のコストが高い。

 

Phong

鏡面反射を行うような物体のような強い光沢を持つ質感。
Normal や iOS 11 で追加される Height Map では、ロジク的な問題で状況によっては光沢部分が汚くなる可能性がある。

 

Physically Based

Lambert、Blinn、Phong は計算で近似した質感を計算しているが、
Physically Based は光学的に現実世界に近いリアルなジオメトリの表示を行う。 この中では最も計算コストが高い。

 

SceneKit マテリアルにはどのような設定値があるのか

以下のもの。ライティングモデルで使用できるものが異なる。

名称 機能
Diffuse 表面色の設定
Specular 光沢色の設定
Normal Normal Map 使用時の設定
Reflective 鏡面反射設定
Transparent 半透明時の設定(こちらとは別にジオメトリ全体のもある)
Occlusion Ambient Occlusion (画像)使用の際の設定
Illumimation 自発光しているように見せるための設定
Emission 自発光の値の設定
Multiply 全ての設定適応後にこちらの値が乗算される設定
Ambient 環境光の設定

 

ライティングモデルが Physically Based のみ使用できるもの。

名称 機能
Metalness 金属のような表面を表す設定
Roughness 表面の粗さの設定

 

Physically Based 以外では、フレネル効果(シャボン玉のように輪郭部分の屈折率が変わる効果)の追加ができ、
Blinn、Phong ではハイライトの設定を Shininess で設定できる。

 

共通で設定できるものでは、ジオメトリの半透明度やジオメトリをどのように描画するか、深度情報をどのように扱うかなどがある。

詳しくは Material Inspector の説明の際に紹介する。

 

テクスチャ

画像を壁紙やシールのようにマテリアルに貼り付けることができる。 マテリアルの色は Swift の Any となっており UIColor やテクスチャ、テクスチャの配列を設定できる。

テクスチャや色の設定をすることでジオメトリのリアリティが増す。

f:id:x67x6fx74x6f:20170719155424p:plain

 

今回はここまで。