Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

[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

◯これを利用して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 細分化
masterkeaton12
プログラミング家庭教師をしています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away