RGBAのカラーサンプル
https://ywork2020.com/content/tips-rgba-color-sample.html
RGBAの各成分を255の範囲から1.0の範囲に変換するためには、次のような変換を行います。
- RGBAの各成分の値を0から255の範囲に持つ整数として取得します。
- 各成分の値を255で除算します。
- 得られた結果を小数点以下2桁まで丸めます。
以下にPythonのコード例を示します。
blender python で スクリプト 書く
円柱を3つ作る
円柱長さ 10
円柱半径 0.01
円柱中心位置 Bleu 0,0,+1
円柱中心位置 Green 0,0,0
円柱中心位置 Red 0,0,-1
# 3本の円柱
import bpy
import math
# 円柱を作成する関数
def create_cylinder(center_point, index):
bpy.ops.mesh.primitive_cylinder_add(
align='WORLD',
location=center_point,
depth=10,
rotation=(0, math.pi/2, 0), # y軸を回転軸にして90度回転
radius=0.01
)
# 作成した円柱に連番の名前を付ける
obj = bpy.context.object
obj.name = "Cylinder{}".format(index)
# 円柱1
center_point_1 = (0, 0, -1)
create_cylinder(center_point_1, 1)
# 円柱2
center_point_2 = (0, 0, 0)
create_cylinder(center_point_2, 2)
# 円柱3
center_point_3 = (0, 0, 1)
create_cylinder(center_point_3, 3)
#色付き 円柱 3つ
import bpy
import math
# 円柱を作成する関数
def create_cylinder(center_point, index, color):
bpy.ops.mesh.primitive_cylinder_add(
align='WORLD',
location=center_point,
depth=10,
rotation=(0, math.pi/2, 0), # y軸を回転軸にして90度回転
radius=0.01
)
# 作成した円柱に連番の名前を付ける
obj = bpy.context.object
obj.name = "Cylinder{}".format(index)
# マテリアルを追加して色を設定
mat = bpy.data.materials.new("Material{}".format(index))
mat.use_nodes = True
obj.data.materials.append(mat)
# ノードエディタで色を設定
node_tree = mat.node_tree
principled_bsdf = node_tree.nodes.get("Principled BSDF")
if principled_bsdf:
principled_bsdf.inputs[0].default_value = color
# 円柱1
center_point_1 = (0, 0, -1)
color_1 = (200/255, 0.0, 0.0, 0.8) # 赤色 (RGBA)
create_cylinder(center_point_1, 1, color_1)
# 円柱2
center_point_2 = (0, 0, 0)
color_2 = (0.0, 1.0, 0.0, 1.0) # 緑色 (RGBA)
create_cylinder(center_point_2, 2, color_2)
# 円柱3
center_point_3 = (0, 0, 1)
color_3 = (0.0, 0.0, 1.0, 1.0) # 青色 (RGBA)
create_cylinder(center_point_3, 3, color_3)
21個の球体を作る
球体半径 0.02
名前を付ける 連番で Green水平
(-1,0,0) と(+1,0,0) の間に均等配置
# Green水平 球体21個
import bpy
# 球体を作成する関数
def create_sphere(location, index, color):
bpy.ops.mesh.primitive_uv_sphere_add(
radius=0.03,
location=location
)
# 作成した球体に連番の名前を付ける
obj = bpy.context.object
obj.name = "Green水平{}".format(index)
# マテリアルを追加して色を設定
mat = bpy.data.materials.new("Material{}".format(index))
mat.use_nodes = True
obj.data.materials.append(mat)
# ノードエディタで色を設定
node_tree = mat.node_tree
principled_bsdf = node_tree.nodes.get("Principled BSDF")
if principled_bsdf:
principled_bsdf.inputs[0].default_value = color
# 21個の球体を作成
start_pos = (-1.0, 0.0, 0.0) # 配置の開始位置
distance = 0.1 # 球体同士の間隔
color = (0.0, 1.0, 0.0, 1.0) # 緑色 (RGBA)
for i in range(21):
x = start_pos[0] + (i * distance)
location = (x, start_pos[1], start_pos[2])
create_sphere(location, i+1, color)
21個の青い球体を作る
球体半径 0.03
(0,0,1) と(+2,0,1) の間に均等配置
作った 球体21個を複製し 移動する
(1,0,1) と(+2,0,1) の間に均等配置
名前を付ける 連番で Blue+1水平
作った 球体21個を複製し 移動する
(1,0,1) と(+2,0,1) の間に均等配置
名前を付ける 連番で Blue time+1水平
3つのコレクションを作り 3つに分けて 名前は B原点 B水平移動 B時間移動
import bpy
# コレクションを作成する関数
def create_collection(name):
collection = bpy.data.collections.new(name)
bpy.context.scene.collection.children.link(collection)
# コレクションを作成
create_collection("B原点")
create_collection("B水平移動")
create_collection("B時間移動")
コレクションだけを作り 名前は
R原点
R水平移動
R時間移動
G時間移動
G原点
import bpy
# コレクションを作成する関数
def create_collection(name):
collection = bpy.data.collections.new(name)
bpy.context.scene.collection.children.link(collection)
# コレクションの作成
create_collection("R原点")
create_collection("R水平移動")
create_collection("R時間移動")
create_collection("G時間移動")
create_collection("G原点")
# Green 球体 時間軸 +1
import bpy
# 球体を作成する関数
def create_sphere(location, index, color):
bpy.ops.mesh.primitive_uv_sphere_add(
radius=0.03,
location=location
)
# 作成した球体に連番の名前を付ける
obj = bpy.context.object
obj.name = "Green水平{}".format(index)
mat = bpy.data.materials.new("Material{}".format(index))
mat.use_nodes = True
obj.data.materials.append(mat)
# ノードエディタで色を設定
node_tree = mat.node_tree
principled_bsdf = node_tree.nodes.get("Principled BSDF")
if principled_bsdf:
principled_bsdf.inputs[0].default_value = color
# 21個の球体を作成
start_pos = (-1.0, 1.0, 0.0) # 配置の開始位置
distance = 0.1 # 球体同士の間隔
color = (0.0, 1.0, 0.0, 1.0) # 緑色 (RGBA)
for i in range(21):
x = start_pos[0] + (i * distance)
location = (x, start_pos[1], start_pos[2])
create_sphere(location, i+1, color)
# 青い球体 水平移動 +1
import bpy
# 球体を作成する関数
def create_sphere(location, index, color):
bpy.ops.mesh.primitive_uv_sphere_add(
radius=0.03,
location=location
)
# 作成した球体に連番の名前を付ける
obj = bpy.context.object
obj.name = "Blue{}".format(index)
mat = bpy.data.materials.new("Material{}".format(index))
mat.use_nodes = True
obj.data.materials.append(mat)
# ノードエディタで色を設定
node_tree = mat.node_tree
principled_bsdf = node_tree.nodes.get("Principled BSDF")
if principled_bsdf:
principled_bsdf.inputs[0].default_value = color
# Blue 水平移動 21個の球体を作成
start_pos = (0, 0, 1) # 配置の開始位置
end_pos = (2, 0, 1) # 配置の終了位置
num_spheres = 21 # 球体の数
color = (0.0, 0.0, 1.0, 1.0) # 青色 (RGBA)
distance = (end_pos[0] - start_pos[0]) / (num_spheres - 1) # 球体同士の間隔
for i in range(num_spheres):
x = start_pos[0] + (i * distance)
location = (x, start_pos[1], start_pos[2])
create_sphere(location, i+1, color)
# 青い球体 時間移動 +1
import bpy
# 球体を作成する関数
def create_sphere(location, index, color):
bpy.ops.mesh.primitive_uv_sphere_add(
radius=0.03,
location=location
)
# 作成した球体に連番の名前を付ける
obj = bpy.context.object
obj.name = "Blue{}".format(index)
mat = bpy.data.materials.new("Material{}".format(index))
mat.use_nodes = True
obj.data.materials.append(mat)
# ノードエディタで色を設定
node_tree = mat.node_tree
principled_bsdf = node_tree.nodes.get("Principled BSDF")
if principled_bsdf:
principled_bsdf.inputs[0].default_value = color
# Blue 水平移動 21個の球体を作成
start_pos = (0, 1, 1) # 配置の開始位置
end_pos = (2, 1, 1) # 配置の終了位置
num_spheres = 21 # 球体の数
color = (0.0, 0.0, 1.0, 1.0) # 青色 (RGBA)
distance = (end_pos[0] - start_pos[0]) / (num_spheres - 1) # 球体同士の間隔
for i in range(num_spheres):
x = start_pos[0] + (i * distance)
location = (x, start_pos[1], start_pos[2])
create_sphere(location, i+1, color)
bpy.ops.transform.rotate(value=math.radians(90), orient_axis='Y')