参考
2023年3月26日日曜日
製作 002b 未来光円錐の方向 線路レールで
import bpy
import math
zion_collection_name = "円錐 色変化"
# コレクションを作成する
col = bpy.data.collections.new(zion_collection_name)
bpy.context.scene.collection.children.link(col)
import bpy
import math
zion_collection_name = "合成0.1 放出点 x軸移動 増速 "
# コレクションを作成する
col = bpy.data.collections.new(zion_collection_name)
bpy.context.scene.collection.children.link(col)
import bpy
import math
zion_collection_name = "合成0.2 放出点 x軸移動 増速 "
# コレクションを作成する
col = bpy.data.collections.new(zion_collection_name)
bpy.context.scene.collection.children.link(col)
import bpy
import math
zion_collection_name = "幻想0.0 放出点 x軸移動 増速 "
# コレクションを作成する
col = bpy.data.collections.new(zion_collection_name)
bpy.context.scene.collection.children.link(col)
#円錐台 未来光円錐 kaizou
import bpy
from math import radians
# 回転させる軸を選択する
zion_xyz = 'xana' #kairyou
# 円錐を作成する
bpy.ops.mesh.primitive_cone_add(radius1=60, radius2=0, 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] = 30.0 # Z座標
if zion_xyz == 'xana':
# 軸を中心に90度回転させる
bpy.context.object.rotation_euler[0] = radians(0)
bpy.context.object.rotation_euler[1] = radians(180)
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)
#円錐台 過去k光円錐 改造
import bpy
from math import radians
# 回転させる軸を選択する
zion_xyz = 'xana' #kairyou
# 円錐を作成する
bpy.ops.mesh.primitive_cone_add(radius1=60, radius2=0, 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] = -30.0 # Z座標
if zion_xyz == 'xana':
# 軸を中心に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)
# 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)
# zure 時間差放出 合成 別慣性系 事象情報 拡散線
import bpy
import math
import random
from mathutils import Vector
# 球体の数を指定する
nnn = 50
# 速度を指定する
zion_speed = 1.0
# 目標位置を指定する
zion_target = Vector((0, -60, 0))
# 放出間隔を指定する
zion_slow = 2.0
# 平行移動するかどうかを指定する
parallel = False
# 平行移動量を指定する
parallel_distance = Vector((300, 300, 300)) # ここを変更する
# x軸方向の移動量を指定する
zure_xx = 0.1
# 球体を作成する関数
def create_sphere(location, radius):
bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius, enter_editmode=False)
# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location, speed):
distance = (target_location - obj.location).length
duration = distance / speed
for frame in range(start_frame, end_frame+1):
t = (frame - start_frame) / duration
obj.location = obj.location.lerp(target_location, t)
obj.location.x += zure_xx # x成分に移動量を追加する
obj.keyframe_insert(data_path="location", frame=frame)
# 分布想定 球体を作成する
spheres = []
for i in range(nnn):
phi = random.uniform(0, math.pi)
theta = random.uniform(0, 2*math.pi)
radius = 0.0001
x = radius * math.sin(phi) * math.cos(theta)
y = radius * math.sin(phi) * math.sin(theta)
z = radius * math.cos(phi)
location = Vector((x, y, 0))
create_sphere(location, 2.0)
obj = bpy.context.active_object
obj.name = "事象情報 拡散線 sphere"
spheres.append(obj)
# アニメーションを設定する
for i, sphere in enumerate(spheres):
start_frame = i * int(6 * zion_slow) # 球体生成時のフレームからアニメーションを開始する
end_frame = start_frame + 600
location = sphere.location
if parallel:
target_location = location + parallel_distance
else:
# 表面に沿って動くように設定する
normal = location.normalized()
target_location = location + normal * 6000 # 半径30の球体表面に沿って動く
distance = (target_location - location).length
speed = zion_speed / distance
set_animation(sphere, start_frame, end_frame, target_location, speed)
# アニメーションを再生する
bpy.context.scene.frame_start = 0
bpy.context.scene.frame_end = 1400
bpy.context.scene.render.fps = 60
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.context.scene.render.filepath = "/tmp"
# zure 時間差放出 幻想
import bpy
import math
import random
from mathutils import Vector
# 球体の数を指定する
nnn = 50
# 速度を指定する
zion_speed = 1.0
# 目標位置を指定する
zion_target = Vector((0, -60, 0))
# 放出間隔を指定する
zion_slow = 2.0
# 平行移動するかどうかを指定する
parallel = False
# 平行移動量を指定する
parallel_distance = Vector((300, 300, 300)) # ここを変更する
# x軸方向の移動量を指定する
zure_xx = 0.0
# 球体を作成する関数
def create_sphere(location, radius):
bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius, enter_editmode=False)
# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location, speed):
distance = (target_location - obj.location).length
duration = distance / speed
for frame in range(start_frame, end_frame+1):
t = (frame - start_frame) / duration
obj.location = obj.location.lerp(target_location, t)
obj.location.x += zure_xx # x成分に移動量を追加する
obj.keyframe_insert(data_path="location", frame=frame)
# 分布想定 球体を作成する
spheres = []
for i in range(nnn):
phi = random.uniform(0, math.pi)
theta = random.uniform(0, 2*math.pi)
radius = 0.0001
x = radius * math.sin(phi) * math.cos(theta)
y = radius * math.sin(phi) * math.sin(theta)
z = radius * math.cos(phi)
location = Vector((x, y, 0))
create_sphere(location, 2.0)
obj = bpy.context.active_object
obj.name = "幻想 自己中心主義sphere"
spheres.append(obj)
# アニメーションを設定する
for i, sphere in enumerate(spheres):
start_frame = i * int(6 * zion_slow) # 球体生成時のフレームからアニメーションを開始する
end_frame = start_frame + 600
location = sphere.location
if parallel:
target_location = location + parallel_distance
else:
# 表面に沿って動くように設定する
normal = location.normalized()
target_location = location + normal * 6000 # 半径30の球体表面に沿って動く
distance = (target_location - location).length
speed = zion_speed / distance
set_animation(sphere, start_frame, end_frame, target_location, speed)
# アニメーションを再生する
bpy.context.scene.frame_start = 0
bpy.context.scene.frame_end = 1400
bpy.context.scene.render.fps = 60
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.context.scene.render.filepath = "/tmp"
# zure 時間差放出 合成 別慣性系 0.2事象情報 拡散線
import bpy
import math
import random
from mathutils import Vector
# 球体の数を指定する
nnn = 50
# 速度を指定する
zion_speed = 1.0
# 目標位置を指定する
zion_target = Vector((0, -60, 0))
# 放出間隔を指定する
zion_slow = 2.0
# 平行移動するかどうかを指定する
parallel = False
# 平行移動量を指定する
parallel_distance = Vector((300, 300, 300)) # ここを変更する
# x軸方向の移動量を指定する
zure_xx = 0.2
# 球体を作成する関数
def create_sphere(location, radius):
bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius, enter_editmode=False)
# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location, speed):
distance = (target_location - obj.location).length
duration = distance / speed
for frame in range(start_frame, end_frame+1):
t = (frame - start_frame) / duration
obj.location = obj.location.lerp(target_location, t)
obj.location.x += zure_xx # x成分に移動量を追加する
obj.keyframe_insert(data_path="location", frame=frame)
# 分布想定 球体を作成する
spheres = []
for i in range(nnn):
phi = random.uniform(0, math.pi)
theta = random.uniform(0, 2*math.pi)
radius = 0.0001
x = radius * math.sin(phi) * math.cos(theta)
y = radius * math.sin(phi) * math.sin(theta)
z = radius * math.cos(phi)
location = Vector((x, y, 0))
create_sphere(location, 2.0)
obj = bpy.context.active_object
obj.name = "0.2事象情報 拡散線 sphere"
spheres.append(obj)
# アニメーションを設定する
for i, sphere in enumerate(spheres):
start_frame = i * int(6 * zion_slow) # 球体生成時のフレームからアニメーションを開始する
end_frame = start_frame + 600
location = sphere.location
if parallel:
target_location = location + parallel_distance
else:
# 表面に沿って動くように設定する
normal = location.normalized()
target_location = location + normal * 6000 # 半径30の球体表面に沿って動く
distance = (target_location - location).length
speed = zion_speed / distance
set_animation(sphere, start_frame, end_frame, target_location, speed)
# アニメーションを再生する
bpy.context.scene.frame_start = 0
bpy.context.scene.frame_end = 1400
bpy.context.scene.render.fps = 60
bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
bpy.context.scene.render.filepath = "/tmp"
# オブジェクトに名前を付ける
bpy.context.object.name = "慣性系 x0.1倍 速度 追加"
# オブジェクトに名前を付ける
bpy.context.object.name = "慣性系 x0.0倍 速度 追加"
bbb