LoginSignup
6
7

More than 5 years have passed since last update.

SceneKitのマテリアルのdiffuseを変更して3D物体の見た目を変える

Last updated at Posted at 2018-12-06

SceneKitのマテリアルについて一番くわしいブログ記事にiOS で SceneKit を試す(Swift 3) その33 - ジオメトリの質感を決めるマテリアルについてがありますが、今記事では、もっと簡単なところだけにフォーカスします。

マテリアルとは

スクリーンショット 2018-12-06 8.58.22.png
https://developer.apple.com/documentation/scenekit/scnmaterial

AppleのSCNMaterialの説明を引用すると、ジオメトリの表面の見た目を決める濃淡の特徴のセットと訳せます。

どうやって設定するの

スクリーンショット 2018-12-06 9.03.53.png

scnファイルを開いてsphereというジオメトリをおいた様子が上です。

右側の玉アイコンで編集できます。

赤くしてみる

スクリーンショット 2018-12-06 9.21.36.png

上記のようにdiffuseで色を変更するとmaterialの色が変わります。

マテリアルは1つだけではない

スクリーンショット 2018-12-06 9.23.12.png

先の例では、上記のようにuntitiledMaterialが赤くなっていました。スフィアの場合は表面が1つしかないので、materialが一個しかありませんでした。しかし、円柱の場合はどうでしょう。

スクリーンショット 2018-12-06 9.24.59.png

上のように、1つしかマテリアルを追加しなければ、全体が赤くなりますが、

スクリーンショット 2018-12-06 9.26.43.png

円柱は表面が上の面、下の面、側面と3つあるので3つまでマテリアルを追加して面によって色を変えることができます。materialはそれぞれidentityに名前を入れて名前をつけることができます。

スクリーンショット 2018-12-06 9.34.49.png

SCNTextのジオメトリに対して行うと、上のようにIKEAも再現できる。。!w

画像を割り当ててみる

diffuseには画像ファイルも割り当てることができます。

スクリーンショット 2018-12-06 9.36.23.png

スクリーンショット 2018-12-06 9.36.38.png

こんなかんじで、画像マテリアルで模様が自由自在です。

実はあの飛行機も

ARKitのテンプレートを作ると出てくるこの飛行機にも実はmaterialがはってあります。

スクリーンショット 2018-12-06 9.38.28.png

ためしにマテリアルを削除してみると

スクリーンショット 2018-12-06 9.41.19.png

真っ白になってしまいました。

実は飛行機の模様、以下のような画像のマテリアルが貼ってあるだけなのです。3Dのモデルを展開して2Dの面にしたときの展開図みたいなイメージですかね。

スクリーンショット 2018-12-06 9.41.55.png

コードでもできるよ

let sphere = SCNSphere(radius: 0.1)
sphere.firstMaterial?.diffuse.contents = UIColor.red

let node = SCNNode()
node.geometry = sphere

複数のマテリアルをつけたいときは以下のように

let m1 = SCNMaterial()
m1.diffuse.contents = UIColor.red // 赤

let m2 = SCNMaterial()
m2.diffuse.contents = UIColor.blue // 青

sphere.materials = [m1, m2]

まとめ

  • materialのdiffuseに色を入れると表面の色が変わる
  • materialは1つだけではない、表面の数だけ設定できる
  • materialには画像も入れられる
6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7