[Blender×Python]   マテリアルをマスターしよう!!

#目次
0.マテリアルを追加する方法
1.ガラスのマテリアルをつくってみよう!!
2.メタリックをつくってみよう!!
3.テキストを追加しよう!!
4.英単語

※今回は解説が少ないので、サンプルコードだけでまとめてはいません。

#0.マテリアルを追加する方法

##0-1.マテリアルを追加していく手順

①新しいマテリアルをつくる
②ノードを使えるようにする
③オブジェクトを追加する
④ノードの値を設定する
⑤オブジェクトにマテリアルを適応する


##0-2.Principled BSDFの中身

◯ノードのそれぞれの項目は0から順番に数字が割り当てられています。
今回はPrincipled BSDFを使って説明していきます。

Base Color→**0**
Subsurface→**1**
:
Metallic→**4**
:
Roughness→**7**
:
Transmission→**15**

のようになっています。

![スクリーンショット 2020-11-13 19.19.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654004/250f6eaf-5a45-2cf8-810a-e3f3c0f68df9.png)


◯これを利用して``nodes["Principled BSDF"].inputs[0]``のようにして指定していきます。


#1.ガラスのマテリアルをつくってみよう!!

####◯シンプルなガラスのico_sphereを作るプログラム

```.py
import bpy

#新しいマテリアルをつくる
material_glass = bpy.data.materials.new('Green')
#ノードを使えるようにする
material_glass.use_nodes = True
#オブジェクトを追加する
bpy.ops.mesh.primitive_ico_sphere_add(subdivisions=1, enter_editmode=False, align='WORLD', location=(0, 0, 0), scale=(1, 1, 1))

#ノードの値を設定していく
#変数p_BSDFをつくって書く量を減らす
p_BSDF = material_glass.node_tree.nodes["Principled BSDF"]
#0→BaseColor/7→roughness(=粗さ)/15→transmission(=伝播)
#default_value = (R, G, B, A)
p_BSDF.inputs[0].default_value = (0, 1, 0, 1)
p_BSDF.inputs[7].default_value = 0
p_BSDF.inputs[15].default_value = 1
#オブジェクトにマテリアルの要素を追加する
bpy.context.object.data.materials.append(material_glass)
```

![cube02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654004/7beef332-4782-a576-9ec1-a4fc9762f0c1.png)


---



####◯ガラスの立方体を3次元的に並べるプログラム

```.py
import bpy

for i in range(0,5):
    for j in range(0,5):
        for k in range(0,5):
            #新規マテリアルをつくる
            material_glass = bpy.data.materials.new('Red')
            #ノードを使えるようにする
            material_glass.use_nodes = True
            bpy.ops.mesh.primitive_cube_add(
                size=0.8,
                #それぞれ縦、横、高さを決める
                location=(i, j, k),
                )
            p_BSDF = material_glass.node_tree.nodes["Principled BSDF"]
            p_BSDF.inputs[0].default_value = (1, 0, 0, 1)
            p_BSDF.inputs[7].default_value = 0
            p_BSDF.inputs[15].default_value = 1
            bpy.context.object.data.materials.append(material_glass)
```

![cube01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654004/66cb2f98-661a-37d8-36bd-ee5833501c6c.png)


---

#2.メタリックをつくってみよう!!

####◯メタリックのico_spehreを並べるプログラム

```.py
import bpy

#6回処理を繰り返す
for i in range(0,6):
    #新規マテリアルをつくる
    material_glass = bpy.data.materials.new('Blue')
    #ノードを使えるようにする
    material_glass.use_nodes = True
    #ico_sphereを追加する関数
    bpy.ops.mesh.primitive_ico_sphere_add(
        #どんどん滑らかにしていく
        subdivisions=i+1,
        location=(i, 0, 0),
        scale=(0.7, 0.7, 0.7)
        )
    p_BSDF = material_glass.node_tree.nodes["Principled BSDF"]
    #0→BaseColor/4→Metallic(=金属)/7→roughness(=粗さ)
    p_BSDF.inputs[0].default_value = (0, 0, 1, 0.5)
    p_BSDF.inputs[4].default_value = 1
    p_BSDF.inputs[7].default_value = 0
    #オブジェクトにマテリアルの要素を追加する
    bpy.context.object.data.materials.append(material_glass)
```






![cube03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654004/f7d34831-3a6f-6f7e-e6c6-9d227f4095f9.png)

---









####◯少しずつ色を変えていくプログラム

処理を繰り返す度に変化するiを色に代入することで色を少しずつ変化させることができます。

```.py
import bpy
import math
import random

for i in range(0,10):
    #0から１までのランダムな値を変数numに代入する
    num = random.random()
    
    material_glass = bpy.data.materials.new('Blue')
    material_glass.use_nodes = True
    bpy.ops.mesh.primitive_torus_add(
        #180(度)×0~1のランダムな値
        rotation=(math.pi * num, math.pi * num, 0),
        major_segments=64,
        minor_segments=3,
        major_radius=10-i,
        minor_radius=0.1,
         )
    p_BSDF = material_glass.node_tree.nodes["Principled BSDF"]
    p_BSDF.inputs[4].default_value = 1
    p_BSDF.inputs[7].default_value = 0
    p_BSDF.inputs[0].default_value = (0, 0, 1 - i/10, 1)
    bpy.context.object.data.materials.append(material_glass)

```



![e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654004/25bf2b37-d2a0-198e-cd23-e06bf9914dea.png)


















---


#3.テキストを追加しよう!!

##3-1.テキストの追加方法

◯シンプルなテキストの入力を行います。


```.py
import bpy

#テキストを追加して編集モードで編集できるようにする
bpy.ops.object.text_add(enter_editmode = True,location = (0,0,0))
#初期テキストを削除する
bpy.ops.font.delete(type = 'PREVIOUS_WORD')
#テキストを入力する
bpy.ops.font.text_insert(text = 'Blender')
#編集モードを終了する
bpy.ops.object.editmode_toggle()

```


![スクリーンショット 2020-11-13 20.14.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654004/b8e6e13e-7603-5825-353a-2058dddbbb99.png)





---


##3-1.メタリックなテキストをつくる

◯テキストにメタリックのマテリアルを組み合わせます。

```.py
import bpy

material_glass = bpy.data.materials.new('Blue')
#ノードを使えるようにする
material_glass.use_nodes = True

#テキストを追加して編集モードで編集できるようにする
bpy.ops.object.text_add(enter_editmode = True,location = (0,0,0))
#初期テキストを削除する
bpy.ops.font.delete(type = 'PREVIOUS_WORD')
#テキストを入力する
bpy.ops.font.text_insert(text = 'Blender')
#編集モードを終了する
bpy.ops.object.editmode_toggle()

#ノードをいじる
p_BSDF = material_glass.node_tree.nodes["Principled BSDF"]
p_BSDF.inputs[4].default_value = 1
p_BSDF.inputs[7].default_value = 0
p_BSDF.inputs[0].default_value = (0, 0, 1, 1)
bpy.context.object.data.materials.append(material_glass)
```

![e1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654004/749473a5-79d6-c184-4428-9f78d2638528.png)


---



#4.英単語

|英単語|訳|
|:--|:--|
|material|素材|
|default|デフォルト/既定|
|value|値|
|append|加える|
|object|もの、物体|
|edit|編集|
|type|種類|
|delete|消去|
|toggle|切り替え|
|operation(ops)|運用|
|add|追加|
|segment|区分、分割|
|insert|挿入する|
|input|取得する、入手する|
|previous|以前の、前の|
|principled|原理、原則|
|subdivision|細分化|