LoginSignup
20
15

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-11-13

目次

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

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

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

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

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


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

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


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

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

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


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

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

import bpy
import math
import random

for i in range(0,10):
    #0から1までのランダムな値を変数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


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

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

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

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


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

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

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


4.英単語

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