#色変化 線路レール長さ 円錐
import bpy
from math import radians
# 回転させる軸を選択する
zion_xyz = 'xana'
# 円錐を作成する
bpy.ops.mesh.primitive_cone_add(radius1=5, radius2=2, depth=60)
# オブジェクトに名前を付ける
bpy.context.object.name = "線路レール 色変化"
# 円錐の位置を変更する
bpy.context.object.location[0] = 0.0 # X座標
bpy.context.object.location[1] = 0.0 # Y座標
bpy.context.object.location[2] = 0.0 # Z座標
if zion_xyz == 'xana':
# 軸を中心に90度回転させる
bpy.context.object.rotation_euler[0] = radians(0)
bpy.context.object.rotation_euler[1] = radians(90)
bpy.context.object.rotation_euler[2] = radians(0)
# X軸方向に伸ばす
bpy.context.object.scale[0] = 1
bpy.context.object.scale[1] = 1
bpy.context.object.scale[2] = 1
elif zion_xyz == 'yana':
# 軸を中心に90度回転させる
bpy.context.object.rotation_euler[0] = radians(90)
bpy.context.object.rotation_euler[1] = radians(0)
bpy.context.object.rotation_euler[2] = radians(0)
# Y軸方向に伸ばす
bpy.context.object.scale[0] = 1
bpy.context.object.scale[1] = 1
bpy.context.object.scale[2] = 1
elif zion_xyz == 'zana':
# Z軸を中心に90度回転させる
bpy.context.object.rotation_euler[0] = radians(0)
bpy.context.object.rotation_euler[1] = radians(0)
bpy.context.object.rotation_euler[2] = radians(0)
# Z軸方向に伸ばす
bpy.context.object.scale[0] = 30
bpy.context.object.scale[1] = 30
bpy.context.object.scale[2] = 1
else:
print('Invalid rotation axis selected.')
# 作成されたオブジェクトを取得する
cone = bpy.context.object
# アニメーション開始時の位置
start_loc = cone.location
# 移動距離
move_dist = 0
# アニメーションのフレーム数
frame_count = 600
# アニメーションの最終フレームを設定する
bpy.context.scene.frame_end = frame_count
# マテリアルを作成する
mat = bpy.data.materials.new(name="Material")
cone.data.materials.append(mat)
# 移動アニメーションと色のアニメーションのキーフレームを設定する
for i in range(frame_count):
# 現在のフレームにおける位置と色を計算する
current_loc = (start_loc[0] + move_dist * i / frame_count, start_loc[1], start_loc[2])
if i < frame_count / 2:
# 前半は青から緑色に変化する
mat.diffuse_color = (0, i / (frame_count / 2), 1 - i / (frame_count / 2), 1)
else:
# 後半は赤色からショッキングピンク色に変化する
t = (i - frame_count / 2) / (frame_count / 2) # 0から1に変化する
if t < 0.5:
# 真っ赤の半分の明るさで始まる
mat.diffuse_color = (1, 0, 0.5 * t, 1)
else:
# ショッキングピンクに変化する
mat.diffuse_color = (1, 0, 1, 1)
# 位置と色を設定し、キーフレームを追加する
cone.location = current_loc
cone.keyframe_insert(data_path='location', frame=i+1)
mat.keyframe_insert(data_path='diffuse_color', frame=i+1)
# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
以下のスクリプトで、後半が真っ赤からショッキングピンク色に変化するアニメーションを作成することができます。
# 作成されたオブジェクトを取得する
cone = bpy.context.object
# アニメーション開始時の位置
start_loc = cone.location
# 移動距離
move_dist = 0
# アニメーションのフレーム数
frame_count = 600
# アニメーションの最終フレームを設定する
bpy.context.scene.frame_end = frame_count
# マテリアルを作成する
mat = bpy.data.materials.new(name="Material")
cone.data.materials.append(mat)
# 移動アニメーションと色のアニメーションのキーフレームを設定する
for i in range(frame_count):
# 現在のフレームにおける位置と色を計算する
current_loc = (start_loc[0] + move_dist * i / frame_count, start_loc[1], start_loc[2])
if i < frame_count / 2: # 最初から半分まで
# 青から緑に変化する
mat.diffuse_color = (0, 1, i / (frame_count / 2), 1)
else: # 残り半分
# 緑から赤に変化する
mat.diffuse_color = ((i - frame_count / 2) / (frame_count / 2), 1, 0, 1)
# 位置と色を設定し、キーフレームを追加する
cone.location = current_loc
cone.keyframe_insert(data_path='location', frame=i+1)
mat.keyframe_insert(data_path='diffuse_color', frame=i+1)
このスクリプトでは、後半が赤色に変化する部分で、0から1に変化する変数
t
を使って、if
文を使って色を切り替えています。半分までは真っ赤の半分の明さに変化し、それ以降はショッキングピンク色に変化するように設定しています。また、ショッキングピンク色に変化するときには、逆から徐々に暗くしていくように設定しています。# 後半を 赤から ショッキングピンク色に変化
import bpy
# 円錐を作成する
bpy.ops.mesh.primitive_cone_add(radius1=10, depth=180)
# 作成されたオブジェクトを取得する
cone = bpy.context.object
# アニメーション開始時の位置
start_loc = cone.location
# 移動距離
move_dist = 0
# アニメーションのフレーム数
frame_count = 600
# アニメーションの最終フレームを設定する
bpy.context.scene.frame_end = frame_count
# マテリアルを作成する
mat = bpy.data.materials.new(name="Material")
cone.data.materials.append(mat)
# 移動アニメーションと色のアニメーションのキーフレームを設定する
for i in range(frame_count):
# 現在のフレームにおける位置と色を計算する
current_loc = (start_loc[0] + move_dist * i / frame_count, start_loc[1], start_loc[2])
if i < frame_count / 2:
# 前半は青から緑色に変化する
mat.diffuse_color = (0, i / (frame_count / 2), 1 - i / (frame_count / 2), 1)
else:
# 後半は赤色からショッキングピンク色に変化する
t = (i - frame_count / 2) / (frame_count / 2) # 0から1に変化する
if t < 0.5:
# 真っ赤の半分の明るさで始まる
mat.diffuse_color = (1, 0, 0.5 * t, 1)
else:
# ショッキングピンクに変化する
mat.diffuse_color = (1, 0, 1, 1)
# 位置と色を設定し、キーフレームを追加する
cone.location = current_loc
cone.keyframe_insert(data_path='location', frame=i+1)
mat.keyframe_insert(data_path='diffuse_color', frame=i+1)
たぶん 色変化のこれが 一番良い方
import bpy
# 円錐を作成する
bpy.ops.mesh.primitive_cone_add(radius1=10, depth=180)
# 作成されたオブジェクトを取得する
cone = bpy.context.object
# アニメーション開始時の位置
start_loc = cone.location
# 移動距離
move_dist = 0
# アニメーションのフレーム数
frame_count = 600
# アニメーションの最終フレームを設定する
bpy.context.scene.frame_end = frame_count
# マテリアルを作成する
mat = bpy.data.materials.new(name="Material")
cone.data.materials.append(mat)
# 移動アニメーションと色のアニメーションのキーフレームを設定する
for i in range(frame_count):
# 現在のフレームにおける位置と色を計算する
current_loc = (start_loc[0] + move_dist * i / frame_count, start_loc[1], start_loc[2])
if i < frame_count / 2:
# 前半は青から緑色に変化する
mat.diffuse_color = (0, i / (frame_count / 2), 1 - i / (frame_count / 2), 1)
else:
# 後半は赤色に変化する
t = (i - frame_count / 2) / (frame_count / 2) # 0から1に変化する
mat.diffuse_color = (1, 1 - t, 0, 1)
# 位置と色を設定し、キーフレームを追加する
cone.location = current_loc
cone.keyframe_insert(data_path='location', frame=i+1)
mat.keyframe_insert(data_path='diffuse_color', frame=i+1)
bbb